Forum: Mikrocontroller und Digitale Elektronik RFM12 Module


von Stefan N. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich brauch Eure Hilfe. Ich versuche schon den ganzen Tag diese RFM12 
Module zum laufen zu bekommen. Aber überall gibts anderen Code, andere 
Anschlussbelegungen und da ich Neuling bei Bascom bin, seh ich nicht 
wirklich durch bei den Beispielcodes.

Ein wenig zu mir:
Ich habe mich früher viel mit den Pics rumgeschlagen, aber wurde nie 
richtig warm mit ihnen. Zu mehr als ein wenig Leds blinken lassen, hat 
nie gereicht. Jetzt bin ich auf die AVRs und Bascom umgestiegen und 
siehe da, mit dem ganzen komme ich nun gar richtig klar. Kleine 
Lochraster-Experimentierplatine existiert mit Atmega8 und 4 Mhz extern, 
an dem inzwischen ein 2x16 Display, Max232+Schnittstelle und DCF77 
Empfänger hängt. Das erste Projekt, die DCF Uhr mittels der Bascom 
eigenen Routine lief recht schnell und ohne große Probleme.

Nun will ich Daten per Funk senden. Conrad hat ja für 16 Euro etwa ein 
Set 433 MHZ AM im Angebot. Sender und Empfänger. Wäre schön einfach da 
hier der Atmega8 selbst alles machen müsste. Pollin hatte aber auch die 
RFM Module von denen ich nun 2 RFM12 und je ein 01 und 02 Modul hier 
habe. Und an diesen RFM Modulen verzweifle ich langsam.

Ein RFM12 Modul ist bereits auf der Experimentierplatine verbaut, ein 
zweites auf einer neuen Platine. Ebenfalls Atmega8 4Mhz. Pins:
Pd5 = SDO ; PD6 = NSEL ; PD7 = SCK und PB0 = SDI. Pins bei Sender und 
Empfänger sind gleich. VDD an +5V und GND natürlich an - der 5V 
Spannungsquelle. Die restlichen Pins der RFM12 Module sind offen. Die 
Cods für Sender und Empfänger habe ich angehangen. Wäre cool wenn mir da 
jemand weiter helfen könnte. Die Cods habe ich bei meiner langen Suche 
im Netz aufgeschnappt und soweit modifiziert das die empfangenen Daten 
aufs Display ausgegeben werden.

Wenn ich damit garnicht klar komme, nehm ich echt die AM Module und 
zerleg die Bytes einfach in 0 und 1 Impulse die der Empfänger dann eben 
wieder zusammen addiert und weiter verarbeitet.

von holger (Gast)


Lesenswert?

>Wenn ich damit garnicht klar komme, nehm ich echt die AM Module und
>zerleg die Bytes einfach in 0 und 1 Impulse die der Empfänger dann eben
>wieder zusammen addiert und weiter verarbeitet.

So einfach wird das mit den billigen Modulen aber nicht.
Die Empfänger geben eine Art Rauschen aus wenn kein Träger da ist.
Das machen sie auch wenn der Träger zu lange steht. Das wird
noch viel komplizierter als mit den RFM12.

von enager (Gast)


Lesenswert?

Ok, dann muss ich mich da wohl durchfuchsen ;). Hab mal ne nette Seite 
gefunden die mir echt was weiter helfen könnte, weil dort auch die 
Hardware-Spi von den Anschlüssen her aufgezeigt ist. 
http://comwebnet.co.funpic.de/seite48.html

Aber heute nicht mehr. Morgen ist auch wieder viel Zeit. Gut das ich 
noch krank geschrieben bin :D.

von Holger W. (holgerw)


Lesenswert?

>>>Die restlichen Pins der RFM12 Module sind offen.

FSK muss noch mit ca. 10k an VCC.

Ob die Kommunikation zum RFM12 grundsätzlich passt kann man durch 
umschalten der CLK Frequenz von 1 auf 10Mhz feststellen bzw. auschalten, 
sofern man das messen/anzeigen kann.

Holger

von Stefan N. (Gast)


Lesenswert?

Moin,

erstmal Danke für die Tipps.
Ich bin jetzt erstmal beim grundsätzlichen Studium des SPI-Ports.
http://www.uni-koblenz.de/~physik/informatik/MCU/SPI.pdf
Sehr interessantes Dokument. Klärt erstmal über die verwendeten Pins, 
deren Bedeutung und wie SPi allgemein funktioniert auf was mir erstmal 
beim Verständnis des SPI sehr hilft.

von Stefan N. (Gast)


Lesenswert?

Juti, erstmal alles auf Hardware-Spi umgelötet. Damit fällt aber der 
Code von gestern weg, weil der auf die Pins per Alias zugreift. Schmeiß 
ich die Deklaration dafür raus weil ja nun Hardware-Spi, jammert der 
natürlich rum das er mit NSEL und Co nix anfangen kann.

Was ich suche ist irgendein Code für Sender --- und --- Empfänger. 
Irgendwas der Art:

SPI = HardwareSPI
Quarz = 4 Mhz
Baud = 4800
dim senden as byte
dim empfangen as byte

senderoutine:
 print "Wert eingeben"
 inkey(senden)
 rfm12_sende(senden)
 print "Wert gesendet"

empfangsroutine
 if empfangen <> 0 then
 print "empfangen: " , empfangen
 end if

Bisher hab ich die RFM Module so verstanden das die ihren eigenen 
Controller gleich auf der Platine mitbringen und daher auch in der Lage 
sind ganze Bytes zu senden. Also Zahlen bis 255 statt nur Bits wie es 
die analogen AM Module tun. Vielleicht hat jemand einen Code wo gut 
ersichtlich ist welche Variable die Daten zum Senden aufnimmt und welche 
Variable die empfangenen Daten enthält... Weil ich seh da nicht 
ernsthaft durch bei den bisher gefundenen Codes.

von HolgerW als Gast (Gast)


Lesenswert?

Der Code von Benedikt hier im Forum ist gut, aber in C.
Den hab ich für PIC umgesetzt. Ob es was fertiges für Bascom gibt, k.A.
Oszi ist für die Fehlersuche zu empfehlen.
Hardware SPI würde ich nicht empfehlen. Mit Software hat man die Bits 
besser unter Kontrolle.
Wie schon gesagt, versuch die Kommunikation zum RFM12 hinzubekommen und 
schalte den Takt an CLK ein  aus  um (was du messen müsstest), damit 
weisst du ob das erstmal läuft.

Holger

von Stefan N. (Gast)


Lesenswert?

Holger, ich Danke Dir. Ich werde es mal probieren. Das mit dem Takt, ich 
hab zwar kein Oszi hier, aber theoretisch müsste wenn der Takt da ist 
mein Spannungsmessgerät eine Wechselspannung anzeigen und wenn kein Takt 
da ist, logisch 0V.

von Labelohase (Gast)


Lesenswert?

du bekommst keine W-spannung sondern nur H / L

von avrGerd (Gast)


Lesenswert?

Hier ein Auszug aus dem Header, welchen ich damals als Grundlage benutzt 
habe:
'info about using RF12 with Bascom: www.comwebnet.de
'Version: v0.01
'Author:  Kurzschluss

Da gibt es Routinen zum Senden und Empfangen.

Bei mir hat die Konfiguration der Module nicht richtig hingehauen, da 
musste ich was anpassen.

Hier meine Sub:
1
Sub Rfm12_init
2
  Waitms 150
3
  Temp = Rfm12_trans(&H0000)                                'Status auslesen
4
  Print "init Status: " ; Bin(temp)                         'Status ausgeben
5
  Temp = Rfm12_trans(&Hc0e0)                                ' CLK divider by 10, but not used
6
  Temp = Rfm12_trans(&H80e7)                                ' El , Ef , 12pf, 868 MHz band
7
'  Temp = Rfm12_trans(&Ha67c)                                ' 868,3 MHz (F=1660)
8
  Temp = Rfm12_trans(&Ha743)                                ' 869,3 MHz (F=1860)
9
  Temp = Rfm12_trans(&Hca81)                                ' Fifo8 , Sync , !ff , Dr => clear FIFO
10
  Temp = Rfm12_trans(&He000)                                ' wakeup off
11
'  Temp = Rfm12_trans(&Hc2e9)                                ' Clock recover fast mode, digital filter (00)
12
  Temp = Rfm12_trans(&Hc2ab)                                ' Clock recover fast mode, digital filter (10)
13
  Temp = Rfm12_trans(&Hc800)                                ' low duty cycle off
14
  Temp = Rfm12_trans(&Hc4f7)                                ' AFC on, +3/-4 fres deviation
15
'  Temp = Rfm12_trans(&Hc4c7)                                ' AFC on, no restriction
16
  Temp = Rfm12_trans(&H9455)                                ' RX bandwidth 340kHz
17
'  Temp = Rfm12_trans(&Hc622)                                ' 9600 baud
18
  Temp = Rfm12_trans(&Hc611)                                ' 19200 baud
19
  Temp = Rfm12_trans(&H9865)                                ' power 0db, 120kHz TX deviation
20
End Sub

Gruß, avrGerd

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.