Hallo Leute!

Vor einiger Zeit hab ich mir 2 RFM12 Sende-/Empfangsmodule von Pollin besorgt. Nun bin ich dabei diese richtig zum Laufen zu bringen.

Hierzu benutze ich die codes von http://kanal35.npage.de/funkmodul.html den ich etwas
abgewandelt habe. Da der Empfänger nichts empfieng, spielte ich n bisschen am code, sodass es jetzt halbwegs funktioniert: ich habe eine kleine
Wartezeit eingebaut.
Aber der empfänger empfängt nur jedes zweite übertragene byte, statt 0123456789A nur 124679 ...

Kann mir jemand helfen ?

Hier erstmal die codes:

Sender:
Code:
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'                            RFM12 Senden (TX) 434
'                                                                     By DO1MAD
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$regfile = "m8def.dat"                                      'ATMega16
$hwstack = 40
$swstack = 40
$framesize = 40
$crystal = 8000000                                          'Interner Quartz (8MHz)
$baud = 19200
'----------------------Variablen setzen-----------------------------------------
Dim Tx_word As Word
Dim Tx_l As Byte At Tx_word Overlay
Dim Tx_h As Byte At Tx_word + 1 Overlay
Dim Rx_word As Word
Dim Rx_l As Byte At Rx_word Overlay
Dim Rx_h As Byte At Rx_word + 1 Overlay
Dim Z As Byte
Dim Sendepuffer(18) As Byte

'--------------Aliasse und Richtungen für den RFM12 setzen----------------------

Cs Alias Portb.2 : Config Cs = Output : Set Cs
Sdi Alias Portb.3 : Config Sdi = Output
Sdo Alias Pinb.4 : Config Sdo = Input
Sck Alias Portb.5 : Config Sck = Output
'--------------------32,768kHz Uhrenquarz aktivieren----------------------------
Enable Interrupts

'----------------------------LED's aktivieren-----------------------------------
'Config Portb.2 = Output                                     'Grüne LED
Config Portb.0 = Output                                     'Rote LED
'------------------------LED's beim Programmstart testen------------------------
Set Portb.0
Wait 1
Reset Portb.0


Print "start"

'-----------------------SPI Port Configuration----------------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , _
Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
Spiinit
'-------------------------------------------------------------------------------
Waitms 300                                                  'Auf Bereitschaft des RFM12 warten!
'-------------------------------------------------------------------------------
Gosub Initialisation                                        'Zur Initialisation springen
'---------------------------Sendepuffer füllen----------------------------------
Sendepuffer(1) = &HAA                                       'Preamble an Modul übertragen
Sendepuffer(2) = &HAA                                       'Preamble an Modul übertragen
Sendepuffer(3) = &HAA                                       'Preamble an Modul übertragen
'--------------------
Sendepuffer(4) = &H2D                                       'HI Byte für die Frame-Erkennung
Sendepuffer(5) = &HD4                                       'LO Byte für die Frame-Erkennung
'--------------------
 Sendepuffer(6) = "0"                                       'Nutzdaten Byte's
 Sendepuffer(7) = "1"
 Sendepuffer(8) = "2"
 Sendepuffer(9) = "3"
Sendepuffer(10) = "4"
Sendepuffer(11) = "5"
Sendepuffer(12) = "6"
Sendepuffer(13) = "7"
Sendepuffer(14) = "8"
Sendepuffer(15) = "9"
Sendepuffer(16) = "A"
'--------------------
Sendepuffer(17) = 0                                         'Kann man als String in der Empfangs-Software nutzen
'--------------------
Sendepuffer(18) = &HFF                                      'Dummy Byte
'-------------------------------------------------------------------------------
'-------------------------------Hauptschleife-----------------------------------
Do
 Wait 1                                                     'Ein Durchlauf pro Sekunde
   Gosub Sender_an                      'Senderendstufe einschalten
   Set Portb.0                                              'Rote LED einschalten
   Gosub Bereit                         'Auf Bereitschaft warten
   For Z = 1 To 18                      'Sendepuffer 1 bis 18 abarbeiten
   Tx_word = &HB800 + Sendepuffer(z)    'Sendekomando B800 und Pufferinhalt zusammenführen
   Gosub Bereit                       'Auf bereitschaft warten


   Waitms 1
  
                         
   Gosub Rfmwrite                       '1 Sendepuffer Byte übergeben
   Next Z                               'Nächsten Schleifendurchlauf
   Reset Portb.0                                            'Rote LED ausschalten
   Waitms 5                             'Dem RFM12 zeit zum senden lassen
   Gosub Sender_aus                                         'Senderendstufe abschalten

   Print "  Auf 434,000Mhz gesendet!"
Loop
'-------------------------------------------------------------------------------
'--------------------------------SUB's------------------------------------------
Bereit:
   Reset Cs                                                 'RFM auswählen
   Bitwait Sdo , Set                                        'Auf Highpegel warten
   Return
'-------------------------------------------------------------------------------
Rfmwrite:
   Reset Cs                                                 'RFM auswählen
   Rx_h = Spimove(tx_h)                                     'Sendet und empfängt das HI Byte
   Rx_l = Spimove(tx_l)                                     'Sendet und empfängt das LO Byte
   Set Cs                                                   'RFM abwählen
   Return
'-------------------------------------------------------------------------------
Initialisation:                                             'Initialisationsdaten zum RFM12 senden
   Restore Initialisationsdaten
   For Z = 1 To 14                                          'Alle 14 Kommando's abarbeiten
   Read Tx_word
   Gosub Rfmwrite                                           'Daten an RFM12 senden
   Waitms 30                                                'Zeit zum ausführen der einzelnen Commando's geben
   Next                                                     '14x 30ms = 420ms Gesamtzeit
   Return
'-------------------------------------------------------------------------------
Initialisationsdaten:                                       'Daten gemäß RFM12 Command Calculator
'-------------------------------------------------------------------------------
Data &H80D7%                                                'Configurations Settings Command
Data &H8239%                                                'Power Management Command
Data &HA668%                                                'Frequency Setting Command (HA668 = 434MHz)
Data &HC647%                                                'Data Rate Command
Data &H94A0%                                                'Receiver Control Command
Data &HC2AD%                                                'Data Filter Command
Data &HCA81%                                                'FIFO und Reset Mode Command
Data &HCED4%                                                'Synchron Pattern Command
Data &HC400%                                                'Automatic Frequecy Control Command
Data &H9854%                                                'TX Control Command
Data &HCC17%                                                'PLL Settings Command
Data &HE000%                                                'Wake-Up Timer Command
Data &HC800%                                                'Low Duty-Cycle Command
Data &HC000%                                                'Low Battery Detect & µC CLK Command
'-------------------------------------------------------------------------------
Sender_an:
   Restore Sender_an_daten
   Read Tx_word
   Gosub Rfmwrite                                           'Daten an RFM12 senden
   Waitms 30                                                'Zeit zum ausführen der einzelnen Commando's geben
   Return
'-------------------------------------------------------------------------------
Sender_an_daten:                                            'Daten gemäß RFM12 Command Calculator
'-------------------------------------------------------------------------------
Data &H8239%                                                'Power Management Command                             'Low Battery Detect & µC CLK Command
'-------------------------------------------------------------------------------
Sender_aus:
   Restore Sender_aus_daten
   Read Tx_word
   Gosub Rfmwrite                                           'Daten an RFM12 senden
   Waitms 30                                                'Zeit zum ausführen der einzelnen Commando's geben
   Return
'-------------------------------------------------------------------------------
Sender_aus_daten:                                           'Daten gemäß RFM12 Command Calculator
'-------------------------------------------------------------------------------
Data &H8201%                                                'Power Management Command                             'Low Battery Detect & µC CLK Command
'-------------------------------------------------------------------------------
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'                               Programm Ende
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

' Der ISM Bereich für 70cm: 433,05 bis 434,79 MHz
Empfänger:
Code:
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'                            RFM12 Empfangen (RX)  434
'                                                                     By DO1MAD
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$regfile = "m8def.dat"                                      'ATMega16
$hwstack = 40
$swstack = 40
$framesize = 40
$crystal = 8000000                                          'Interner Quartz (8MHz)
$baud = 19200
'-------------------------Variablen setzen--------------------------------------
Dim Tx_word As Word
Dim Tx_l As Byte At Tx_word Overlay
Dim Tx_h As Byte At Tx_word + 1 Overlay
Dim Rx_word As Word
Dim Rx_l As Byte At Rx_word Overlay
Dim Rx_h As Byte At Rx_word + 1 Overlay
Dim Z As Byte
Dim Rxpuffer(18) As Byte At &H7E                            'Puffer in einen anderen Speicherbereich setzen
Dim Rxdaten As String * 18 At Rxpuffer(1) Overlay
'--------------Aliasse und Richtungen für den RFM12 setzen----------------------
Ffit Alias Pinb.1 : Config Ffit = Input : Set Portb.1
Cs Alias Portb.2 : Config Cs = Output : Set Cs
Sdi Alias Portb.3 : Config Sdi = Output
Sdo Alias Pinb.4 : Config Sdo = Input : Set Portb.4
Sck Alias Portb.5 : Config Sck = Output
'--------------------32,768kHz Uhrenquarz aktivieren----------------------------
Enable Interrupts

'----------------------------LED's aktivieren-----------------------------------
'Config Portb.2 = Output                                     'Grüne LED
Config Portb.0 = Output                                     'Rote LED
'------------------------LED's beim Programmstart testen------------------------
Set Portb.0
Wait 1
Reset Portb.0
Print "start"


'--------------------ISP Schnittstelle konfigurieren----------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , _
Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
Spiinit
'-------------------Auf Bereitschaft des RFM12 warten---------------------------
Waitms 300
'-------------------------RFM12 Initialisieren----------------------------------
Gosub Initialisation
Gosub Rfm12_bereit
Print "Ich bin jetzt auf Empfamg (434MHz)"
Goto 10                                                     'Es wird einmal beim Start der FIFO ausgelesen!
'-----------------------------Hauptschleife-------------------------------------
Do
If Ffit = 1 Then
                                            'Prüfen ob Daten im FIFO anliegen
Set Portb.0                                                 'Rote LED einschalten
10:                                                         'Starteinsprungspunkt
Tx_word = &HB000                                            'FIFO Auslesebefehl B000 in's TX-Word schreiben
Gosub Rfmwrite                                              'FIFO Auselesebefehl zum RFM12 senden
Incr Z                                                      'Z um 1 erhöhen
Rxpuffer(z) = Rx_l

                                        'Die Daten vom FIFO in den Puffer übertragen
If Rx_l = 0 Then                                            '0 ist das letzte Byte nach den Nutzdaten
Z = 0                                                       'Z für die nächste Übertragung zurücksetzten
Print Rxdaten                                               'Das empfangene Datenwort auf RS232 ausgeben
Rxdaten = ""                                                'Nutzdaten nach dem Senden rücksetzten
Gosub Rfm12_bereit                                          'Den RFM12 für den Empfang wieder bereit machen
Reset Portb.0                                               'Rote LED ausschalten
End If


End If
Loop


'----------------------------Zum Chip schreiben---------------------------------
Rfmwrite:
Reset Cs
Rx_h = Spimove(tx_h)
Rx_l = Spimove(tx_l)
Set Cs
Return
'----------------------------Zum Empfang bereit machen--------------------------
Rfm12_bereit:
Tx_word = &HCA81                                            'FIFO Initialisieren
Gosub Rfmwrite
Tx_word = &HCA83                                            'FIFO Aktivieren
Gosub Rfmwrite
Return
'----------------Alle 14 Initialisationsdaten dem RFM12 übergeben---------------
Initialisation:
Restore Initialisationsdaten
For Z = 1 To 14
Read Tx_word
Gosub Rfmwrite
Waitms 30
Next
Return
'-------------------------------------------------------------------------------
Initialisationsdaten:                                       'Daten gemäß RFM12 Command Calculator
'-------------------------------------------------------------------------------
Data &H80D7%                                                'Configurations Settings Command
Data &H8299%                                                'Power Management Command
Data &HA668%                                                'Frequency Setting Command (HA668 = 434MHz)
Data &HC647%                                                'Data Rate Command
Data &H94A0%                                                'Receiver Control Command
Data &HC2AD%                                                'Data Filter Command
Data &HCA81%                                                'FIFO und Reset Mode Command
Data &HCED4%                                                'Synchron Pattern Command
Data &HC400%                                                'Automatic Frequecy Control Command
Data &H9854%                                                'TX Control Command
Data &HCC17%                                                'PLL Settings Command
Data &HE000%                                                'Wake-Up Timer Command
Data &HC800%                                                'Low Duty-Cycle Command
Data &HC000%                                                'Low Battery Detect & µC CLK Command
'-------------------------------------------------------------------------------
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'                               Programm Ende
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

' Der ISM Bereich für 70cm: 433,05 bis 434,79 MHz

Schonmal danke im vorraus