Rev Author Line No. Line
1178 mija 1 /* mija 2008
2 demo for RFM02 - TX 868MHz
3  
4 CPU ATtiny2313
5 fcpu = 1MHz
6  
7 !! define PIN,PORT,DDR for IOpin !!
8  
9 */
10  
11 #include <avr/io.h>
12 #include <util/delay.h>
13 #include "RFM02.h"
14  
15 //************************************************************************
16  
17 #define LENGTH_MSG 20
18  
19 #define SDI PA1
20 #define SDI_PORT PORTA
21 #define SDI_DDR DDRA
22  
23 #define FSK PD4
24 #define FSK_PORT PORTD
25 #define FSK_DDR DDRD
26  
27 /*#define SDO PB4 // input for mega
28 #define SDO_PORT PORTB
29 #define SDO_DDR DDRB
30 #define SDO_PIN PINB
31 */
32  
33 #define SCK PD2
34 #define SCK_PORT PORTD
35 #define SCK_DDR DDRD
36  
37 #define nIRQ PD5 // input for mega
38 #define nIRQ_PORT PORTD
39 #define nIRQ_DDR DDRD
40 #define nIRQ_PIN PIND
41  
42 #define nSEL PD3
43 #define nSEL_PORT PORTD
44 #define nSEL_DDR DDRD
45  
46 #define LED PB0
47 #define LED_PORT PORTB
48 #define LED_DDR DDRB
49  
50 // interni
51 #define SDI_H SDI_PORT |= _BV(SDI)
52 #define SDI_L SDI_PORT &= (~(_BV(SDI)))
53 #define SDI_INIT SDI_DDR |= _BV(SDI)
54  
55 #define FSK_H FSK_PORT |= _BV(FSK)
56 #define FSK_L FSK_PORT &= (~(_BV(FSK)))
57 #define FSK_INIT FSK_DDR |= _BV(FSK)
58  
59 #define SDO_INPUT (SDO_PIN & _BV(SDO))
60 #define SDO_INIT SDO_DDR &= (~(_BV(SDO)))
61  
62 #define SCK_H SCK_PORT |= _BV(SCK)
63 #define SCK_L SCK_PORT &= (~(_BV(SCK)))
64 #define SCK_INIT SCK_DDR |= _BV(SCK)
65  
66 #define nIRQ_INPUT (nIRQ_PIN & _BV(nIRQ))
67 #define nIRQ_INIT nIRQ_DDR &= (~(_BV(nIRQ)))
68  
69 #define nSEL_H nSEL_PORT |= _BV(nSEL)
70 #define nSEL_L nSEL_PORT &= (~(_BV(nSEL)))
71 #define nSEL_INIT nSEL_DDR |= _BV(nSEL)
72  
73 #define LED_H LED_PORT |= _BV(LED)
74 #define LED_L LED_PORT &= (~(_BV(LED)))
75 #define LED_INIT LED_DDR |= _BV(LED)
76  
77 #define START_TX RF_WRITE_CMD(CMD_POWER|POWER_EX|POWER_ES|POWER_EA|POWER_DC)
78 #define STOP_TX RF_WRITE_CMD(CMD_POWER|POWER_DC)
79  
80 #define RX_ENABLE UCSRB = _BV(RXEN)
81 #define RX_DISABLE UCSRB &= ~(_BV(RXEN))
82 //************************************************************************
83  
84 //uint8_t test[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x03b,0x3c,0x3d,0x3e,0x3f};
85 uint8_t test[LENGTH_MSG];
86 //uint8_t test[16]="0123456789abcdef";
87  
88  
89 //************************************************************************
90  
91 void delay_ms(uint16_t time)
92 {
93 while(time--) _delay_ms(1);
94 }
95  
96 void IO_INIT(void)
97 {
98 SDI_INIT;
99 //SDO_INIT;
100 SCK_INIT;
101 nIRQ_INIT;
102 nSEL_INIT;
103 FSK_INIT;
104 LED_INIT;
105 }
106  
107 void rs232_init(void)
108 {
109 //set baud rate fixed 9600 8N1 for fosc 1Mhz
110 UCSRA = _BV(U2X) ;
111 UBRRL = 12;
112 UCSRB = _BV(RXEN) ;
113 }
114  
115 void RF_INIT(void)
116 {
117 nSEL_H;
118 SDI_H;
119 SCK_L;
120 nIRQ_INPUT;
121 //SDO_INPUT;
122 FSK_H;
123 }
124  
125 void RF_WRITE_CMD(uint16_t cmd)
126 {
127 uint8_t i;
128  
129 SCK_L;
130 nSEL_L;
131 for (i=0;i<16;i++)
132 {
133 SCK_L;
134 SCK_L;
135 if (cmd & 0x8000) SDI_H;
136 else SDI_L;
137 SCK_H;
138 SCK_H;
139 cmd <<= 1;
140 }
141 SCK_L;
142 nSEL_H;
143 }
144  
145 void RF_WRITE_DATA(uint8_t data)
146 {
147 uint8_t i;
148  
149 for (i=0;i<8;i++)
150 {
151 while (nIRQ_INPUT);
152 while (!nIRQ_INPUT);
153 if (data & 0x80)FSK_H;
154 else FSK_L;
155 data <<= 1;
156 }
157 }
158  
159 int main()
160 {
161 uint8_t i,j,ChkSum;
162  
163 IO_INIT();
164 RF_INIT();
165 rs232_init();
166 LED_H;
167 delay_ms(100);
168  
169 RF_WRITE_CMD(CMD_STATUS);
170 RF_WRITE_CMD(CMD_SETTING |BAND_868 |C_12pF |TX_DEV_90);
171 RF_WRITE_CMD(CMD_FREQUENCY |FREQUENCY_868);
172 RF_WRITE_CMD(0xD040);
173 RF_WRITE_CMD(CMD_RATE |RATE_19200);
174 RF_WRITE_CMD(CMD_BATTERY |TX_EBS);
175 RF_WRITE_CMD(CMD_POWER |POWER_DC);
176 RF_WRITE_CMD(POWER_OUT_0);
177  
178 j= 0;
179 while (1)
180 {
181  
182  
183 LED_L;
184 RX_ENABLE;
185  
186 while ( !(UCSRA & (_BV(RXC))));
187 test[0]= UDR;
188 for (i=1;i<LENGTH_MSG;i++)
189 {
190 j=255;
191 while ( !(UCSRA & (_BV(RXC))) && --j);
192 {
193 /*asm volatile( "nop" "\n\t"
194 "nop" "\n\t"
195 "nop" "\n\t"
196 "nop" "\n\t"
197 :
198 :
199 );*/
200 }
201 if(j) test[i]= UDR;
202 else while (i<LENGTH_MSG) test[i++] = 0;
203 }
204 i=UDR;
205 RX_DISABLE;
206  
207 LED_H;
208  
209 START_TX;
210 ChkSum = 0;
211 for (i=0;i<3;i++) RF_WRITE_DATA(0xAA);
212 RF_WRITE_DATA(0x2D);
213 RF_WRITE_DATA(0xD4);
214  
215 for (i=0;i<LENGTH_MSG;i++)
216 {
217 RF_WRITE_DATA(test[i]);
218 //putc
219 ChkSum += test[i];
220 }
221 RF_WRITE_DATA(ChkSum);
222 RF_WRITE_DATA(0xAA);
223 RF_WRITE_DATA(0xAA);
224 STOP_TX;
225  
226  
227 //delay_ms(5000);
228 //j++;
229 //test[13]=(j/100)+0x30;
230 //test[14]=((j%100)/10)+0x30;
231 //test[15]=((j%100)%10)+0x30;
232 }
233 return 0;
234 }
235  
236  
237