Simple library to use the TI ADC0848 with the MBED Ports Library. This Library can be used either in polling or interrupt modes.

Committer:
mr63
Date:
Mon Oct 07 21:49:38 2013 +0000
Revision:
0:a76d9079d07b
Simple library to use the TI ADC0848 with the MBED Ports Library.  This Library can be used either in polling or interrupt modes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mr63 0:a76d9079d07b 1 #include "ADC0848.h"
mr63 0:a76d9079d07b 2
mr63 0:a76d9079d07b 3
mr63 0:a76d9079d07b 4 unsigned char A2DValue[8] = {0,0,0,0,0,0,0,0};
mr63 0:a76d9079d07b 5
mr63 0:a76d9079d07b 6 //ADC0848 Class Constructor for polling A2D using int ADC0848::Poll_A2D(unsigned char Channel)
mr63 0:a76d9079d07b 7 ADC0848::ADC0848(PinName pin1, PinName pin2, PinName pin3, PinName pin4, PinName pin5, PinName pin6, PinName pin7, PinName pin8, PinName pin9, PinName pin10, PinName pin11)
mr63 0:a76d9079d07b 8 :_DataBus(pin1,pin2,pin3,pin4,pin5,pin6,pin7,pin8), _WR(pin9), _RD(pin10),_intS(NC),_intP(pin11)
mr63 0:a76d9079d07b 9 {
mr63 0:a76d9079d07b 10 _WR = 1;
mr63 0:a76d9079d07b 11 _RD = 1;
mr63 0:a76d9079d07b 12 _intP.mode(PullUp);
mr63 0:a76d9079d07b 13 _scan = false;
mr63 0:a76d9079d07b 14 }
mr63 0:a76d9079d07b 15 //ADC0848 Class Constructor for scanning all channels of continues using interrupts A2D vales can be using int ADC0848::GetA2D(unsigned char Channel)
mr63 0:a76d9079d07b 16 //char ADC0848::Start_Scan() must be called to start a conversion
mr63 0:a76d9079d07b 17 ADC0848::ADC0848(PinName pin1, PinName pin2, PinName pin3, PinName pin4, PinName pin5, PinName pin6, PinName pin7, PinName pin8, PinName pin9, PinName pin10, PinName pin11,bool Scan)
mr63 0:a76d9079d07b 18 :_DataBus(pin1,pin2,pin3,pin4,pin5,pin6,pin7,pin8), _WR(pin9), _RD(pin10),_intS(pin11),_intP(NC), _scan(Scan)
mr63 0:a76d9079d07b 19 {
mr63 0:a76d9079d07b 20 _WR = 1;
mr63 0:a76d9079d07b 21 _RD = 1;
mr63 0:a76d9079d07b 22 _intS.mode(PullUp);
mr63 0:a76d9079d07b 23 _intS.fall_add(this,&ADC0848::DIGI_IO_ISR);
mr63 0:a76d9079d07b 24 }
mr63 0:a76d9079d07b 25
mr63 0:a76d9079d07b 26
mr63 0:a76d9079d07b 27 void ADC0848::DIGI_IO_ISR() // ISR used if in scanning mode to scan the 8 channels of the ADC The values are stored in unsigned char A2DValue[8]
mr63 0:a76d9079d07b 28 {
mr63 0:a76d9079d07b 29 static unsigned char channel_num=0;
mr63 0:a76d9079d07b 30 _DataBus.input();
mr63 0:a76d9079d07b 31 _RD = 0;
mr63 0:a76d9079d07b 32 A2DValue[channel_num] = _DataBus;
mr63 0:a76d9079d07b 33 _RD = 1;
mr63 0:a76d9079d07b 34 channel_num++;
mr63 0:a76d9079d07b 35 if(channel_num > 7)
mr63 0:a76d9079d07b 36 channel_num=0;
mr63 0:a76d9079d07b 37 _DataBus.output();
mr63 0:a76d9079d07b 38 _DataBus=0x08 | channel_num;
mr63 0:a76d9079d07b 39 _WR = 0;
mr63 0:a76d9079d07b 40 _WR = 1;
mr63 0:a76d9079d07b 41 }
mr63 0:a76d9079d07b 42
mr63 0:a76d9079d07b 43 int ADC0848::Start_Scan()
mr63 0:a76d9079d07b 44 {
mr63 0:a76d9079d07b 45 if(_scan)
mr63 0:a76d9079d07b 46 {
mr63 0:a76d9079d07b 47 _DataBus.output(); //start 1st conversion
mr63 0:a76d9079d07b 48 _DataBus=0x08;
mr63 0:a76d9079d07b 49 _WR = 0;
mr63 0:a76d9079d07b 50 _WR = 1;
mr63 0:a76d9079d07b 51 return(1);
mr63 0:a76d9079d07b 52 }
mr63 0:a76d9079d07b 53 else
mr63 0:a76d9079d07b 54 {
mr63 0:a76d9079d07b 55 return(-1);
mr63 0:a76d9079d07b 56 }
mr63 0:a76d9079d07b 57 }
mr63 0:a76d9079d07b 58
mr63 0:a76d9079d07b 59 int ADC0848::GetA2D(unsigned char Channel) //Returns the Value of the the channel requested when in scanning mode. If not in scanning mode the function returns -1
mr63 0:a76d9079d07b 60 {
mr63 0:a76d9079d07b 61 if(_scan)
mr63 0:a76d9079d07b 62 {
mr63 0:a76d9079d07b 63 return((int)A2DValue[Channel]);
mr63 0:a76d9079d07b 64 }
mr63 0:a76d9079d07b 65 else
mr63 0:a76d9079d07b 66 {
mr63 0:a76d9079d07b 67 return(-1);
mr63 0:a76d9079d07b 68 }
mr63 0:a76d9079d07b 69 }
mr63 0:a76d9079d07b 70
mr63 0:a76d9079d07b 71 int ADC0848::Poll_A2D(unsigned char Channel) //Returns the Value of the the channel requested when in polling mode. If not in polling mode the function returns -1
mr63 0:a76d9079d07b 72 {
mr63 0:a76d9079d07b 73 if(!_scan)
mr63 0:a76d9079d07b 74 {
mr63 0:a76d9079d07b 75 char data;
mr63 0:a76d9079d07b 76 _DataBus.output();
mr63 0:a76d9079d07b 77 _DataBus=0x08 | Channel;
mr63 0:a76d9079d07b 78 _WR = 0;
mr63 0:a76d9079d07b 79 _WR = 1;
mr63 0:a76d9079d07b 80 while(_intP);
mr63 0:a76d9079d07b 81 _DataBus.input();
mr63 0:a76d9079d07b 82 _RD = 0;
mr63 0:a76d9079d07b 83 data = _DataBus;
mr63 0:a76d9079d07b 84 _RD = 1;
mr63 0:a76d9079d07b 85 return ((int)data);
mr63 0:a76d9079d07b 86 }
mr63 0:a76d9079d07b 87 else
mr63 0:a76d9079d07b 88 {
mr63 0:a76d9079d07b 89 return(-1);
mr63 0:a76d9079d07b 90 }
mr63 0:a76d9079d07b 91 }
mr63 0:a76d9079d07b 92
mr63 0:a76d9079d07b 93