marcel van de Kamp
/
ADS8320V3_example
program for external ADC ADS8320 Based on the program for the SCP1000. Still figuring out timing issues
Revision 0:918a2b064be6, committed 2011-02-18
- Comitter:
- marcelvandekamp
- Date:
- Fri Feb 18 13:46:46 2011 +0000
- Commit message:
- V3
Changed in this revision
diff -r 000000000000 -r 918a2b064be6 ads8320/ads8320.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ads8320/ads8320.cpp Fri Feb 18 13:46:46 2011 +0000 @@ -0,0 +1,50 @@ + + +#include "ads8320.h" + +ads8320::ads8320(PinName mosi, PinName miso, PinName sclk, PinName cs) + : m_spi(mosi, miso, sclk) + , m_cs(cs) { + m_cs=1; + m_spi.frequency(1000000); // the fastest of the sensor + m_spi.format(8, 0); // duda son dos palabras de 8 bits? + // wait(0.5); + //------------------------------------------------ + // pc.printf("RESET\r\n"); + write_register(0x06,0x01); + // wait(0.5); + + // pc.printf("Initialize High Resolution Constant Reading Mode\r\n"); + write_register(0x03,0x0A); + //wait(0.5); +} + + + unsigned int ads8320::readTemperature() { //was float + unsigned int temp_in = read_register16(TEMP); + // temp_in /= 20; + unsigned int Ti = temp_in; + return Ti; //return temp_in; +} + +void ads8320::write_register(char register_name, char register_value) { + register_name <<= 2; + register_name |= 0x02; //write command + m_cs=0; //Select SPI device + m_spi.write(register_name); //Send register location + m_spi.write(register_value); //Send value to record into register + m_cs=1; +} + +unsigned int ads8320::read_register16(char register_name) { + register_name <<= 2; + register_name &= 0xFC; //Read command + m_cs=0; //Select SPI Device + m_spi.write(register_name); //Write byte to device + unsigned int in_byte1 = m_spi.write(0x00); //(was zonder unsigned) + unsigned int in_byte2 = m_spi.write(0x00); + m_cs=1; + //float in_word= (in_byte1<<=8) | (in_byte2); + unsigned int in_word= (in_byte1<<=8) | (in_byte2); + return(in_word); +} \ No newline at end of file
diff -r 000000000000 -r 918a2b064be6 ads8320/ads8320.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ads8320/ads8320.h Fri Feb 18 13:46:46 2011 +0000 @@ -0,0 +1,41 @@ + + +#ifndef _ads8320_H +#define _ads8320_H + +#include "mbed.h" + +class ads8320 { + public: + /** + * Constructor. + * + * @param mosi SPI MOSI pin + * @param miso SPI MISO pin + * @param sclk SPI SCLK pin + * @param cs Chip select pin + */ + ads8320(PinName mosi, PinName miso, PinName sclk, PinName cs); + + ~ads8320() { /* empty */ }; + + + unsigned long readPressure(); + + + + unsigned int readTemperature(); //was float + + private: + + static const char TEMP = 0x21; //16 bit temp + SPI m_spi; + DigitalOut m_cs; + + // char read_register(char register_name); + void write_register(char register_name, char register_value); + // float read_register16(char register_name); + unsigned int read_register16(char register_name); +}; + +#endif // _ \ No newline at end of file
diff -r 000000000000 -r 918a2b064be6 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 18 13:46:46 2011 +0000 @@ -0,0 +1,68 @@ +#include "mbed.h" +#include "ads8320.h" + + +# define SAMPLENRS 7000 +# define SAMPLES_SEC 161364 +# define SAMPLERATE 9600 + +Serial pc(USBTX, USBRX); +ads8320 adsx8320(p5,p6,p7,p8); +Serial lcd (p28, p27); +InterruptIn Potmeter(p23); +DigitalOut led(LED1); + +void clear(void); +void Measure(void); +unsigned int samples[SAMPLENRS]; +unsigned int average; +unsigned int sum; +Timer t; + +int main() { + Potmeter.rise(&Measure); //if P5 high, then measure + while (1) { + led = !led; + wait(0.25); + pc.printf("say something"); + } +} + + + +void Measure() { +__disable_irq(); + unsigned int pause = (SAMPLES_SEC/SAMPLERATE) / SAMPLES_SEC; + int c=0; + clear(); + lcd.baud(9600); + while (1) { + + t.reset(); + t.start(); + /* for (int i=0; i < SAMPLENRS; i++) { + samples[i] = adsx8320.readTemperature(); + sum+= samples[i]; + wait(0.0001041); //divider 0.0001355 + }*/ + pc.printf("waarde is: %u \n\r",adsx8320.readTemperature()); + t.stop(); + clear(); + average = sum/SAMPLENRS; + //lcd.printf("gem is %u\n\r", average); + //lcd.printf("t: %f \n\r", t.read()); + sum =0; + wait(1); + clear(); + average=0; +__enable_irq(); + + } +} + +void clear(void) { + // lcd.putc(0xFE); + lcd.putc(0x01); + lcd.printf(" \n\r"); + lcd.printf(" \n\r"); +} \ No newline at end of file
diff -r 000000000000 -r 918a2b064be6 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Feb 18 13:46:46 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912