Hallo,
Seit etwa vier Wochen schlage ich mich mit der Programmierung der RFM12
Funkmodule von Pollin herum (Bestellnr: 810 049). Ich habe viele
verschiedene Codes, die ich in diesem und anderen Foren gefunden habe,
getestet.
Codebeispiele (alle BASCOM):
http://kanal35.npage.de/funkmodul.htmlBeitrag "Beispielprogramm für RFM12 433MHz Funk-Module"http://bascom-forum.de/showthread.php?1600-RFM12-Codebeispiele
Das Programm, dass ich momentan verwende, ist das aus dem ersten Link,
natürlich auf meine Hardware angepasst, aber mit grundsätzlich gleicher
Verkabelung.
Zu Beginn habe ich zwei selbstgebaute Platinen (Lochraster) verwendet,
mittlerweile bin ich um Schaltungsfehler auszuschließen, auf die
Funkboard-Bausätze (bestellnr. 810 046) von Pollin gewechselt.
Grundsätzlich scheint die SPI Kommunikation (Hardware-SPI) mit dem Modul
zu funktionieren. Mit einem Oszi habe ich alle relevanten Pins
überprüft. Am CLK-Pin erhalte ich den eingestellten Takt, am SCK-Pin den
Takt je nach SPI Clockrate und verwendetem Quarz. Das Auswählen des
Moduls über nSEL funktioniert und ich erhalte beim Senden und Empfangen
Datensignale an SDI und SDO. Als Antenne verwende ich ein 16 cm langes
Stück Cu-Lackdraht.
Nun zu meinem Problem:
Der Empfänger empfängt nichts. Absolut nichts, egal wie lange er läuft.
Stellt man dagegen den Fifo von &HCA83 auf &HCA87 (alles empfangen), so
erhalte ich als Signal rauschen, also irgedwelche wilden Buchstaben,
ohne Muster.
Das Interessante dabei ist aber nun, dass mit diesen Einstellungen der
Empfänger spürt, wenn der Sender eingeschaltet wird. Das ist deutlich
sichtbar an Lcd, Diode oder Monitor. Der Empfänger spürt auch das
Einschalten durch drei Stockwerke hindurch. Aber er empfängt nur
Nullen, während der gesamten Zeit, in der der Sender an ist. Ist dieser
aus, wird wieder Rauschen aufgenommen.
In einem Forum habe ich gelesen, dass manche Codebeispiele, nur für
ältere Versionen von Bascom funktionieren, aber geholfen hat mir das
nicht.
Mittlerweile gehen mir einfach die Ideen aus. Vielleicht hat hier jemand
das gleiche Problem. Ich würde mich sehr über eine Antwort freuen.
Grüße,
Peter Hacke
Eine leere ZIP-Datei ist schon mal kein toller Anfang.
Das &HCA87 schaltet die Sync-Erkennung ab, damit ist der FIFO praktisch
immer offen.
Peter Hacke schrieb:> Aber er empfängt nur> Nullen, während der gesamten Zeit, in der der Sender an ist.
Damit dürfte klar sein das du auch nur Nullen sendest. Somit kommt auch
nie ein Sync-Wort beim Empfänger an.
Hallo,
Entschuldigung wegen dem leeren Anhang. Jetzt sollte alles drin sein.
Die Bedeutung des &HCA87 ist mir klar. Die Commands habe ich mit dem
RFM12_EVA Comand Generator erstellt, bzw. von vorhandenen Programmen und
Datenblättern übernommen.
Viele Grüße,
Peter Hacke
Hat niemand eine Idee? Vielleicht könnte jemand, der auch die
Pollinboards hat, mein Programm testen, oder mir seins schicken.
Das würde mir schon sehr helfen.
Leider kenne ich mich mit Bascom und AVR gar nicht aus.
Ich hab das Beispiel von Benedikt aus deinem 2. Link auf PIC C18
umgesetzt und einige Anwendungen damit laufen.
Ich verwende die Initialisierungen aus dem Link immer noch 1:1 und auch
Software SPI, dann ist es einfacher einfach mal ein paar andere PINs zu
verwenden, die gerade frei sind.
Die Berechnung der Baudrate hab ich nicht hinbekommen und hab das durch
switch mit festen Werten ersetzt.
Ich würde dir raten nimm nochmal die Initialisierungen aus dem Link,
setze die Baudrate nicht so hoch (ich verwende nur 4800 Baud), teste ob
die Kommunikation läuft (CLK ändern).
Holger
Hallo Peter
Ich habe dein Programm die Tage mal getestet und festgestellt, das
dauernd Verkehr auf deinem SPI Bus ist. Ich hatte nicht viel Zeit und
keinen Mega 32.
Erhöhe mal den Softwarestack und schaue mit dem Ozi die Ports an.
mit den Overlay Variablen würde ich Abstand nehmen.
Schau dir mal High & Low in der Hilfe an.
Meine Funktionen zum senden sehen so aus
1
' Funktionen zum senden von Daten an das RFM 12
2
Sub Rf_data(byval Sdi_byte As Byte) 'wait for TX FIFO IRQ
3
Bitwait Nirq , Reset 'warten bis bereit
4
Sdi(1) = &HB8 'wir senden Daten
5
Sdi(2) = Sdi_byte 'Datenbyte
6
Spiout Sdi(1) , 2
7
End Sub
8
9
' Funktion zum senden von Befehlen an das RFM12
10
Sub Rf_cmd(byval Tmp As Word)
11
Cmd(2) = Low(tmp)
12
Cmd(1) = High(tmp)
13
Spiout Cmd(1) , 2
14
End Sub
sdi & cmd sind Arrays.
Ich bekomme die Daten in einem Interupt
1
Spiin Fifo(1) , 2 '1 Byte senden & 1 Byte lesen
2
byte_recived = Fifo(2) 'das gelesene Byte liegt an 2. Stelle
Siehe dir dazu mal den spi config befehl an, besonders den letzten
Parameter in der Zeile
1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 64 , Noss = 0 , Spiin = &HB0
Die Änderung der Baudrate hat nichts gebracht. Alles unverändert.
Ich werde mir nun den Vorschlag von Dieter ansehen. Das mit High und Low
hab ich denk ich soweit verstanden. Dein Vorschlag ist ja so ähnlich wie
die Programme aus dem dritten Link von meinem ersten Post.
Wollte dich auch nur unterstützen nicht den Mut zu verlieren.
Die Dinger funktionieren wenn man sie einmal beherrscht !
Für PIC habe ich Beispiele da.
Holger
Hallo,
Oh heut ist ein guter Tag...
Ich habe noch bisschen rumgespielt mit den Beispielen aus dem Bascom
Forum und siehe da, es läuft. Die Sende- und Empfangsfunktionen sind
ähnlich wie die von Dieter.
Nochmal herzlichen Dank, an alle, die mir geholfen haben.
Peter Hacke schrieb:> Die Sende- und Empfangsfunktionen sind ähnlich wie die von Dieter.
Vielleicht kannst du deinen funktionierenden Code noch hier posten,
damit andere mit ähnlichen Problemen an deinem Erfolg Teil haben können.
Kein Problem.
Im Anhang die beiden (bei mir) funktionierenden BASCOM-Programme. Ich
arbeite mit einem Atmega 32 mit dem internen 8 MHz Takt und den 433 MHz
RFM12 Modulen (5V). Alles befindet sich auf einem Pollin-Funk-Board und
ist auf die entsprechenden Pins angepasst.
Autor des Originalprogramms ist Holli, hier nochmal der Link:
http://bascom-forum.de/showthread.php?1600-RFM12-Codebeispiele&highlight=rfm12+codebeispiele
Ich habe den Code auf die 433 MHz angepasst (Initialisierung von &H80e7
auf &H80d7 umgestellt) und ein paar kleine Sachen verändert, meist mit
Kommentar.
Für die Erstellung der Commands kann ich den "RFM12_EVA Comand
Generator" sehr empfehlen.