marcel van de Kamp
/
ADS8320V3_example
program for external ADC ADS8320 Based on the program for the SCP1000. Still figuring out timing issues
ads8320/ads8320.cpp@0:918a2b064be6, 2011-02-18 (annotated)
- Committer:
- marcelvandekamp
- Date:
- Fri Feb 18 13:46:46 2011 +0000
- Revision:
- 0:918a2b064be6
V3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcelvandekamp | 0:918a2b064be6 | 1 | |
marcelvandekamp | 0:918a2b064be6 | 2 | |
marcelvandekamp | 0:918a2b064be6 | 3 | #include "ads8320.h" |
marcelvandekamp | 0:918a2b064be6 | 4 | |
marcelvandekamp | 0:918a2b064be6 | 5 | ads8320::ads8320(PinName mosi, PinName miso, PinName sclk, PinName cs) |
marcelvandekamp | 0:918a2b064be6 | 6 | : m_spi(mosi, miso, sclk) |
marcelvandekamp | 0:918a2b064be6 | 7 | , m_cs(cs) { |
marcelvandekamp | 0:918a2b064be6 | 8 | m_cs=1; |
marcelvandekamp | 0:918a2b064be6 | 9 | m_spi.frequency(1000000); // the fastest of the sensor |
marcelvandekamp | 0:918a2b064be6 | 10 | m_spi.format(8, 0); // duda son dos palabras de 8 bits? |
marcelvandekamp | 0:918a2b064be6 | 11 | // wait(0.5); |
marcelvandekamp | 0:918a2b064be6 | 12 | //------------------------------------------------ |
marcelvandekamp | 0:918a2b064be6 | 13 | // pc.printf("RESET\r\n"); |
marcelvandekamp | 0:918a2b064be6 | 14 | write_register(0x06,0x01); |
marcelvandekamp | 0:918a2b064be6 | 15 | // wait(0.5); |
marcelvandekamp | 0:918a2b064be6 | 16 | |
marcelvandekamp | 0:918a2b064be6 | 17 | // pc.printf("Initialize High Resolution Constant Reading Mode\r\n"); |
marcelvandekamp | 0:918a2b064be6 | 18 | write_register(0x03,0x0A); |
marcelvandekamp | 0:918a2b064be6 | 19 | //wait(0.5); |
marcelvandekamp | 0:918a2b064be6 | 20 | } |
marcelvandekamp | 0:918a2b064be6 | 21 | |
marcelvandekamp | 0:918a2b064be6 | 22 | |
marcelvandekamp | 0:918a2b064be6 | 23 | unsigned int ads8320::readTemperature() { //was float |
marcelvandekamp | 0:918a2b064be6 | 24 | unsigned int temp_in = read_register16(TEMP); |
marcelvandekamp | 0:918a2b064be6 | 25 | // temp_in /= 20; |
marcelvandekamp | 0:918a2b064be6 | 26 | unsigned int Ti = temp_in; |
marcelvandekamp | 0:918a2b064be6 | 27 | return Ti; //return temp_in; |
marcelvandekamp | 0:918a2b064be6 | 28 | } |
marcelvandekamp | 0:918a2b064be6 | 29 | |
marcelvandekamp | 0:918a2b064be6 | 30 | void ads8320::write_register(char register_name, char register_value) { |
marcelvandekamp | 0:918a2b064be6 | 31 | register_name <<= 2; |
marcelvandekamp | 0:918a2b064be6 | 32 | register_name |= 0x02; //write command |
marcelvandekamp | 0:918a2b064be6 | 33 | m_cs=0; //Select SPI device |
marcelvandekamp | 0:918a2b064be6 | 34 | m_spi.write(register_name); //Send register location |
marcelvandekamp | 0:918a2b064be6 | 35 | m_spi.write(register_value); //Send value to record into register |
marcelvandekamp | 0:918a2b064be6 | 36 | m_cs=1; |
marcelvandekamp | 0:918a2b064be6 | 37 | } |
marcelvandekamp | 0:918a2b064be6 | 38 | |
marcelvandekamp | 0:918a2b064be6 | 39 | unsigned int ads8320::read_register16(char register_name) { |
marcelvandekamp | 0:918a2b064be6 | 40 | register_name <<= 2; |
marcelvandekamp | 0:918a2b064be6 | 41 | register_name &= 0xFC; //Read command |
marcelvandekamp | 0:918a2b064be6 | 42 | m_cs=0; //Select SPI Device |
marcelvandekamp | 0:918a2b064be6 | 43 | m_spi.write(register_name); //Write byte to device |
marcelvandekamp | 0:918a2b064be6 | 44 | unsigned int in_byte1 = m_spi.write(0x00); //(was zonder unsigned) |
marcelvandekamp | 0:918a2b064be6 | 45 | unsigned int in_byte2 = m_spi.write(0x00); |
marcelvandekamp | 0:918a2b064be6 | 46 | m_cs=1; |
marcelvandekamp | 0:918a2b064be6 | 47 | //float in_word= (in_byte1<<=8) | (in_byte2); |
marcelvandekamp | 0:918a2b064be6 | 48 | unsigned int in_word= (in_byte1<<=8) | (in_byte2); |
marcelvandekamp | 0:918a2b064be6 | 49 | return(in_word); |
marcelvandekamp | 0:918a2b064be6 | 50 | } |