Files @ 735b62d9b05e
Branch filter:

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

kripperger@CL-SEC241-09.cedarville.edu
Camera work
/*
 * 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"
 #include "lib/loopTimer.h"
 
 uint32_t lastPicture;
 
 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
 }
  
  
  
 void modules_cameras_setup()
 {
	 DDRA |= (1 << DDA0);	// Set PA0 to Output for Camera
	 DDRA |= (1 << DDA1);	// Set PA1 to Output for Camera
	 DDRA |= (1 << DDA2);	// Set PA2 to Output for Camera
	 DDRA |= (1 << DDA3);	// Set PA3 to Output for Camera
 }
  

 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();
		
		if ((time_millis() - lastPicture) > CAMERA_FREQ)	// Frequency of photos
		{
			cameras_sendPulse();
			lastPicture = time_millis();
		}
			

 }