Files @ e2403547a6c7
Branch filter:

Location: seniordesign-firmware/master/master/lib/sensors.c

ethanzonca@CL-ENS241-08.cedarville.edu
merge
/*
 * sensors.c
 *
 * Created: 11/19/2012 9:25:01 PM
 *  Author: kripperger
 */ 


#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "../config.h"
#include <util/delay.h>
#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;
}