Files
@ 735b62d9b05e
Branch filter:
Location: seniordesign-firmware/slave/slave/modules.c
735b62d9b05e
3.0 KiB
text/plain
Camera work
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | /*
* 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();
}
}
|