Changeset - 2d1f159689de
[Not reviewed]
default
0 7 0
kripperger@CL-SEC241-09.cedarville.edu - 12 years ago 2013-01-23 21:48:11
kripperger@CL-SEC241-09.cedarville.edu
Work on the Slave to master communications
7 files changed with 87 insertions and 34 deletions:
0 comments (0 inline, 0 general)
slave/slave/config.h
Show inline comments
 
@@ -12,24 +12,29 @@
 
 #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_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 0xB1		//THIS VALUE IS WRONG
 
 #define HUMID_ADDR 0xB4		//THIS VALUE IS WRONG
 
 #define RTC_ADDR 0xB2			//DEBUG [Used for testing]      // Read 0xA3 - Write 0xA2
 
slave/slave/lib/inputOutput.c
Show inline comments
 
@@ -2,62 +2,75 @@
 
 * io.c
 
 *
 
 * Created: 11/7/2012 7:17:52 PM
 
 *  Author: kripperger
 
 */ 
 
 
#include <avr/io.h>
 
#include "../config.h"
 
#include "inputOutput.h"
 
#include "led.h"
 
#include "sensors.h"
 
 
int8_t	moduleID;	// Slave Module ID from rotary dip switch (or EEPROM)
 
 
 void io_configure()
 
 {
 
	// Configure ports/pins
 
	DDRB |= (1 << DDB4);		// Set PB4 to Output for Heater (also allows SCK to operate)
 
	
 
	DDRC &= ~(1 << DDC2);		// Set PC2 to input for rotary dip    //TEMPORARY//
 
	DDRC &= ~(1 << DDC3);		// Set PC3 to input for rotary dip    //TEMPORARY//
 
	DDRC &= ~(1 << DDC4);		// Set PC4 to input for rotary dip    //TEMPORARY//
 
	DDRC &= ~(1 << DDC5);		// Set PC5 to input for rotary dip    //TEMPORARY//
 
 }
 
 
 
 
 
 uint8_t io_getModuleId()
 
 
   
 
 
 
 
 
 void io_readModuleId()
 
 {
 
	// Get ID from rotary dip and return it. 
 
	uint8_t id;
 
	id = 0;
 
	
 
	
 
	
 
	moduleID = 0;
 
	
 
	// This method is temporary as the next release will read the module ID from EEPROM
 
	PORTC |= (1 << PC2);	// Pull pins on rotary dip high
 
	PORTC |= (1 << PC3);	// Pull pins on rotary dip high
 
	PORTC |= (1 << PC4);	// Pull pins on rotary dip high
 
	PORTC |= (1 << PC5);	// Pull pins on rotary dip high
 
	
 
	id = ((PINC & 0b00011100) >> 2);	// Read Dip Encoder
 
	id = ~id;							//Invert Dip reading
 
	id = (id & 0b0111);					//Mask bits
 
	moduleID = ((PINC & 0b00011100) >> 2);		// Read Dip Encoder
 
	moduleID = ~moduleID;						//Invert Dip reading
 
	moduleID = (moduleID & 0b0111);				//Mask bits
 
 
 
	//id = i2c_read(EEPROM_ADDR, 0x04);
 
/*
 
	while(moduleID==0)
 
	{
 
		moduleID = i2c_read(EEPROM_ADDR, 0x04);
 
	}
 
*/
 
 
 
	return id;
 
 }
 
 
 
 
 
 uint8_t io_getModuleId()
 
 {
 
	return moduleID;
 
 }
 
 
 
 
 
 void io_heaterOn()
 
 {		
 
	PORTB |= (1 << PB4);	//ON
 
 }
 
 
 
 void io_heaterOff()
 
 {
 
	PORTB &= ~(1 << PB4);	//OFF
 
 }
 
 
 
 uint8_t io_heaterStatus()
 
 {
slave/slave/lib/inputOutput.h
Show inline comments
 
/*
 
 * io.h
 
 *
 
 * Created: 11/7/2012 7:18:08 PM
 
 *  Author: kripperger
 
 */ 
 
 
 
#ifndef IO_H_
 
#define IO_H_
 
 
 
void io_configure();
 
uint8_t io_getModuleId();	// Get ID from rotary dip and return it.
 
 
 
 
void io_readModuleId();	// Reads ID from rotary dip (or EEPROM).
 
uint8_t io_getModuleId();	// Gets ID and returns it.
 
 
void io_heaterOn();
 
void io_heaterOff();
 
uint8_t io_heaterStatus();
 
 
void io_regulateTemp();		// Gets board temperature and enables heater if below threshold
 
 
#endif /* IO_H_ */
 
\ No newline at end of file
slave/slave/lib/masterComm.c
Show inline comments
 
/*
 
 * masterComm.c
 
 *
 
 * Created: 1/22/2013 3:40:53 PM
 
 *  Author: kripperger
 
 */ 
 
 
 
#include <avr/io.h>
 
#include <stdio.h>
 
#include "../config.h"
 
#include "masterComm.h"
 
#include "serial.h"
 
#include "serparser.h"
 
#include "inputOutput.h"
 
 
char buff2[64];
 
 
void masterComm_send()
 
{
 
	//Send stuff
 
	serial0_sendString("[@");
 
	switch(io_getModuleId())
 
	{
 
		case 0:
 
			// Generic
 
			snprintf(buff2,64,"%u",DATATYPES_GENERIC);
 
			break;
 
			
 
		case 1:
 
			// Sensors
 
			snprintf(buff2,64,"%u",DATATYPES_SENSOR);
 
			break;
 
			
 
		case 2:
 
			// Geiger
 
			snprintf(buff2,64,"%u",DATATYPES_GEIGER);
 
			break;
 
			
 
		case 3:
 
			// Camera
 
			snprintf(buff2,64,"%u",DATATYPES_CAMERA);
 
			break;
 
			
 
		default:
 
			snprintf(buff2,64,"%u",DATATYPES_GENERIC);
 
			break;
 
	}
 
	
 
	serial0_sendString(buff2);
 

	
 

	
 
	
 
	serial0_sendString("got data\r\n");
 
}
 
 
 
void masterComm_check()
 
{
 
	if (serparser_parse() == PARSERESULT_PARSEOK)
 
	{
 
		if (getPayloadType() == ('@'-0x30))		// Request for data recieved
 
		{
 
			// Send all data
 
			masterComm_send();
slave/slave/lib/masterComm.h
Show inline comments
 
/*
 
 * masterComm.h
 
 *
 
 * Created: 1/22/2013 3:40:43 PM
 
 *  Author: kripperger
 
 */ 
 
 
 
#ifndef MASTERCOMM_H_
 
#define MASTERCOMM_H_
 
 
 
 
void masterComm_check();
 
void masterComm_send();
 
void masterComm_check();	// Runs parser and checks for data request
 
void masterComm_send();		// Sends data after being requested
 
 
 
 
 
#endif /* MASTERCOMM_H_ */
 
\ No newline at end of file
slave/slave/slave.c
Show inline comments
 
@@ -44,57 +44,56 @@ 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
 
	
 
	uint8_t moduleID = io_getModuleId();	// Slave Module ID from rotary dip switch
 
	modules_setup(moduleID);				// Run setup functions for specific module
 
	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\r\n");
 
	serial0_sendString("Starting Slave\r\n");
 
	
 
	
 
    while(1)
 
    {	
 
		
 
		// Master communication
 
		//masterComm_check();
 
 
		//masterComm_check();
 
			
 
				
 
		
 
		// Main slave operations
 
		if ((time_millis() % SENSOR_LOOP) == 0)	// Uses program timer to run every so often. Time interval defined in config.h
 
		{
 
			led_toggle(2);
 
//			sensors_readBoardTemp();	// Read board temperature sensor (Common on all slaves) (Data Read)
 
//			modules_run(moduleID);		// Runs specific module functions (like data reading)
 

	
 
			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
 
			led_toggle(1);
 
//			snprintf(buff,64,"|ModuleID: %u |BoardTemp: %i |Millis: %lu |Heater: %u\r\n",moduleID,sensors_getBoardTemp(),time_millis(),io_heaterStatus()); //DEBUG
 
//			snprintf(buff,64,"lol%i\r\n",sensors_getBoardTemp());
 
//			serial0_sendString(buff); //DEBUG
 
			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(1);		// Delay to prevent the sensor loop from running again before time_millis changes
 
		}
 
 
    }
 
	
 
	return 0;
 
}
 
 
 
 
@@ -104,21 +103,22 @@ int main(void)
 
		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
slave/slave/slave.cproj
Show inline comments
 
@@ -13,25 +13,25 @@
 
    <OutputFileExtension>.elf</OutputFileExtension>
 
    <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
 
    <AssemblyName>slave</AssemblyName>
 
    <Name>slave</Name>
 
    <RootNamespace>slave</RootNamespace>
 
    <ToolchainFlavour>Native</ToolchainFlavour>
 
    <KeepTimersRunning>true</KeepTimersRunning>
 
    <OverrideVtor>false</OverrideVtor>
 
    <OverrideVtorValue />
 
    <eraseonlaunchrule>0</eraseonlaunchrule>
 
    <AsfVersion>3.1.3</AsfVersion>
 
    <avrtoolinterface>ISP</avrtoolinterface>
 
    <avrtool>com.atmel.avrdbg.tool.avrdragon</avrtool>
 
    <avrtool>com.atmel.avrdbg.tool.ispmk2</avrtool>
 
    <com_atmel_avrdbg_tool_simulator>
 
      <ToolType xmlns="">com.atmel.avrdbg.tool.simulator</ToolType>
 
      <ToolName xmlns="">AVR Simulator</ToolName>
 
      <ToolNumber xmlns="">
 
      </ToolNumber>
 
      <KeepTimersRunning xmlns="">true</KeepTimersRunning>
 
      <OverrideVtor xmlns="">false</OverrideVtor>
 
      <OverrideVtorValue xmlns="">
 
      </OverrideVtorValue>
 
      <Channel xmlns="">
 
        <host>127.0.0.1</host>
 
        <port>55286</port>
 
@@ -39,33 +39,33 @@
 
      </Channel>
 
    </com_atmel_avrdbg_tool_simulator>
 
    <com_atmel_avrdbg_tool_ispmk2>
 
      <ToolType>com.atmel.avrdbg.tool.ispmk2</ToolType>
 
      <ToolName>AVRISP mkII</ToolName>
 
      <ToolNumber>000200131077</ToolNumber>
 
      <KeepTimersRunning>true</KeepTimersRunning>
 
      <OverrideVtor>false</OverrideVtor>
 
      <OverrideVtorValue>
 
      </OverrideVtorValue>
 
      <Channel>
 
        <host>127.0.0.1</host>
 
        <port>52709</port>
 
        <port>52533</port>
 
        <ssl>False</ssl>
 
      </Channel>
 
      <ToolOptions>
 
        <InterfaceName>ISP</InterfaceName>
 
        <InterfaceProperties>
 
          <JtagDbgClock>249000</JtagDbgClock>
 
          <JtagProgClock>1000000</JtagProgClock>
 
          <IspClock>250000</IspClock>
 
          <IspClock>1970000</IspClock>
 
          <JtagInChain>false</JtagInChain>
 
          <JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
 
          <JtagDevicesBefore>0</JtagDevicesBefore>
 
          <JtagDevicesAfter>0</JtagDevicesAfter>
 
          <JtagInstrBitsBefore>0</JtagInstrBitsBefore>
 
          <JtagInstrBitsAfter>0</JtagInstrBitsAfter>
 
        </InterfaceProperties>
 
      </ToolOptions>
 
    </com_atmel_avrdbg_tool_ispmk2>
 
    <preserveEEPROM>True</preserveEEPROM>
 
    <com_atmel_avrdbg_tool_avrdragon>
 
      <ToolType>com.atmel.avrdbg.tool.avrdragon</ToolType>
0 comments (0 inline, 0 general)