Changeset - 0ce2a225ee75
[Not reviewed]
default
0 4 0
kripperger@CL-SEC241-09.cedarville.edu - 12 years ago 2013-01-30 21:24:44
kripperger@CL-SEC241-09.cedarville.edu
testing configs
4 files changed with 34 insertions and 32 deletions:
0 comments (0 inline, 0 general)
slave/slave/config.h
Show inline comments
 
/*
 
 * config.h
 
 *
 
 * Created: 10/25/2012 10:00:09 PM
 
 *  Author: mkanning
 
 */
 
 
 
 #ifndef CONFIG_H_
 
 #define CONFIG_H_
 
 
 #define F_CPU 11059200				// Clock frequency (used in calculations)
 
 
//Serial
 
#define USART0_BAUDRATE 115200
 
#define USART1_BAUDRATE 115200 
 
 
// Circular serial buffer size. Must be at least MAX_CMD_LEN + 5
 
#define BUFFER_SIZE 32
 
 
// Maximum payload size of command
 
#define MAX_PAYLOAD_LEN 16
 
 
// Number of datatypes to transmit per module type
 
#define DATATYPES_GENERIC 1
 
#define DATATYPES_SENSOR 6
 
#define DATATYPES_SENSOR 3 //Should be set to more
 
#define DATATYPES_GEIGER 2
 
#define DATATYPES_CAMERA 1
 
 
//Sensors and IO
 
#define SENSOR_LOOP 200				// Frequency of sensor reads (in ms)
 
#define HEATER_THRESHOLD 40			// Temperature threshold in Fahrenheit where heater is activated
 
 
 //I2C Addresses
 
 #define EEPROM_ADDR 0xA0		// Read 0xA1 - Write 0xA0
 
 #define BOARDTEMP_ADDR 0x90	// Read 0x91 - Write 0x90
 
 #define PRESSURE_ADDR 0xEF		// Read 0xEF - Write 0xEE
 
 #define HUMID_ADDR 0x27		// Read 0x27 - Write 0x26
 
 #define LIGHT_ADDR 0x95		// Read 0x95 - Write 0x94
 
 #define RTC_ADDR 0xB2			//DEBUG [Used for testing]      // Read 0xA3 - Write 0xA2
 
 
 
 
 #endif /* CONFIG_H_ */
 
\ No newline at end of file
slave/slave/lib/masterComm.c
Show inline comments
 
@@ -22,157 +22,157 @@ char buff2[64];
 
 
 
char masterComm_checksum(const char* stringPtr)
 
{
 
	char sum = 0;
 
	while(*stringPtr != 0x00)
 
	{
 
		sum += *stringPtr;
 
		stringPtr++;
 
	}
 
	return sum;
 
}
 
 
 
void masterComm_types()
 
{
 
	switch(io_getModuleId())
 
	{
 
		case 0:
 
			// Generic
 
			dataTypes = DATATYPES_GENERIC;
 
			break;
 
			
 
		case 1:
 
			// Sensors
 
			dataTypes = DATATYPES_SENSOR;
 
			break;
 
			
 
		case 2:
 
			// Geiger
 
			dataTypes = DATATYPES_GEIGER;
 
			break;
 
			
 
		case 3:
 
			// Camera
 
			dataTypes = DATATYPES_CAMERA;
 
			break;
 
			
 
		default:
 
			dataTypes = DATATYPES_GENERIC;
 
			break;
 
	}
 
}
 
 
 
void masterComm_modules()
 
{
 
	// Send BoardTemperature (Common for all modules)
 
	serial0_sendString("[");
 
	snprintf(buff2,64,"1%u",sensors_getBoardTemp());
 
	serial0_sendChar('[');
 
	snprintf(buff2,64,"0%u",sensors_getBoardTemp());
 
	serial0_sendString(buff2);
 
	serial0_sendString("]");	
 
	serial0_sendString(masterComm_checksum(buff2));	
 
	serial0_sendChar(']');	
 
	serial0_sendChar(masterComm_checksum(buff2));	
 
	
 
	// Send module specific sensor readings
 
	switch(io_getModuleId())
 
	{
 
		case 0:
 
			// Generic
 
			
 
			break;
 
		
 
		case 1:
 
			// Sensors
 
			
 
			// Send SPI Temperature (Air)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"2%u",sensors_getSpiTemp());
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
			
 
			// Send Ambient Light (Needs to be formatted)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"3%u",geiger_getCpm());		//FIX
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
			
 
/*			
 
			// Send CPM (radiation)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"7%u",geiger_getCpm());
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
		
 
			// Send CPM (radiation)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"7%u",geiger_getCpm());
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
		
 
			// Send CPM (radiation)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"7%u",geiger_getCpm());
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
*/
 
			
 
			break;
 
			
 
		case 2:
 
			// Geiger
 
			
 
			// Send CPM (radiation)
 
			serial0_sendString("[");
 
			serial0_sendChar('[');
 
			snprintf(buff2,64,"7%u",geiger_getCpm());
 
			serial0_sendString(buff2);
 
			serial0_sendString("]");
 
			serial0_sendString(masterComm_checksum(buff2));
 
			serial0_sendChar(']');
 
			serial0_sendChar(masterComm_checksum(buff2));
 
			
 
			break;
 
		
 
		case 3:
 
			// Camera
 
			
 
			break;
 
		
 
		default:
 
			
 
			break;
 
	}
 
}
 
 
 
void masterComm_send()
 
{
 
	masterComm_types();		// Calculates how many data types to send
 
	
 
	// Return resquest with number of data types to be sent
 
	serial0_sendString("[");						// Send opening bracket
 
	// Return request with number of data types to be sent
 
	serial0_sendChar('[');						// Send opening bracket
 
	snprintf(buff2,64,"@%u",dataTypes);				// Send package (@ reply and number of data types)
 
	serial0_sendString(buff2);
 
	serial0_sendString("]");						// Send closing bracket
 
	serial0_sendString(masterComm_checksum(buff2));	// Calculate and send checksum
 
	serial0_sendChar(']');						// Send closing bracket
 
	serial0_sendChar(masterComm_checksum(buff2));	// Calculate and send checksum
 
	
 
	masterComm_modules();	// Send sensor data
 
}
 
 
 
void masterComm_checkParser()
 
{
 
	if (serparser_parse() == PARSERESULT_PARSEOK)
 
	{
 
		if (getPayloadType() == ('@'-0x30))		// Request for data recieved
 
		{
 
			led_on(2);
 
			// Send all data
 
			masterComm_send();
 
			led_off(2);
 
			//led_off(2);
 
		}	
 
	}
 
}
 
 
slave/slave/modules.c
Show inline comments
 
/*
 
 * modules.c
 
 *
 
 * Created: 11/9/2012 11:44:22 AM
 
 *  Author: kripperger
 
 */ 
 
 
 #include <inttypes.h>
 
 #include <avr/io.h>
 
 #include <avr/interrupt.h>
 
 #include "config.h"
 
 #include <util/delay.h>
 
 #include "modules.h"
 
 #include "lib/spi.h"
 
 
 
 #include "lib/i2c.h"
 
 #include "lib/sensors.h"
 
 
 
 void modules_setup(uint8_t id)
 
 {
 
	switch(id)
 
	{
 
		case 0:
 
			modules_generic_setup();
 
			break;
 
			
 
		case 1:
 
			modules_sensors_setup();
 
			break;
 
			
 
		case 2:
 
			modules_geiger_setup();
 
			break;
 
			
 
		case 3:
 
			modules_cameras_setup();
 
			break;
 
			
 
		default:
 
			modules_generic_setup();
 
			break;
 
	}
 
	  
 
 }
 
 
 
 void modules_run(uint8_t id)
 
 {
 
	switch(id)
 
	{
 
		case 0:
 
			modules_generic();
 
			break;
 
		  
 
		case 1:
 
			modules_sensors();
 
			break;
 
		  
 
		case 2:
 
			modules_geiger();
 
			break;
 
		  
 
		case 3:
 
			modules_cameras();
 
			break;
 
		  
 
@@ -77,99 +78,99 @@
 
 void modules_sensors_setup()
 
 {
 
	 DESELECT_TEMP;
 
	 setup_spi();
 
	//setup_pressure();
 
 }
 
  
 
 void modules_geiger_setup()
 
 {
 
	// Pin setup
 
	DDRA &= ~(1 << DDA0);	// PA0 is an input
 
	
 
	
 
	 
 
	// Setup for interrupt input on PA0 (PCINT0)
 
	PCMSK0 |= (1 << PCINT0);	// Enable interrupt for PA0
 
	PCICR |= (1 << PCIE0);		// Enable ioc section PCIF0
 
	
 
	// Setup for interrupt from Timer2
 
	ASSR &= ~(1 << EXCLK);	// Disable external clock input (enabling crystal use)
 
	ASSR |= (1 << AS2);		// Enable timer2 async mode with an external crystal	
 
	_delay_ms(250);			// Let external 32KHz crystal stabilize
 
	TCCR2B = 0x05;			// Set the prescaler to 128: 32.768kHz / 128 = 1Hz overflow
 
	TIFR2 = 0x01;			// Reset timer2 overflow interrupt flag
 
	TIMSK2 = 0x01;			// Enable interrupt on overflow
 
	
 
	sei();					// Enable all interrupts
 
 }
 
  
 
  
 
  
 
 void modules_cameras_setup()
 
 {
 
	  	  
 
 }
 
  
 
 
 void modules_generic()
 
 {
 
	// Gathers data and performs functions for generic daughter board
 
	
 
 }
 
  
 
 void modules_sensors()
 
 {
 
	// Gathers data and performs functions for sensor daughter board
 
	sensors_readBoardTemp();		//Data Read
 
	sensors_readSpiTemp();			//Data Read
 
	sensors_readPressure();			//Data Read
 
	sensors_readHumid();			//Data Read
 
	sensors_readLight();			//Data Read
 
	//sensors_readPressure();			//Data Read
 
	//sensors_readHumid();			//Data Read
 
	//sensors_readLight();			//Data Read
 
	 
 
 }
 
  
 
 void modules_geiger()
 
 {
 
	// No data gatering function needed for geiger daughter board
 
		// This is taken care of in interrupt (See geiger.c)
 
	  
 
 }
 
  
 
 void modules_cameras()
 
 {
 
	// Gathers data and performs functions for cameras daughter board
 
  
 
 } 
 
  
 
  ///////////do I need to change .h file?
 
  void setup_pressure()
 
  {
 
	  int16_t ac1 = i2c_read(PRESSURE_ADDR, 0xAA);
 
	  ac1 = ac1 << 8;
 
	  ac1 = ac1 | i2c_read(PRESSURE_ADDR, 0xAB);
 
	  int16_t ac2 = i2c_read(PRESSURE_ADDR, 0xAC);
 
	  ac2 = ac2 << 8;
 
	  ac2 = ac2 | i2c_read(PRESSURE_ADDR, 0xAD);	  
 
	  int16_t ac3 = i2c_read(PRESSURE_ADDR, 0xAE);
 
	  ac3 = ac3 << 8;
 
	  ac3 = ac3 | i2c_read(PRESSURE_ADDR, 0xAF);
 
	  uint16_t ac4 = i2c_read(PRESSURE_ADDR, 0xB0);
 
	  ac4 = ac4 << 8;
 
	  ac4 = ac4 | i2c_read(PRESSURE_ADDR, 0xB1);
 
	  uint16_t ac5 = i2c_read(PRESSURE_ADDR, 0xB2);
 
	  ac5 = ac5 << 8;
 
	  ac5 = ac5 | i2c_read(PRESSURE_ADDR, 0xB3);
 
	  uint16_t ac6 = i2c_read(PRESSURE_ADDR, 0xB4);
 
	  ac6 = ac6 << 8;
 
	  ac6 = ac6 | i2c_read(PRESSURE_ADDR, 0xB5);
 
	  int16_t b1 = i2c_read(PRESSURE_ADDR, 0xB6);
 
	  b1 = b1 << 8;
 
	  b1 = b1 | i2c_read(PRESSURE_ADDR, 0xB7);
 
	  int16_t b2 = i2c_read(PRESSURE_ADDR, 0xB8);
 
	  b2 = b2 << 8;
 
	  b2 = b2 | i2c_read(PRESSURE_ADDR, 0xB9);
 
	  int16_t mb = i2c_read(PRESSURE_ADDR, 0xBA);
 
	  mb = mb << 8;
 
	  mb = mb | i2c_read(PRESSURE_ADDR, 0xBB);
 
	  int16_t mc = i2c_read(PRESSURE_ADDR, 0xBC);
 
	  mc = mc << 8;
slave/slave/slave.c
Show inline comments
 
@@ -44,82 +44,83 @@ void micro_setup()
 
 
 
int main(void)
 
{
 
	// Initialize		
 
	micro_setup();			// Generic microcontroller config options
 
	time_setup();			// Setup loop timer and interrupts (TIMER0)
 
	led_configure();		// Configure ports and registers for LED operation
 
	io_configure();			// Configure IO ports and registers
 
	i2c_init();				// Setup I2C
 
	serial0_setup();		// Config serial port
 
	
 
	io_readModuleId();
 
	modules_setup(io_getModuleId());				// Run setup functions for specific module
 
	
 
	
 
	//uint8_t test;		//Debug
 
	//uint8_t test2;	//Debug	
 
	
 
	
 
	// Serial output //DEBUG
 
	char buff[64];							//Buffer for serial output //DEBUG
 
	serial0_sendString("Starting Slave\r\n");
 
	
 
	
 
    while(1)
 
    {	
 
		
 
		// Master communication
 
		masterComm_checkParser();
 
			
 
				
 
		
 
		// Main slave operations
 
		if ((time_millis() % SENSOR_LOOP) == 0)	// Uses program timer to run every so often. Time interval defined in config.h
 
		{
 
			led_on(0);
 
			sensors_readBoardTemp();	// Read board temperature sensor (Common on all slaves) (Data Read)
 
			modules_run(io_getModuleId());		// Runs specific module functions (like data reading)
 
			
 
			io_regulateTemp();			// Gets board temperature and enables heater if below threshold
 

	
 
			//snprintf(buff,64,"|ModuleID: %u |BoardTemp: %i |Millis: %lu |Heater: %u\r\n",io_getModuleId(),sensors_getBoardTemp(),time_millis(),io_heaterStatus()); //DEBUG
 
			//serial0_sendString(buff); //DEBUG
 

	
 
			//led_toggle(0);		// Toggle LED0(Blue) to show loop running
 
			_delay_ms(2);		// Delay to prevent the sensor loop from running again before time_millis changes
 
			led_off(0);
 
			led_off(2);
 
		}
 
 
    }
 
	
 
	return 0;
 
}
 
 
 
 
 
 
		/********Examples of data reading and getting******************
 
		x = geiger_getCpm();				//Data get
 
		x = sensors_getSpiTemp();			//Data get
 
		x = sensors_getBoardTemp();			//Data get
 
		
 
		sensors_readSpiTemp();				//Data Read
 
		sensors_readBoardTemp();			//Data Read
 
		
 
		led_output(0xFF);					//Output value to LED array
 
		i2c_write(RTC_ADDR, 0x05, 0x3A);	//i2c Write Example
 
		
 
		PORTA &= ~(1 << PA1);	//OFF
 
		PORTA |= (1 << PA1);	//ON
 
		PORTB ^= (1 << PB0);	//Toggle
 
		
 
		sprintf(buff, "log: %u,%u,%u,%u\r\n", temp,temp2,temp3,temp4);
 
		serial0_sendString(buff);
 
		
 
		**************************************************************/
 
		
 
		
 
		
 
		
 
\ No newline at end of file
0 comments (0 inline, 0 general)