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