Changeset - 89ad841d14f4
[Not reviewed]
default
0 4 0
kripperger@CL-SEC241-09.cedarville.edu - 12 years ago 2013-01-30 18:32:38
kripperger@CL-SEC241-09.cedarville.edu
Testing Serial Inter-module slave side
4 files changed with 14 insertions and 11 deletions:
0 comments (0 inline, 0 general)
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"
 
#include "sensors.h"
 
#include "geiger.h"
 
#include "led.h"
 
 
uint8_t dataTypes;
 
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;
 
@@ -134,43 +137,42 @@ void masterComm_modules()
 
		
 
		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
 
	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
 
	
 
	masterComm_modules();	// Send sensor data
 
	
 
	
 
	serial0_sendString("got request\r\n");		//DEBUG
 
	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);
 
		}	
 
	}
 
}
 
 
slave/slave/lib/serparser.c
Show inline comments
 
@@ -69,49 +69,49 @@ static void setParserState(uint8_t state
 
		payloadLength = 0;
 
		checksumCalc = 0;
 
	}
 
	
 
	// Every time we change state, we have parsed a byte
 
	bufferParsePosition = (bufferParsePosition + 1) % BUFFER_SIZE;
 
}
 
 
// Receive data on USART
 
 
char debugBuff[16];
 
 
 
ISR(USART0_RX_vect)
 
{
 
	buffer[bufferDataPosition % BUFFER_SIZE] = UDR0;
 
	bufferDataPosition = (bufferDataPosition + 1) % BUFFER_SIZE;
 
	//sprintf(debugBuff, "bdp: %d, bpp: %d \r\n", bufferDataPosition, bufferParsePosition);
 
	//serial0_sendString((debugBuff)); 
 
}
 
 
 
 
 
#define DEBUG
 
//#define DEBUG
 
 
// Parse data from circular buffer
 
int serparser_parse(void)
 
{
 
	
 
	char byte;
 
 
	// Process first command (if any) on the circular buffer
 
	while(bufferDataPosition != bufferParsePosition)
 
	{
 
		byte = buffer[bufferParsePosition];
 
		
 
		// Reset 
 
		if(parserState == STATE_RESET)
 
		{
 
			if(byte == '[') // Start of frame; keep parsing
 
			{
 
				#ifdef DEBUG
 
				serial0_sendString("start\r\n");
 
				#endif
 
				setParserState(STATE_GETDATATYPE);
 
			}
 
			else // Not start of frame, reset
 
			{
slave/slave/slave.c
Show inline comments
 
@@ -49,66 +49,67 @@ int main(void)
 
	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_check();
 
		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(1);		// Delay to prevent the sensor loop from running again before time_millis changes
 
			//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);
 
		}
 
 
    }
 
	
 
	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
slave/slave/slave.cproj
Show inline comments
 
<?xml version="1.0" encoding="utf-8"?>
 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
  <PropertyGroup>
 
    <SchemaVersion>2.0</SchemaVersion>
 
    <ProjectVersion>6.0</ProjectVersion>
 
    <ToolchainName>com.Atmel.AVRGCC8</ToolchainName>
 
    <ProjectGuid>{40d97b6e-7ff4-48e7-9a9e-5e50ba18526b}</ProjectGuid>
 
    <avrdevice>ATmega644PA</avrdevice>
 
    <avrdeviceseries>none</avrdeviceseries>
 
    <OutputType>Executable</OutputType>
 
    <Language>C</Language>
 
    <OutputFileName>$(MSBuildProjectName)</OutputFileName>
 
    <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>2.11.1</AsfVersion>
 
    <avrtoolinterface>ISP</avrtoolinterface>
 
    <avrtool>com.atmel.avrdbg.tool.ispmk2</avrtool>
 
    <avrtool>com.atmel.avrdbg.tool.avrdragon</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>
 
        <ssl>False</ssl>
 
      </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>
 
@@ -56,49 +56,49 @@
 
        <InterfaceProperties>
 
          <JtagDbgClock>249000</JtagDbgClock>
 
          <JtagProgClock>1000000</JtagProgClock>
 
          <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>
 
      <ToolName>AVR Dragon</ToolName>
 
      <ToolNumber>00A200035378</ToolNumber>
 
      <KeepTimersRunning>true</KeepTimersRunning>
 
      <OverrideVtor>false</OverrideVtor>
 
      <OverrideVtorValue>
 
      </OverrideVtorValue>
 
      <Channel>
 
        <host>127.0.0.1</host>
 
        <port>64369</port>
 
        <port>60480</port>
 
        <ssl>False</ssl>
 
      </Channel>
 
      <ToolOptions>
 
        <InterfaceName>ISP</InterfaceName>
 
        <InterfaceProperties>
 
          <JtagDbgClock>0</JtagDbgClock>
 
          <JtagProgClock>1000000</JtagProgClock>
 
          <IspClock>2000000</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_avrdragon>
 
  </PropertyGroup>
 
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
 
    <ToolchainSettings>
 
      <AvrGcc>
 
        <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
 
        <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
 
        <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
0 comments (0 inline, 0 general)