Hallo Habe eine kurze Frage zu den RFM22b Modulen. Habe die Lib von Ulrich Radig an meine Bedürfnisse angepasst. Das Beispiel verwendet ja polling was ja nicht so schön ist. Also habe ich den Empfangsteil in einen Interrupt verschoben. Der Empfang funktioniert auch soweit. Für eine Bidirektionale Verbindung gehört aber auch das senden dazu und hier habe ich ein Problem Sobald ich etwas senden löst der Interrupt nicht mehr aus. Warscheinlich ist irgend ein Bit des RFM22b nach dem Senden falsch. Auch nach 5h finde ich das Bit nicht. ;-) Vieleicht kennt sich jemand damit aus und kennt den Fehler. Gruß Christoph
keiner eine Idee?
Hallo, das Problem hatte ich auch schon, mit der rf22_getpacket kannst du nicht mit einem Interrupt arbeiten, weil außer der RX int auch noch was anderes einen INT setzt und die originale RX Funktion die INT's dann nicht löscht. ich habs folgendermaßen gelöst: [ISR_INT0] Register 3 lesen (ISR1) wenn Bit 1=1 dann merken/Flag setzen (Paket empfangen) Register 4 lesen (ISR2) [END ISR] wenn Paket empfangen (siehe oben), hab ich aber Außerhalb der ISR
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Edit: und noch den INT in rf22_rxmode() wieder einschalten
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
Sascha
Hallo Sascha Mit Register 3 lesen (ISR1) wenn Bit 1=1 dann merken/Flag setzen (Paket empfangen) Register 4 lesen (ISR2) meinst du das Register 0x03 und 0x04 vom RFM Modul oder? Es wäre interresant zu wissen was genau den INT auslöst. Vieleicht kann jemand noch Licht ins Dunkel bringen Gruß Christoph
Christoph B. schrieb: > Hallo Sascha > > > Mit > Register 3 lesen (ISR1) > wenn Bit 1=1 dann merken/Flag setzen (Paket empfangen) > Register 4 lesen (ISR2) > > meinst du das Register 0x03 und 0x04 vom RFM Modul oder? ja > Es wäre interresant zu wissen was genau den INT auslöst. hab mir die Inhalte der Register mal immer ausgeben lassen, aber frag mich jetzt nicht welches Bit es war. Jeden falls muss man immer beide Statusregister lesen um die Flags zu löschen. Und das passiert im originalen Code nicht, weil vorher das Register 0x31 abgefragt wird. Sascha
Hallo Leider scheint das RFM22 Modul ein Eigenleben zu führen. Wenn ich das 0x03 Register auslese und auswerte sollte eigentlich das 2 Bit ( Valid Packet Received ) auf 1 sein. Das wird aber nie 1. In Register 0x05 wird aber das 2 Bit(enpkvalid) trotzdem auf 1 gesetzt.
Christoph B. schrieb: > Hallo > > Leider scheint das RFM22 Modul ein Eigenleben zu führen. > > Wenn ich das 0x03 Register auslese und auswerte sollte eigentlich das 2 > Bit ( Valid Packet Received ) auf 1 sein. > Das wird aber nie 1. > > In Register 0x05 wird aber das 2 Bit(enpkvalid) trotzdem auf 1 gesetzt. enpkvalid ist Bit 1, und das wird mit rf22_write(0x05, 0x02) eingeschaltet (die Zeile die ich hinzugefügt hatte). Und eben dieses Bit 1 habe ich dann auch in Register 0x03 ausgewertet. Sascha
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.