Files @ e2403547a6c7
Branch filter:

Location: seniordesign-firmware/slave/slave/modules.c

ethanzonca@CL-ENS241-08.cedarville.edu
merge
/*
 * 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;
		  
		default:
			modules_generic();
			break;
	}
	  
 }
 
 
 void modules_generic_setup()
 {
	  
 }
  
 void modules_sensors_setup()
 {
	DESELECT_TEMP;
	setup_spi();
	sensors_setupPressure();
 }
  
 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_readLux();				//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
	cameras_readAccelXYZ();
  
 }