Folgendes habe ich bei diesem Code gefunden:
- Print Ausgaben während des Sendezyklus (von TX on bis TX off) sollten nicht sein, da die recht viel Zeit brauchen und der Sendepuffer rechtzeitig gefüllt werden muss.
- Rf12_ready brauchst du nur zur Übertragung der Sendedaten in den Puffer, nicht zum Beschreiben der Register selbst. Zuerst rf12_ready, dann rf12_trans ausführen. Mit Rf12_ready bekommt der RFM erst dann Daten, wenn er diese braucht.
- Zwischen der Übertragung der Nutzdaten und dem Dummybyte ist kein Rf12_ready, damit wird das Byte unkontrolliert in den Puffer geschrieben. Damit die Übertragung entweder gestört oder das Byte wird intern verworfen.
- Prinzipiell kann man auf das Senden der Preambel an den RFM verzichten, da der TX-Puffer selbst eine 2 Byte lange Preambel erzeugt.
So sollte der Code dann aussehen:
Code:Sub Rf12_txdata(byval Txlen As Byte) Temp = Rf12_trans(&H8238) 'Power CMD: synt.& PLL on Temp = Rf12_trans(&H8230) Temp = Rf12_trans(&H0000) 'Status holen Rf12_status = Temp Rf12_ready 'Status einlesen Temp = Rf12_trans(&Hb8aa) 'Preamble Rf12_ready 'Status einlesen Temp = Rf12_trans(&Hb8aa) Rf12_ready 'Preamble Temp = Rf12_trans(&Hb8aa) Rf12_ready 'Preamble in FIFO schieben Temp = Rf12_trans(&Hb82d) Rf12_ready 'Startzeichen: 2D für den Empfänger Temp = Rf12_trans(&Hb8d4) 'Startzeichen: D4 für den Empfänger 'Print "sende1" For Lv = 1 To Txlen Rf12_ready Temp = &HB800 + Rf12_data(lv) 'Sende Nutzdaten Temp = Rf12_trans(temp) 'Toggle Led2 'Print "temp" ; Temp Next Lv Rf12_ready 'Status einlesen Temp = Rf12_trans(&Hb8aa) Rf12_ready 'Status einlesen Temp = Rf12_trans(&Hb8aa) 'Dummybyte nachschieben Temp = Rf12_trans(&H8208) 'Power CMD: synt.& PLL off, Quarz-clk läuft weiter Print "sende2" End Sub







Zitieren

Lesezeichen