From 250a52f9c62d7746ca358593f66d6db449feaa74 Mon Sep 17 00:00:00 2001 From: Bernhard Tittelbach Date: Fri, 22 Jun 2012 22:47:54 +0000 Subject: play with GFSK Deviation, test RX TX git-svn-id: https://svn.spreadspace.org/mur.sat@553 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- software/hhd70dongle/c1101lib.c | 8 +- software/hhd70dongle/c1101lib.h | 1 + software/hhd70dongle/hhd70dongle.c | 197 ++++++++++++++++++++++++------------- software/hhd70dongle/reset.sh | 4 +- 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 #include #include -//#include +#include #include //#include @@ -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 -- cgit v1.2.3