Simple library to use the TI ADC0848 with the MBED Ports Library. This Library can be used either in polling or interrupt modes.
ADC0848.cpp@0:a76d9079d07b, 2013-10-07 (annotated)
- 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?
User | Revision | Line number | New 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 |