Hallo,
ich habe zwei Boards mit Atmega8 µC, nach diesem Schaltplan gebaut:
http://www.mikrocontroller.net/wikifiles/f/f6/Mega8_Tutorial.png
Einmal mit Quartzosz. und einmal ohne.
Jedoch sind die Chips -so wie sie aus der Verpackung kommen-, also
sollten sie in beiden Fällen den internen Takt verwenden.
Ganz wie sie aus der Verpackung sind sind sie auch wieder nicht, ein
Programm haben sie schon drauf.
Und zwar folgendes Programm.
Einmal ist empfangen() oder senden() in der main() auskommentiert, um
entweder einen Sender zu bekommen oder ein Empfänger.
Das Oszilloskop zeigt mir an, dass der Sender auch sendet, auch wenn man
den Atmega8 von einem Board aufs andere tut und umgekehrt.
Der Empfänger sagt hingegen nur, dass die Länge des rx-Buffers 0 ist
(die LED blinkt 1 mal). (siehe Prog unten)
Aber mit anderen Tests ergibt sich auch (durch LED-Blinken): beim
rfm12_rx_status: STATUS_FREE
So ist das Funkmodul angeschlossen (ohne irgendwelchen zus. externen
Pullup-Widerstände, Kondenstatoren, etc.):
http://www.hansinator.de/rfm12lib/index.html#hard_sec
Das ist die lib: http://www.das-labor.org/files/rfm12lib-1.1.0.zip
Wo kann das Problem liegen?
Danke
Gruß
Stefan Koch
Programm:
1 | /*
|
2 | */
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <avr/interrupt.h>
|
6 | #include <util/delay.h>
|
7 | #include "rfm12.h"
|
8 | #define true 1
|
9 | #define false 0
|
10 |
|
11 | void led2(uint8_t c)
|
12 | {
|
13 | if(c==true)
|
14 | {
|
15 | PORTD|=0b00100000;
|
16 | DDRD|= 0b00100000;
|
17 | }
|
18 | else if(c==false)
|
19 | {
|
20 | PORTD&=0b11011111;
|
21 | DDRD&= 0b11011111;
|
22 | }
|
23 |
|
24 | }
|
25 |
|
26 | void led1(uint8_t c)
|
27 | {
|
28 | if(c==true)
|
29 | {
|
30 | PORTD|=0b01000000;
|
31 | DDRD|= 0b01000000;
|
32 | }
|
33 | else if(c==false)
|
34 | {
|
35 | PORTD&=0b10111111;
|
36 | DDRD&= 0b10111111;
|
37 | }
|
38 |
|
39 | }
|
40 |
|
41 | void blinken(uint8_t led, uint8_t anz)
|
42 | {
|
43 | uint8_t i=0;
|
44 | uint8_t ms=10;
|
45 | for(i=1; i<=anz; i++)
|
46 | {
|
47 | if(led==1)
|
48 | {
|
49 | led1(true);
|
50 | _delay_ms(ms);
|
51 | led1(false);
|
52 | _delay_ms(ms);
|
53 | }
|
54 | else if(led==2)
|
55 | {
|
56 | led2(true);
|
57 | _delay_ms(ms);
|
58 | led2(false);
|
59 | _delay_ms(ms);
|
60 | }
|
61 | }
|
62 | }
|
63 |
|
64 |
|
65 | void empfangen()
|
66 | {
|
67 | uint8_t* buffer;
|
68 | uint8_t fe = 0;
|
69 | uint8_t finished = 0;
|
70 | uint8_t pt = 0xEE;
|
71 | rfm12_init();
|
72 | sei();
|
73 |
|
74 | led2(true);
|
75 | _delay_ms(500);
|
76 |
|
77 | while(finished == false)
|
78 | {
|
79 | if(rfm12_rx_status() == STATUS_COMPLETE)
|
80 | {
|
81 | buffer= rfm12_rx_buffer();
|
82 | fe=buffer[0];
|
83 | rfm12_rx_clear();
|
84 | blinken(2,3);
|
85 | finished = true;
|
86 | led2(false);
|
87 | }
|
88 | //rfm12_tick();
|
89 | blinken(1,rfm12_rx_len()+1);
|
90 | _delay_ms(250);
|
91 | }
|
92 |
|
93 | blinken(1,fe);
|
94 | }
|
95 |
|
96 | void senden()
|
97 | {
|
98 | uint8_t string[]="teststring";
|
99 | uint8_t finished = false;
|
100 | uint8_t pt = 0xEE;
|
101 | rfm12_init();
|
102 | sei();
|
103 |
|
104 | led2(true);
|
105 |
|
106 | while(finished == false)
|
107 | {
|
108 | rfm12_tx(sizeof(string), pt, string);
|
109 | rfm12_tick();
|
110 | //finished = true;
|
111 | }
|
112 |
|
113 | blinken(2,5);
|
114 | led2(true);
|
115 | }
|
116 |
|
117 | int main(void)
|
118 | {
|
119 | empfangen();
|
120 | //senden();
|
121 | while(1)
|
122 | {
|
123 | led2(1);
|
124 | _delay_ms(50);
|
125 | led2(0);
|
126 | _delay_ms(50);
|
127 | }
|
128 |
|
129 | return 0;
|
130 | }
|