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:
Empfänger: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
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![]()







...
Zitieren


Lesezeichen