update afsk rx thresholds and timers
This commit is contained in:
parent
f0cf521f23
commit
d8fba41a6f
|
@ -1,6 +1,7 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "SimpleFIFO.h"
|
#include "SimpleFIFO.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
#include "dds.h"
|
||||||
#include <util/atomic.h>
|
#include <util/atomic.h>
|
||||||
|
|
||||||
#define PHASE_BIT 8
|
#define PHASE_BIT 8
|
||||||
|
@ -162,7 +163,6 @@ bool AFSK::HDLCDecode::hdlcParse(bool bit, SimpleFIFO<uint8_t,AFSK_RX_FIFO_LEN>
|
||||||
|
|
||||||
demod_bits <<= 1;
|
demod_bits <<= 1;
|
||||||
demod_bits |= bit ? 1 : 0;
|
demod_bits |= bit ? 1 : 0;
|
||||||
|
|
||||||
// Flag
|
// Flag
|
||||||
if(demod_bits == HDLC_FRAME) {
|
if(demod_bits == HDLC_FRAME) {
|
||||||
fifo->enqueue(HDLC_FRAME);
|
fifo->enqueue(HDLC_FRAME);
|
||||||
|
@ -279,6 +279,7 @@ bool AFSK::Decoder::read() {
|
||||||
while(rx_fifo.count()) {
|
while(rx_fifo.count()) {
|
||||||
// Grab the character
|
// Grab the character
|
||||||
char c = rx_fifo.dequeue();
|
char c = rx_fifo.dequeue();
|
||||||
|
//Serial.println(c);
|
||||||
bool escaped = false;
|
bool escaped = false;
|
||||||
if(c == HDLC_ESCAPE) { // We received an escaped byte, mark it
|
if(c == HDLC_ESCAPE) { // We received an escaped byte, mark it
|
||||||
escaped = true;
|
escaped = true;
|
||||||
|
@ -350,6 +351,7 @@ bool AFSK::Decoder::read() {
|
||||||
return retVal; // This is true if we parsed a packet in this flow
|
return retVal; // This is true if we parsed a packet in this flow
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define AFSK_ADC_INPUT 2
|
||||||
void AFSK::Decoder::start() {
|
void AFSK::Decoder::start() {
|
||||||
// Do this in start to allocate our first packet
|
// Do this in start to allocate our first packet
|
||||||
currentPacket = pBuf.makePacket(PACKET_MAX_LEN);
|
currentPacket = pBuf.makePacket(PACKET_MAX_LEN);
|
||||||
|
@ -365,17 +367,23 @@ void AFSK::Decoder::start() {
|
||||||
TCCR2B = (TCCR2B & ~(_BV(CS22) | _BV(CS21))) | _BV(CS20) | _BV(WGM22);
|
TCCR2B = (TCCR2B & ~(_BV(CS22) | _BV(CS21))) | _BV(CS20) | _BV(WGM22);
|
||||||
|
|
||||||
OCR2A = pow(2,COMPARE_BITS)-1;
|
OCR2A = pow(2,COMPARE_BITS)-1;
|
||||||
OCR2B = 0;
|
OCR2B = 0;*/
|
||||||
// Configure the ADC and Timer1 to trigger automatic interrupts
|
|
||||||
|
|
||||||
|
// This lets us use decoding functions that run at the same reference
|
||||||
|
// clock as the DDS.
|
||||||
|
// We use ICR1 as TOP and prescale by 8
|
||||||
|
// Note that this requires the DDS to be started as well
|
||||||
TCCR1A = 0;
|
TCCR1A = 0;
|
||||||
TCCR1B = _BV(CS11) | _BV(WGM13) | _BV(WGM12);
|
TCCR1B = _BV(CS11) | _BV(WGM13) | _BV(WGM12);
|
||||||
ICR1 = ((F_CPU / 8) / REFCLK) - 1;
|
ICR1 = ((F_CPU / 8) / 9600) - 1; //TODO: get the actual refclk from dds
|
||||||
ADMUX = _BV(REFS0) | _BV(ADLAR) | 0; // Channel 0, shift result left (ADCH used)
|
// NOTE: should divider be 1 or 8?
|
||||||
DDRC &= ~_BV(0);
|
ADMUX = _BV(REFS0) | _BV(ADLAR) | AFSK_ADC_INPUT; // Channel AFSK_ADC_INPUT, shift result left (ADCH used)
|
||||||
PORTC &= ~_BV(0);
|
DDRC &= ~_BV(AFSK_ADC_INPUT);
|
||||||
DIDR0 |= _BV(0);
|
PORTC &= ~_BV(AFSK_ADC_INPUT);
|
||||||
|
DIDR0 |= _BV(AFSK_ADC_INPUT); // disable input buffer for ADC pin
|
||||||
ADCSRB = _BV(ADTS2) | _BV(ADTS1) | _BV(ADTS0);
|
ADCSRB = _BV(ADTS2) | _BV(ADTS1) | _BV(ADTS0);
|
||||||
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2); // | _BV(ADPS0); */
|
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADATE) | _BV(ADIE) | _BV(ADPS2); // | _BV(ADPS0);
|
||||||
}
|
}
|
||||||
|
|
||||||
AFSK::PacketBuffer::PacketBuffer() {
|
AFSK::PacketBuffer::PacketBuffer() {
|
||||||
|
@ -727,7 +735,8 @@ void AFSK::timer() {
|
||||||
tcnt = 0;
|
tcnt = 0;
|
||||||
PORTD &= ~_BV(6);
|
PORTD &= ~_BV(6);
|
||||||
} else {
|
} else {
|
||||||
decoder.process(((int8_t)(ADCH - 128)));
|
//decoder.process(((int8_t)(ADCH - 128)));
|
||||||
|
decoder.process((int8_t)(ADCH - 83));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <SimpleFIFO.h>
|
#include <SimpleFIFO.h>
|
||||||
#include <DDS.h>
|
#include <DDS.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
#define SAMPLERATE 9600
|
#define SAMPLERATE 9600
|
||||||
#define BITRATE 1200
|
#define BITRATE 1200
|
||||||
|
@ -181,6 +182,7 @@ public:
|
||||||
nextByte = 0;
|
nextByte = 0;
|
||||||
}
|
}
|
||||||
void setDDS(DDS *d) { dds = d; }
|
void setDDS(DDS *d) { dds = d; }
|
||||||
|
//int16 getReferenceClock() { return dds.getReferenceClock(); }
|
||||||
volatile inline bool isSending() volatile {
|
volatile inline bool isSending() volatile {
|
||||||
return sending;
|
return sending;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue