Files @ bb9115c5f82c
Branch filter:

Location: seniordesign-firmware/slave/slave/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 "spi.h"

int16_t	spiTemp;	// Thermocouple Temperature (from spi)
int8_t	boardTemp;	// Board Temperature (from i2c)


void sensors_readSpiTemp()
{
	// Select TEMP wait 100 microseconds then read four bytes
	SELECT_TEMP;
	_delay_us(100);
	uint8_t one = send_spi(0xFF);
	_delay_us(100);
	uint8_t two = send_spi(0xFF);
	_delay_us(100);
	uint8_t three = send_spi(0xFF);
	_delay_us(100);
	uint8_t four = send_spi(0xFF);
	DESELECT_TEMP;
	
	int16_t temperature = ((one<<4)|(two>>4));	// Shift and place into larger int. (Cuts off Decimal)
	temperature = (temperature & (0x0800)) ? (temperature & 0xF000) : temperature;	// Sign extend
	
	//int16_t temperature = ((one<<6)|(two>>2));	// Shift and place into larger int. (Includes Decimal)
	//temperature = (temperature & (0x2000)) ? (temperature & 0xC000) : temperature;	// Sign extend
	
	temperature = (two & 0x01) ? 0x00DE : temperature;	// Error Condition. If error is detected output is set to 222 degrees (0x00DE)
	
	// Note: Temperature still needs to be scaled in order to be accurate (eg. boil water). Do this before implementing.
	spiTemp = temperature;
}

void sensors_readBoardTemp()
{
	int8_t temperature = i2c_read(BOARDTEMP_ADDR, 0x00);	// Read only the first byte of data (we don't need the resolution here)
	
	boardTemp = temperature;
}

int16_t sensors_getSpiTemp(void)	// Gets spi temperature from variable
{
	return spiTemp;
}

int8_t sensors_getBoardTemp(void)	// Gets board temperature from variable
{
	return boardTemp;
}