No changes between revisions
/Designs/Data_loggers/DOGFINDER02A/SW/DOGFINDER_TX.c~ |
---|
0,0 → 1,192 |
/* mija 2008 |
demo for RFM02 - TX 868MHz |
CPU ATMEGA16 |
fcpu = 1MHz |
!! define PIN,PORT,DDR for IOpin !! |
tested with module RFM12B RX 9600 BW 134kHz |
*/ |
#define F_CPU 1000000UL |
#include <avr/io.h> |
#include <util/delay.h> |
#include "RFM02.h" |
//************************************************************************ |
#define SDI PB3 |
#define SDI_PORT PORTB |
#define SDI_DDR DDRB |
#define FSK PC1 |
#define FSK_PORT PORTC |
#define FSK_DDR DDRC |
+#define SCK PB5 |
+ #define SCK_PORT PORTB |
+ #define SCK_DDR DDRB |
+ |
+#define nIRQ PD2 // input for mega |
+ #define nIRQ_PORT PORTD |
+ #define nIRQ_DDR DDRD |
+ #define nIRQ_PIN PIND |
+ |
+#define nSEL PB2 |
+ #define nSEL_PORT PORTB |
+ #define nSEL_DDR DDRB |
+ |
+#define LED PC3 |
+ #define LED_PORT PORTC |
+ #define LED_DDR DDRC |
+ |
+// interni |
+#define SDI_H SDI_PORT |= _BV(SDI) |
+#define SDI_L SDI_PORT &= (~(_BV(SDI))) |
+#define SDI_INIT SDI_DDR |= _BV(SDI) |
+ |
+#define FSK_H FSK_PORT |= _BV(FSK) |
+#define FSK_L FSK_PORT &= (~(_BV(FSK))) |
+#define FSK_INIT FSK_DDR |= _BV(FSK) |
+ |
+#define SDO_INPUT (SDO_PIN & _BV(SDO)) |
+#define SDO_INIT SDO_DDR &= (~(_BV(SDO))) |
+ |
+#define SCK_H SCK_PORT |= _BV(SCK) |
+#define SCK_L SCK_PORT &= (~(_BV(SCK))) |
+#define SCK_INIT SCK_DDR |= _BV(SCK) |
+ |
+#define nIRQ_INPUT (nIRQ_PIN & _BV(nIRQ)) |
+#define nIRQ_INIT nIRQ_DDR &= (~(_BV(nIRQ))) |
+ |
+#define nSEL_H nSEL_PORT |= _BV(nSEL) |
+#define nSEL_L nSEL_PORT &= (~(_BV(nSEL))) |
+#define nSEL_INIT nSEL_DDR |= _BV(nSEL) |
+ |
+#define LED_H LED_PORT |= _BV(LED) |
+#define LED_L LED_PORT &= (~(_BV(LED))) |
+#define LED_INIT LED_DDR |= _BV(LED) |
+ |
+#define START_TX RF_WRITE_CMD(CMD_POWER|POWER_EX|POWER_ES|POWER_EA|POWER_DC) |
+#define STOP_TX RF_WRITE_CMD(CMD_POWER|POWER_DC) |
+ |
+//************************************************************************ |
+ |
+//uint8_t test[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x03b,0x3c,0x3d,0x3e,0x3f}; |
+uint8_t test[17]="\n\rATmega16\n\r ---"; |
+//uint8_t test[16]="0123456789abcdef"; |
+ |
+ |
+//************************************************************************ |
+ |
+void delay_ms(uint16_t time) |
+{ |
+ while(time--) _delay_ms(1); |
+} |
+ |
+void IO_INIT(void) |
+{ |
+ SDI_INIT; |
+ SCK_INIT; |
+ nIRQ_INIT; |
+ nSEL_INIT; |
+ FSK_INIT; |
+ LED_INIT; |
+} |
+ |
+void RF_INIT(void) |
+{ |
+ nSEL_H; |
+ SDI_H; |
+ SCK_L; |
+ nIRQ_INPUT; |
+ FSK_H; |
+} |
+ |
+void RF_WRITE_CMD(uint16_t cmd) |
+{ |
+ uint8_t i; |
+ |
+ SCK_L; |
+ nSEL_L; |
+ for (i=0;i<16;i++) |
+ { |
+ SCK_L; |
+ SCK_L; |
+ if (cmd & 0x8000) SDI_H; |
+ else SDI_L; |
+ SCK_H; |
+ SCK_H; |
+ cmd <<= 1; |
+ } |
+ SCK_L; |
+ nSEL_H; |
+} |
+ |
+void RF_WRITE_DATA(uint8_t data) |
+{ |
+ uint8_t i; |
+ |
+ for (i=0;i<8;i++) |
+ { |
+ while (nIRQ_INPUT); |
+ while (!nIRQ_INPUT); |
+ if (data & 0x80)FSK_H; |
+ else FSK_L; |
+ data <<= 1; |
+ } |
+} |
+ |
+int main() |
+{ |
+ uint8_t i,j,ChkSum; |
+ |
+ IO_INIT(); |
+ RF_INIT(); |
+ LED_H; |
+ delay_ms(100); |
+ |
+ RF_WRITE_CMD(CMD_STATUS); |
+ RF_WRITE_CMD(CMD_SETTING |BAND_868 |C_12pF |TX_DEV_90); |
+ RF_WRITE_CMD(CMD_FREQUENCY |FREQUENCY_868); |
+ RF_WRITE_CMD(0xD040); |
+ RF_WRITE_CMD(CMD_RATE |RATE_9600); |
+ RF_WRITE_CMD(CMD_BATTERY |TX_EBS); |
+ RF_WRITE_CMD(CMD_POWER |POWER_DC); |
+ RF_WRITE_CMD(POWER_OUT_0); |
+ |
+ j= 0; |
+ while (1) |
+ { |
+ LED_H; |
+ |
+ START_TX; |
+ ChkSum = 0; |
+ for (i=0;i<3;i++) RF_WRITE_DATA(0xAA); |
+ RF_WRITE_DATA(0x2D); |
+ RF_WRITE_DATA(0xD4); |
+ |
+ for (i=0;i<16;i++) |
+ { |
+ RF_WRITE_DATA(test[i]); |
+ ChkSum += test[i]; |
+ } |
+ RF_WRITE_DATA(ChkSum); |
+ RF_WRITE_DATA(0xAA); |
+ RF_WRITE_DATA(0xAA); |
+ STOP_TX; |
+ |
+ LED_L; |
+ delay_ms(500); |
+ j++; |
+ test[13]=(j/100)+0x30; |
+ test[14]=((j%100)/10)+0x30; |
+ test[15]=((j%100)%10)+0x30; |
+ } |
+ return 0; |
+} |
+ |
+ |
+ |