summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Tittelbach <xro@realraum.at>2012-06-22 22:47:54 +0000
committerBernhard Tittelbach <xro@realraum.at>2012-06-22 22:47:54 +0000
commit250a52f9c62d7746ca358593f66d6db449feaa74 (patch)
tree6b0bf42ae4523c582bd3ab2da4a61c31ee6691e6
parentoutput pi filter for LDO for dongle (diff)
play with GFSK Deviation, test RX TX
git-svn-id: https://svn.spreadspace.org/mur.sat@553 7de4ea59-55d0-425e-a1af-a3118ea81d4c
-rw-r--r--software/hhd70dongle/c1101lib.c8
-rw-r--r--software/hhd70dongle/c1101lib.h1
-rw-r--r--software/hhd70dongle/hhd70dongle.c197
-rwxr-xr-xsoftware/hhd70dongle/reset.sh4
4 files changed, 137 insertions, 73 deletions
diff --git a/software/hhd70dongle/c1101lib.c b/software/hhd70dongle/c1101lib.c
index 690d148..b7ea1c7 100644
--- a/software/hhd70dongle/c1101lib.c
+++ b/software/hhd70dongle/c1101lib.c
@@ -213,6 +213,12 @@ int c1101_spi_write_txfifo(char *buffer, int len)
/**** External Functions ****/
+uint16_t c1101_setFSKDeviationFromCarrier(int8_t m, int8_t e)
+{
+ c1101_spi_write_register(SPIC1101_ADDR_DEVIATN, (m & 0x7) | ((e & 0x7) << 4));
+ return (1983u * (8u+((uint32_t)m)) * (1u << ((uint32_t)e))) / 100; //return +- deviation in 10Hz Steps
+}
+
void c1101_init(void)
{
//reset C1101
@@ -251,7 +257,7 @@ void c1101_init(void)
c1101_spi_write_register(SPIC1101_ADDR_SYNC1, 0x21);
c1101_spi_write_register(SPIC1101_ADDR_SYNC0, 0x42);
// DEVIATN Modem Deviation Setting
- c1101_spi_write_register(SPIC1101_ADDR_DEVIATN, 0x07);
+ c1101_spi_write_register(SPIC1101_ADDR_DEVIATN, 0x11); //0x11 equals deviation of 3.5kHz; 0x27 equals deviation of 11.9kHz
// MCSM0 Main Radio Control State Machine Configuration
c1101_spi_write_register(SPIC1101_ADDR_MCSM0, 0x18);
c1101_spi_write_register(SPIC1101_ADDR_MCSM1, 0b00111100); // State RX after recieving packet-> stay in RX; State TX after sending packet -> IDLE
diff --git a/software/hhd70dongle/c1101lib.h b/software/hhd70dongle/c1101lib.h
index 4dad8a6..fc09e71 100644
--- a/software/hhd70dongle/c1101lib.h
+++ b/software/hhd70dongle/c1101lib.h
@@ -140,6 +140,7 @@ int16_t c1101_spi_read_register(char address);
int16_t c1101_spi_write_register(char address, char byte);
int16_t c1101_spi_strobe_command(char address);
+uint16_t c1101_setFSKDeviationFromCarrier(int8_t m, int8_t e);
void c1101_init(void);
void c1101_handleStatusByte(char sb);
char c1101_getStatus(void);
diff --git a/software/hhd70dongle/hhd70dongle.c b/software/hhd70dongle/hhd70dongle.c
index 7e5b0ed..b6e8eeb 100644
--- a/software/hhd70dongle/hhd70dongle.c
+++ b/software/hhd70dongle/hhd70dongle.c
@@ -32,7 +32,7 @@
#include <avr/io.h>
#include <avr/wdt.h>
#include <util/delay.h>
-//#include <avr/stdio.h>
+#include <stdio.h>
#include <avr/interrupt.h>
//#include <avr/power.h>
@@ -99,12 +99,12 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
void EVENT_USB_Device_ConfigurationChanged(void)
{
- CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
+ CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
}
void EVENT_USB_Device_ControlRequest(void)
{
- CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
+ CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
}
/* ###### end LUFA CDC-ACM specific definitions ###### */
@@ -127,6 +127,12 @@ int main(void)
_delay_ms(500);
c1101_init();
hhd70_palna_rxmode();
+
+ bool enable_tx_part=true;
+ bool enable_rx_part=true;
+ int8_t fdev_m = 1;
+ int8_t fdev_e = 1;
+
for(;;)
{
int16_t num_bytes_received = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
@@ -134,86 +140,137 @@ int main(void)
{
int16_t recv_byte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
num_bytes_received--;
- if (recv_byte >= 0 && (char) recv_byte == 'r')
+ if (recv_byte < 0)
+ continue;
+ if ((char) recv_byte == '!')
{
CDC_Device_SendString(&VirtualSerial_CDC_Interface, "resetting\r\n");
+ wdt_enable(WDTO_500MS);
reset();
}
+ else if ((char) recv_byte == 'E')
+ {
+ enable_rx_part = !enable_rx_part;
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "RX-Part now ");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, ((enable_rx_part)? "Enabled": "Disabled") );
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "\r\n");
+ }
+ else if ((char) recv_byte == 'S')
+ {
+ enable_tx_part = !enable_tx_part;
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "TX-Part now ");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, ((enable_tx_part)? "Enabled": "Disabled") );
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "\r\n");
+ }
+ else if ((char) recv_byte == 'R')
+ c1101_spi_dump_registers_to_usb();
+ else if ((char) recv_byte == 'D' || (char) recv_byte == 'd')
+ {
+ sprintf(write_buffer,"Freq Deviation Now: %u0 Hz\r\n", c1101_setFSKDeviationFromCarrier(fdev_m, fdev_e));
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, write_buffer);
+ if ((char) recv_byte == 'd')
+ {
+ fdev_m--;
+ if (fdev_m < 0)
+ {
+ fdev_e = (fdev_e - 1) % 8;
+ if (fdev_e < 0)
+ fdev_e = 7;
+ fdev_m = 7;
+ }
+ fdev_m %= 8;
+ }
+ else
+ {
+ fdev_m++;
+ if (fdev_m > 7)
+ fdev_e = (fdev_e + 1) % 8;
+ fdev_m %= 8;
+ }
+ }
}
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
USB_USBTask();
- c1101_spi_strobe_command(SPIC1101_ADDR_SRX); // enter RX - Mode
- _delay_ms(1000);
-
- if (hhd70_rx_data_available())
+ if (enable_rx_part)
{
- led_on();
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX: GDO2 pin HIGH\r\n");
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:");
- debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES));
+
+ c1101_spi_strobe_command(SPIC1101_ADDR_SRX); // enter RX - Mode
+ _delay_ms(1000);
+
+ if (hhd70_rx_data_available())
+ {
+ led_on();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX: GDO2 pin HIGH\r\n");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:");
+ debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES));
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+ c1101_recieveData();
+ led_off();
+ }
+
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rssi: ");
+ debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RSSI));
CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
- c1101_recieveData();
- led_off();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 tx bytes: ");
+ debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_TXBYTES));
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes: ");
+ int16_t num_rx_bytes = c1101_spi_read_register(SPIC1101_ADDR_RXBYTES);
+ debug_sprint_int16hex(write_buffer, num_rx_bytes);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+
+
+ //~ if (num_rx_bytes > 0)
+ //~ {
+ //~ led_on();
+ //~ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX Buffer Non-Empty\r\n");
+ //~ c1101_recieveData();
+ //~ led_off();
+ //~ }
+
+// CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 status byte: ");
+// debug_sprint_int16hex(write_buffer, c1101_getStatus());
+// CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+// CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+
}
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rssi: ");
- debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RSSI));
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 tx bytes: ");
- debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_TXBYTES));
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes: ");
- int16_t num_rx_bytes = c1101_spi_read_register(SPIC1101_ADDR_RXBYTES);
- debug_sprint_int16hex(write_buffer, num_rx_bytes);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
-
- //~ if (num_rx_bytes > 0)
- //~ {
- //~ led_on();
- //~ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX Buffer Non-Empty\r\n");
- //~ c1101_recieveData();
- //~ led_off();
- //~ }
-
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 status byte: ");
- debug_sprint_int16hex(write_buffer, c1101_getStatus());
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
-
- //~ c1101_spi_dump_registers_to_usb();
- write_buffer[0]='T';
- write_buffer[1]='e';
- write_buffer[2]='m';
- write_buffer[3]='p';
- write_buffer[4]='s';
- write_buffer[5]=':';
- adc_on();
- _delay_ms(250);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp c1101: ");
- debug_sprint_int16hex(write_buffer+6, c1101_measureTemp());
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+6);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
- _delay_ms(250);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp atmega: ");
- debug_sprint_int16hex(write_buffer+10, adc_read(ADCMUX_ADC12));
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+10);
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
- adc_off();
- _delay_ms(250);
- led_on();
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: String\r\n");
- c1101_transmitData("OE6EOF test mur.sat GFSK r:9k6 fdev:3mhz 1234567890123456789012345678901234567890 End of Test",93);
- led_off();
- _delay_ms(100);
- led_on();
- CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: Temps\r\n");
- c1101_transmitData((char*) write_buffer,14);
- led_off();
+ if (enable_tx_part)
+ {
+ write_buffer[0]='T';
+ write_buffer[1]='e';
+ write_buffer[2]='m';
+ write_buffer[3]='p';
+ write_buffer[4]='s';
+ write_buffer[5]=':';
+ adc_on();
+ _delay_ms(250);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp c1101: ");
+ debug_sprint_int16hex(write_buffer+6, c1101_measureTemp());
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+6);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+ _delay_ms(250);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp atmega: ");
+ debug_sprint_int16hex(write_buffer+10, adc_read(ADCMUX_ADC12));
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+10);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n");
+ adc_off();
+ _delay_ms(250);
+ led_on();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: String\r\n");
+ c1101_transmitData("OE6EOF test mur.sat GFSK r:9k6 fdev:11kHz 1234567890123456789012345678901234567890 End of Test",93);
+ led_off();
+ _delay_ms(100);
+ led_on();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: Temps\r\n");
+ c1101_transmitData((char*) write_buffer,14);
+ led_off();
+ }
}
}
diff --git a/software/hhd70dongle/reset.sh b/software/hhd70dongle/reset.sh
index 317ec8a..9339f9f 100755
--- a/software/hhd70dongle/reset.sh
+++ b/software/hhd70dongle/reset.sh
@@ -1,3 +1,3 @@
#!/bin/zsh
-echo r > ${1-/dev/ttyACM*}
-sleep 2
+echo \! > ${1-/dev/ttyACM*}
+sleep 4