diff --git a/Makefile b/Makefile index 6c016ec..e93c4ce 100755 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ FORMAT = ihex # List C source files here. (C dependencies are automatically generated.) #SRC = $(TARGET).c -SRC = main.c hardware/Serial.c hardware/AFSK.c util/CRC-CCIT.c protocol/AX25.c protocol/KISS.c +SRC = main.c hardware/Serial.c hardware/AFSK.c hardware/VREF.c util/CRC-CCIT.c protocol/AX25.c protocol/KISS.c # If there is more than one source file, append them above, or modify and # uncomment the following: diff --git a/device.h b/device.h index bd5d29b..6fc655b 100755 --- a/device.h +++ b/device.h @@ -8,9 +8,13 @@ #define F_CPU 20000000UL #define FREQUENCY_CORRECTION 0 -// ADC settings +// Voltage references +// TODO: Determine best defaults +#define CONFIG_ADC_REF 128 +#define CONFIG_DAC_REF 255 + +// Demodulator settings #define OPEN_SQUELCH true -#define ADC_REFERENCE REF_3V3 // Serial settings #define BAUD 115200 diff --git a/hardware/AFSK.c b/hardware/AFSK.c index a45afb3..833a165 100755 --- a/hardware/AFSK.c +++ b/hardware/AFSK.c @@ -22,7 +22,6 @@ int afsk_putchar(char c, FILE *stream); // ADC and clock setup void AFSK_hw_init(void) { - // Set Timer1 to normal operation TCCR1A = 0; diff --git a/hardware/AFSK.h b/hardware/AFSK.h index d865094..800cf20 100755 --- a/hardware/AFSK.h +++ b/hardware/AFSK.h @@ -46,7 +46,7 @@ inline static uint8_t sinSample(uint16_t i) { #define CONFIG_AFSK_TRAILER_LEN 25UL #define BIT_STUFF_LEN 5 -#define BITRATE 2400 +#define BITRATE 1200 #if BITRATE == 1200 #define CONFIG_SAMPLERATE 9600UL diff --git a/hardware/VREF.c b/hardware/VREF.c new file mode 100644 index 0000000..3834ded --- /dev/null +++ b/hardware/VREF.c @@ -0,0 +1,30 @@ +#include "VREF.h" + +uint8_t adcReference = CONFIG_ADC_REF; +uint8_t dacReference = CONFIG_DAC_REF; + +void VREF_init(void) { + //DDRD |= _BV(7); + DDRD = 0xFF; + + TCCR2A = _BV(WGM20) | + _BV(WGM21) | + _BV(COM2A1)| + _BV(COM2B1); + + TCCR2B = _BV(CS20); + + OCR2A = adcReference; + OCR2B = dacReference; +} + + +void vref_setADC(uint8_t value) { + adcReference = value; + OCR2A = adcReference; +} + +void vref_setDAC(uint8_t value) { + dacReference = value; + OCR2B = dacReference; +} \ No newline at end of file diff --git a/hardware/VREF.h b/hardware/VREF.h new file mode 100644 index 0000000..18ae690 --- /dev/null +++ b/hardware/VREF.h @@ -0,0 +1,11 @@ +#ifndef VREF_H +#define VREF_H + +#include +#include "device.h" + +void VREF_init(void); +void vref_setADC(uint8_t value); +void vref_setDAC(uint8_t value); + +#endif \ No newline at end of file diff --git a/main.c b/main.c index 526e76d..e2731c1 100755 --- a/main.c +++ b/main.c @@ -2,6 +2,7 @@ #include #include "device.h" +#include "hardware/VREF.h" #include "hardware/AFSK.h" #include "hardware/Serial.h" #include "protocol/AX25.h" @@ -25,6 +26,7 @@ void init(void) { stdout = &serial.uart0; stdin = &serial.uart0; + VREF_init(); AFSK_init(&modem); ax25_init(&AX25, &modem, &modem.fd, ax25_callback);