# HG changeset patch # User ethanzonca@CL-SEC241-08.cedarville.edu # Date 2012-11-01 14:53:54 # Node ID 02b6a488f4ee406517aee1c67cdf11b2a6e46114 # Parent f6804d996c0493b1381c45aabee25e13caed793f Work on AFSK, minor mods to slave diff --git a/master/master/lib/afsk.c b/master/master/lib/afsk.c --- a/master/master/lib/afsk.c +++ b/master/master/lib/afsk.c @@ -3,18 +3,6 @@ * * Created: 10/29/2012 7:40:34 PM * Author: ethanzonca - */ - -/* - * Master Firmware - * - * Wireless Observational Modular Aerial Network - * - * Ethan Zonca - * Matthew Kanning - * Kyle Ripperger - * Matthew Kroening - * */ #define F_CPU 11059200 @@ -55,7 +43,7 @@ PROGMEM extern const uint8_t afsk_sine_t 115, 116, 118, 119, 121, 122, 124, 125 }; -inline uint8_t afsk_read_sample(int phase) +static inline uint8_t afsk_read_sample(int phase) { return pgm_read_byte_near(afsk_sine_table + phase); } @@ -64,51 +52,6 @@ volatile uint16_t phase = 10; volatile uint16_t phasedelta = 3300; extern const uint16_t TABLE_SIZE = sizeof(afsk_sine_table); -void afsk_setup() { - - // Source timer2 from clkIO (datasheet p.164) - ASSR &= ~(_BV(EXCLK) | _BV(AS2)); - - // Set fast PWM mode with TOP = 0xff: WGM22:0 = 3 (p.150) - TCCR2A |= _BV(WGM21) | _BV(WGM20); - TCCR2B &= ~_BV(WGM22); - - // Do non-inverting PWM on pin OC2B (arduino pin 3) (p.159). - // OC2A (arduino pin 11) stays in normal port operation: - // COM2B1=1, COM2B0=0, COM2A1=0, COM2A0=0 - TCCR2A = (TCCR2A | _BV(COM2B1)) & ~(_BV(COM2B0) | _BV(COM2A1) | _BV(COM2A0)); - - // No prescaler (p.162) - TCCR2B = (TCCR2B & ~(_BV(CS22) | _BV(CS21))) | _BV(CS20); - - // Enable interrupt when TCNT2 reaches TOP (0xFF) (p.151, 163) - //TIMSK2 |= _BV(TOIE2); - TIMSK2 |= 0b00000001; - - // Initialize PORTA - DDRA = 0xff; - PORTA = 0x00; - - DDRD = 0xff; - PORTD = 0xff; - - // todo: init radio, maybe in main - - sei(); -} - - -void afsk_test() { - uint8_t flap[26] = {"abcdefghijklmnopqrstuvwxyz"}; - afsk_send(flap, sizeof(flap)*8); - afsk_start(); - while(afsk_busy()); - _delay_ms(500); -} - - - - // constants #define MODEM_CLOCK_RATE F_CPU #define PLAYBACK_RATE MODEM_CLOCK_RATE / 256 // Fast PWM @@ -136,41 +79,22 @@ volatile unsigned int afsk_packet_size = volatile const uint8_t *afsk_packet; -void afsk_send(const uint8_t *buffer, int len) -{ - afsk_packet_size = len; - afsk_packet = buffer; -} + + -int afsk_busy() -{ - return go; + +void afsk_ptt_off() { + // turn ptt off } -void afsk_start() -{ - phasedelta = PHASE_DELTA_1200; - phase = 0; - packet_pos = 0; - current_sample_in_baud = 0; - go = true; - - // Key the radio - afsk_ptt_on(); - - // Start transmission - afsk_timer_start(); +void afsk_ptt_on() { + // turn the ptt on... possibly delay based on spec } -afsk_ptt_off() { - -} -afsk_ptt_on() { - -} + ISR(TIMER2_OVF_vect) @@ -235,3 +159,78 @@ void afsk_timer_stop() // Disable playback interrupt TIMSK2 &= ~_BV(TOIE2); } + + + + + +// External + +void afsk_start() +{ + phasedelta = PHASE_DELTA_1200; + phase = 0; + packet_pos = 0; + current_sample_in_baud = 0; + go = true; + + // Key the radio + afsk_ptt_on(); + + // Start transmission + afsk_timer_start(); +} + +int afsk_busy() +{ + return go; +} + +void afsk_send(const uint8_t *buffer, int len) +{ + afsk_packet_size = len; + afsk_packet = buffer; +} + + +void afsk_setup() { + + // Source timer2 from clkIO (datasheet p.164) + ASSR &= ~(_BV(EXCLK) | _BV(AS2)); + + // Set fast PWM mode with TOP = 0xff: WGM22:0 = 3 (p.150) + TCCR2A |= _BV(WGM21) | _BV(WGM20); + TCCR2B &= ~_BV(WGM22); + + // Do non-inverting PWM on pin OC2B (arduino pin 3) (p.159). + // OC2A (arduino pin 11) stays in normal port operation: + // COM2B1=1, COM2B0=0, COM2A1=0, COM2A0=0 + TCCR2A = (TCCR2A | _BV(COM2B1)) & ~(_BV(COM2B0) | _BV(COM2A1) | _BV(COM2A0)); + + // No prescaler (p.162) + TCCR2B = (TCCR2B & ~(_BV(CS22) | _BV(CS21))) | _BV(CS20); + + // Enable interrupt when TCNT2 reaches TOP (0xFF) (p.151, 163) + //TIMSK2 |= _BV(TOIE2); + TIMSK2 |= 0b00000001; + + // Initialize PORTA + DDRA = 0xff; + PORTA = 0x00; + + DDRD = 0xff; + PORTD = 0xff; + + // todo: init radio, maybe in main + + sei(); +} + + +void afsk_test() { + uint8_t flap[26] = {"abcdefghijklmnopqrstuvwxyz"}; + afsk_send(flap, sizeof(flap)*8); + afsk_start(); + while(afsk_busy()); + _delay_ms(500); +} diff --git a/master/master/lib/afsk.h b/master/master/lib/afsk.h --- a/master/master/lib/afsk.h +++ b/master/master/lib/afsk.h @@ -11,7 +11,8 @@ void afsk_setup(); void afsk_test(); +void afsk_send(const uint8_t *buffer, int len); +int afsk_busy(); void afsk_start(); -void afsk_stop(); #endif /* AFSK_H_ */ \ No newline at end of file diff --git a/master/master/master.c b/master/master/master.c --- a/master/master/master.c +++ b/master/master/master.c @@ -1,9 +1,14 @@ -/* - * master.c - * - * Created: 10/25/2012 2:48:04 PM - * Author: mkanning - */ +/* + * Master Firmware + * + * Wireless Observational Modular Aerial Network + * + * Ethan Zonca + * Matthew Kanning + * Kyle Ripperger + * Matthew Kroening + * + */ #include "config.h" diff --git a/master/master/master.cproj b/master/master/master.cproj --- a/master/master/master.cproj +++ b/master/master/master.cproj @@ -120,6 +120,12 @@ compile + + compile + + + compile + compile diff --git a/slave2/slave/slave/slave.c b/slave2/slave/slave/slave.c --- a/slave2/slave/slave/slave.c +++ b/slave2/slave/slave/slave.c @@ -1,32 +1,37 @@ -/* - * slave.c - * - * Created: 10/25/2012 9:59:40 PM - * Author: mkanning +/* + * Slave Firmware + * + * Wireless Observational Modular Aerial Network + * + * Ethan Zonca + * Matthew Kanning + * Kyle Ripperger + * Matthew Kroening + * */ - #include "config.h" +#include "config.h" - #include - #include +#include +#include - #include "lib/serial.h" - +#include "lib/serial.h" +#include "lib/led.h" - void micro_Configure() { - // Generic microcontroller config options - } +void micro_setup() { + // Generic microcontroller config options +} - int main(void) - { - // Initialize - micro_Configure(); - led_Configure(); - serial_Configure(); // Config serial ports - - while(1) - { - serial_SendCommand('0','A',0,0); - } - } \ No newline at end of file +int main(void) +{ + // Initialize + micro_setup(); + led_setup(); + serial_setup(); // Config serial ports + + while(1) + { + //serial_SendCommand('0','A',0,0); + } +} \ No newline at end of file