Datum:
Angehängte Dateien:Hallo zusammen, auch wenn das der X-te Beitrag mittlerweile zu dem RFM12, finde ich nirgends ein Beitrag mit dem gleichen Problem.. Folgender Hardware-Aufbau auf Steckbrett: 2x: PIC18 über fünf Port-Pins mit RFM12 verbunden (SDI,SDO,SCK,nSEL,nIRQ) Der eine PIC soll das RFM12 als Empfänger und der andere als Sender verwenden. Als Monoantenne ist ein Stück Draht (~16,7 cm) am Antennen-Pin der RFM12. Nachdem ich erfolglos das Codebeispiel aus dem Datenblatt (http://www.hoperf.com/upload/rf/RF12.pdf) für den C18-Compiler portiert habe, habe ich den Treiber von Christian Stadler eingebunden (http://www.picprojects.net/rfm12/index.html9) Das Schreiben über den SPI funktioniert ordentlich und die Mindestabstände im Timing Diagramm werden auch eingehalten. Der Status des RFM12 lässt sich auch aulesen (zumind. bekomme ich eine Antwort vom Modul). Allerdings sind die Bits 8 und 10 bis 15 immer 0 beim Empfänger. Bit 9 ist gelegentlich gesetzt (FIFO-Puffer ist leer ) und Bit 0 bis 7 variieren. DQD meist gesetzt:
iStatus = RFM12_Write(0x0000); //Status => 0x0080 /* enable RX */ RFM12_Write(0x82C8); iStatus = RFM12_Write(0x0000); //Status => 0x00A0 /* wait until FIFO ready */ while (!(RFM12_GetSDO())); //Hier bleibt der Empfänger für immer... |
Nach dem Aktivieren des Empfänger durch 0x82C8 warten das Programm vergeblich, bis das "Busy-Flag" vom Modul TRUE wird... Beim Sender hingegen ist im Status vor dem Aufruf von RFM_TxData(...) nur Bit 15 gesetzt - also Sender bereit
iStatus = RFM12_Write(0x0000); //Status => 0x8000 RFM12_TxData(txbuf, 8); iStatus = RFM12_Write(0x0000); //Status => 0xA000 |
Nach dem Senden ist Bit 13 zudem gesetzt - "RGUR" Register underrun. (Status 0xA000) Wenn ich den Status nach dem Aktivieren des Senders (RFM12_Write(0x8238)) aber noch vor dem eigentlichen Senden auslese steht dort 0xA100 - ATS ist gesetzt... "Das Antennenabstimmschaltung hat ein starkes Radiosignal detektiert (Was auch immer das bedeutet. Könnte auch perfekte Antennen-Fehlanpassung beim Senden sein.)" Aktuell habe ich noch die Schwierigkeit ausser ein Debugger für die PIC's und ein Multimeter kein weiteres "Debugging-Werkzeug" zu besitzen...Also an ein Oszi komme ich erst in ein paar Tagen. Die relevanten Codedateien und ein Bild vom Steckbrettaufbau sind im Anhang. Bisher habe ich in den ganzen Forenbeiträgen immer nur von Problemen in der Art "verstümelter Empfang" u.ä. gelesen, aber dass gar nichts geht ist mir noch nicht untergekommen. Ich vermute auch aus dem Grund, dass ich zum einen das Codebeispiel aus dem Datenblatt und zum anderen einen funktionierenden Treiber (http://www.picprojects.net/rfm12/index.html) ausprobiert habe und auch kein Fehler in den Funktionen zum Schreiben der Register vom RFM12 finde, dass der Fehler in der Hardware steckt. Mir ist es leider während der IBN zudem noch passiert, dass während des Betriebs beide Antennen aneinander gekommen sind...Ich kann leider nicht sagen, ob mir das die beiden Module nun übel nehmen oder ob tatsächlich noch ein Fehler im Code steckt. Kann einer helfen? Danke schonmal im vorraus für eure Antworten ;-)
Datum:
Hallo zusammen, ich habe das Modul mittlerweile zum Laufen gebracht. Im Nachhinein ist auch klar weshalb man mit der obigen Problemschilderung kaum auf die Lösung kommen kann. Ich verwende einen Soft-SPI. Durch das Ersetzten des 4 Mhz Resonators auf einen 8 Mhz Resonator war das Problem schlagartig verschwunden (PLL aktiv). Offensichtlich reichen 4 Mhz (*4 / PLL) für den Soft-SPI des Treibers bzw. für das Modul nicht aus - mit den 8 * 4 Mhz funktioniert es nun wunderbar. Hinweis: Ich habe nur das Demoprogramm am Laufen gehabt als das Problem aktuell war, also war keine weitere Arbeit für den PIC ausser Senden/Empfangen bzw. Soft-SPI...
Datum:
Ich tippe da eher auf zwei Schalltungsfehler. Oder das Osccon steht falsch. Vdd sollte nicht groesser als 5,3 Volt sein.
