diff --git a/master/master/lib/sensors.c b/master/master/lib/sensors.c new file mode 100644 --- /dev/null +++ b/master/master/lib/sensors.c @@ -0,0 +1,56 @@ +/* + * sensors.c + * + * Created: 11/19/2012 9:25:01 PM + * Author: kripperger + */ + + +#include +#include +#include +#include "../config.h" +#include +#include "sensors.h" +#include "i2c.h" + +void sensors_setup() +{ + //ADC register configurations for battery level detection on PA0 + ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set prescaler for ADC, 128 gives ADC freq of 125 KHz + ADMUX |= (1 << REFS0); // Set ADC reference voltage to AVCC + //ADMUX |= 0; // Select ADC0 as the conversion channel (default) + ADCSRA |= (1 << ADATE); // Enables auto trigger, determined in ADCSRB bits ADTS + ADCSRB &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));// Set ADC auto trigger source to free running mode + ADCSRA |= (1 << ADEN); // Enable ADC + ADCSRA |= (1 << ADSC); // Start ADC measurements. ADC should now continuously run conversions, which are stored in ADCH 0x79 +} + +int8_t boardTemp = 255; // Board Temperature (from i2c) + +void sensors_readBoardTemp() +{ + boardTemp = i2c_read(BOARDTEMP_ADDR, 0x00); // Read only the first byte of data (we don't need the resolution here) + boardTemp = ((boardTemp*18)/10) + (32); // Converting Celsius to Fahrenheit + boardTemp = boardTemp - 3; // Linear offset +} + +int8_t sensors_getBoardTemp(void) +{ + return boardTemp; +} + +uint16_t batt; // Battery voltage (from ADC) + +void sensors_readBatt() +{ + uint8_t battL = ADCL; // Read low battery byte from ADC (all 8 bits) + batt = ADCH; // Read high battery byte from ADC (only two LSBs) + batt = batt << 8; + batt |= battL; +} + +uint16_t sensors_getBatt(void) // Gets battery voltage from variable +{ + return batt; +} \ No newline at end of file diff --git a/master/master/lib/sensors.h b/master/master/lib/sensors.h new file mode 100644 --- /dev/null +++ b/master/master/lib/sensors.h @@ -0,0 +1,20 @@ +/* + * sensors.h + * + * Created: 11/19/2012 9:24:50 PM + * Author: kripperger + */ + + +#ifndef BOARDTEMP_H_ +#define BOARDTEMP_H_ + +void sensors_setup(); + +void sensors_readBoardTemp(void); // Reads board temperature +int8_t sensors_getBoardTemp(void); // Gets board temperature from variable + +void sensors_readBatt(void); +uint16_t sensors_getBatt(void); + +#endif /* BOARDTEMP_H_ */ \ No newline at end of file