Ik heb een tijd geleden eens 2 rfm70 modules gekocht in de hoop deze te kunnen gebruiken, echter lukte dat mij toen niet door gebrek aan ervaring. Nu dat ik weer een stuk meer weet leek het mij een goed idee het opnieuw te proberen, ik heb de code van voti omgeschreven naar geldige code voor de mikroC compiler, maar het werkt nog niet helemaal. Het test programmatje laat namelijk alleen de transieve led knipperen, de recieve led niet (dus of er wordt niet echt iets verstuurd, of wat er wordt verstuurd wordt niet goed ontvangen, of een combinatie).
De originele code is hier te vinden:
http://www.voti.nl/rfm70/
De code bestaat uit drie bestanden:
rfm70.h
rfm70.c
rfm70-config.h
rfm.c (het bestand waar de "main" code/test code in staat)
Ik denk dat het het makkelijkst is om voor het overzicht niet alles hierop te zetten, dus hier volgt de originele code van voti voor het testen, en mijn code. Ik denk dat de fout hier goed in kan zitten, maar ik kan hem niet vinden:
originele:
mijn code:
De originele code is hier te vinden:
http://www.voti.nl/rfm70/
De code bestaat uit drie bestanden:
rfm70.h
rfm70.c
rfm70-config.h
rfm.c (het bestand waar de "main" code/test code in staat)
Ik denk dat het het makkelijkst is om voor het overzicht niet alles hierop te zetten, dus hier volgt de originele code van voti voor het testen, en mijn code. Ik denk dat de fout hier goed in kan zitten, maar ik kan hem niet vinden:
originele:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| #include "rfm70.h" #include "rfm70-config.h" #define GREEN_LED( x ) PIN_COPY( PORTD, 0, !(x) ) #define RED_LED( x ) PIN_COPY( PORTD, 1, !(x) ) #define GREEN_LED_OUT() TRISD0=0; #define RED_LED_OUT() TRISD1=0; void main( void ){ unsigned char n = 0; unsigned char transmit_led = 0; unsigned char receive_led = 0; unsigned char len, i, chksum, pipe; unsigned char rx_buf[ RFM70_MAX_PACKET_LEN ]; const unsigned char tx_buf[17]={ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38, 0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x78}; ANSEL = 0; ANSELH = 0; TRISD = 0; TRISE = 0; TRISA2 = 0; PIN_SET( PORTA, 2 ); PORT_SET( PORTE, 4 ); PORT_SET( PORTD, 0xFF ); ANSEL = 0; ANSELH = 0; WPUB = 0; RED_LED_OUT(); GREEN_LED_OUT(); rfm70_init(); while(1){ wait_ms( 2 ); RED_LED( transmit_led > 0 ); if( transmit_led > 0 ){ transmit_led--; } GREEN_LED( receive_led > 0 ); if( receive_led > 0 ){ receive_led--; } if( ++n > 250 ){ rfm70_mode_transmit(); rfm70_transmit_message_once( tx_buf, 17 ); WAIT_US( 100 ); rfm70_mode_receive(); transmit_led = 20; n = 0; } if( rfm70_receive( &pipe, &rx_buf, &len )){ chksum = 0; for(i=0;i<16;i++){ chksum +=rx_buf[i]; } if(chksum==rx_buf[16]&&rx_buf[0]==0x30){ receive_led = 20; } rfm70_register_write( RFM70_CMD_FLUSH_RX,0 ); } } } |
mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| #include "rfm70.h" #include "rfm70.c" #include "rfm70-config.h" sbit GREEN_LED at LATD0_bit; // #define GREEN_LED( x ) PIN_COPY( PORTD, 0, !(x) ) sbit RED_LED at LATD1_bit; // #define RED_LED( x ) PIN_COPY( PORTD, 1, !(x) ) #define GREEN_LED_OUT TRISD0_bit = 0; // #define GREEN_LED_OUT() RISD0=0; #define RED_LED_OUT TRISD1_bit = 0; // #define RED_LED_OUT() TRISD1=0; void main(){ unsigned char n = 0; unsigned char transmit_led = 0; unsigned char receive_led = 0; unsigned char len, i, chksum, pipe; unsigned char rx_buf[ RFM70_MAX_PACKET_LEN ]; const unsigned char tx_buf[17]={ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38, 0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x78}; /*ANSEL = 0; ANSELH = 0;*/ ADCON1 |= 0x0F; // Configure all ports with analog function as digital ANSELB = 0; // Configure pins as digital C1ON_bit = 0; // Disable comparators C2ON_bit = 0; ANSELC = 0; // Configure AN pins as digital SLRCON = 0; // Set output slew rate on all ports at standard rate TRISD = 0; TRISE = 0; TRISA.B2 = 0; PORTA.B2 = 1; // PIN_SET( PORTA, 2 ); PORTE = 4; // PORT_SET( PORTE, 4 ); PORTD = 0xFF; // PORT_SET( PORTD, 0xFF ); WPUB = 0; RED_LED_OUT; GREEN_LED_OUT; rfm70_init(); while(1){ delay_ms( 2 ); RED_LED = transmit_led; // RED_LED( transmit_led > 0 ); if( transmit_led > 0 ){ transmit_led--; } GREEN_LED = receive_led; // GREEN_LED( receive_led > 0 ); if( receive_led > 0 ){ receive_led--; } if( ++n > 250 ){ rfm70_mode_transmit(); rfm70_transmit_message_once( tx_buf, 17 ); delay_us( 100 ); rfm70_mode_receive(); transmit_led = 20; n = 0; } if( rfm70_receive( &pipe, &rx_buf, &len )){ chksum = 0; for(i=0;i<16;i++){ chksum +=rx_buf[i]; } if(chksum==rx_buf[16]&&rx_buf[0]==0x30){ receive_led = 20; } rfm70_register_write( RFM70_CMD_FLUSH_RX,0 ); } } } |