PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RFM01 /02 Modul korrekt angeschlossen?



apohero
13.03.2008, 16:47
Hallo,
und bitte nicht steinigen da ich mir das RFM01/02 und nicht das RFM12 Modul geholt habe. Nun zur Sache: Ich habe eine Schaltung realisiert die mir Temperatur und Geschwindigkeitsdaten ausliest und an ein Display übergibt. Funktioniert auch alles nun will ich die Sensorik + Atmega8 und das Display mit Atmega8 über das Funkmodul kommunizieren lassen. Ich habe mir das C Beispiel von Pollin durchgelesen, darin steht auch die Beschaltung der Pins:
Pinbelegung RFM01
-----------------------
ATMEGA8 RFM01
-----------------------
SCK SCK
MISO SDO
MOSI SDI
SS nSEL
INT0 nIRQ
PD5 LED2
PD6 LED1
PD4 Module-Power

Das hier GND und VDD nicht aufgeführt sind verstehe ich noch aber was ist mit der DATA Leitung? Darüber laufen doch die eigentlichen Daten, oder?
Was mich noch wundert ist die "Module-Power" <- Was soll das sein und brauche ich das? DIe Leds hab ich weggelassen.

Nun noch 2 Fragen die mich beschäftigen: Warum hat das RFM02 Modul 6x GRND ? Und, kann ich nicht auch 2 Tiny2313 anschliessen, oder geht das nicht weil denen "SS" fehlt ?


Ich entschuldige mich falls diese Fragen zu stupide sind, aber ich habe mich noch nie mit Funkmodulen beschäftigt.

Vielen Dank im Vorraus

Defiant
14.03.2008, 09:41
Hallo,

Keine Sorge: So doof, wie du dich gerade fühlst, bist du nicht:
Der Wischlappen, den Pollin mit dem Modul ausliefert ist leider genau das: Unvollständig und enthält Fehler.

Glücklicherweise haben schon genug leute Arbeit reingesteckt, um dieses Modul zum funktionieren zu bewegen:
http://www.mikrocontroller.net/articles/AVR_RFM12

Irgendwo hier gibt es auch Hinweise für die Varianten ohne Fifo:
http://www.mikrocontroller.net/topic/67273

Aber mit der richtigen Dokumentation sind diese Module eine echte Wunderwaffe.

apohero
25.03.2008, 15:39
So ich habe jetzt schonmal den Code für den RFM02 in bascom abgeändert, Funktioniert scheinbar aber nicht einwandfrei. Hab mittels einer LED getestet wie weit er kommt. Er geht bis zum anfang der Rf12_init funktion und dann wars das. Und ich weiß nicht warum. Hier der Code:



' generated. Take care that the chip supports all fuse bytes.' ################################################## ######################
' ### RF12-Test in Bascom
' ### Basiert auf Code von Benedikt K.
' ### Joachim Fossie Bär Reiter 04/2007
' ################################################## ######################


$regfile = "m88def.dat"
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 40

'$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.

$crystal = 8000000
$baud = 19200
Baud = 19200

Declare Sub Rf12_init
Declare Function Rf12_trans(byval Wert As Word) As Word
Declare Sub Rf12_setfreq(byval Freq As Single)
Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
Declare Sub Rf12_setbaud(byval Rfbaud As Long)
Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
Declare Sub Rf12_ready
Declare Sub Rf12_txdata(byval Maxchar As Byte)
Declare Sub Rf12_rxdata(byval Maxchar As Byte)

Const Rf12freq = 433.92
Const Rf12baud = 19200
Const Maxchar = 32

'config the SPI in master mode.The clock must be a quarter of the slave cpu
' Hier ggf. den SoftSPI reinmachen
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1

' werden benötigt für rf12_ready
Spi_cs Alias Portb.2 ' SS-Pin
Config Spi_cs = Output
Spi_sdo Alias Pinb.3 ' MOSI-PIN
Set Spi_cs
Config Portc.4 = Output
Led Alias Portc. 4
Led = 1
'init the spi pins
Spiinit

' was so gebraucht wird
Dim Count As Byte
Dim Temp As Word
Dim Rfdata(32) As Byte
Dim Text As String * Maxchar At Rfdata Overlay

Print "Init"
Waitms 1000
Call Rf12_init ' ein paar Register setzen (z.B. CLK auf 10MHz)


' ################################################## ######################
' ###### Hauptproggi
' ################################################## ######################
Waitms 1000
Led = 0
Waitms 1000
Text = "Dies ist eia 433MHz Test !!!!!{013}{010}"

' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
Do 'Ewigschleife


' Hier ist die Senderoutine
Print "Sende"
Call Rf12_txdata(maxchar)

Wait 1
Toggle Portc.4

Loop


End 'end program


' ################################################## ######################
' ###### Unterroutinen
' ################################################## ######################

Sub Rf12_init:
Toggle Portc.4
Waitms 1000
Temp = Rf12_trans(&Hcc00)
Toggle Portc.4
Waitms 400
Temp = Rf12_trans(&H8b61)
Toggle Portc.4
Temp = Rf12_trans(&Ha640)
Toggle Portc.4
Temp = Rf12_trans(&Hd040)
Toggle Portc.4
Temp = Rf12_trans(&Hc823)
Toggle Portc.4
Temp = Rf12_trans(&Hc220)
Toggle Portc.4
Temp = Rf12_trans(&Hc039)
Toggle Portc.4
End Sub



Sub Rf12_txdata(byval Maxchar As Byte)
Temp = Rf12_trans(&H8238)
Rf12_ready
Temp = Rf12_trans(&Hb8aa)
Rf12_ready
Temp = Rf12_trans(&Hb8aa)
Rf12_ready
Temp = Rf12_trans(&Hb8aa)
Rf12_ready
Temp = Rf12_trans(&Hb82d)
Rf12_ready
Temp = Rf12_trans(&Hb8d4)
Rf12_ready
For Count = 1 To Maxchar
Rf12_ready
Temp = &HB800 + Rfdata(count)
Temp = Rf12_trans(temp)
Next Count
Rf12_ready
Temp = Rf12_trans(&H8208)
End Sub





Function Rf12_trans(byval Wert As Word) As Word
Local Lowbyte As Byte
Local Highbyte As Byte

Lowbyte = Wert And 255
Shift Wert , Right , 8
Reset Spi_cs

Highbyte = Spimove(wert)
Lowbyte = Spimove(lowbyte)
Set Spi_cs

Temp = Highbyte * 256
Temp = Temp + Lowbyte
Rf12_trans = Temp
End Function


Sub Rf12_ready
Reset Spi_cs
While Spi_sdo = 0
Wend
End Sub

Defiant
25.03.2008, 18:16
Wahrscheinlich das Modul nicht korrekt Verkabelt. Wie sieht deine momentane Verkabellung aus? Pullup dran?

apohero
25.03.2008, 18:40
ich hab an die Data Leitung einen 10k Widerstand und dann an Vcc. Andere Widerstände habe ich nicht verbaut.

Defiant
25.03.2008, 18:57
Pullup ist korrekt.
Ansonsten sind nur SDO, SEL, SCK, SDI angeschlossen?
-Dann ist alles richtig.

Das sich der trans-Routine aufhängt hatte ich, als ich den Pullup vergessen hatte.

Du benutzt bascom, was natürlich gefährlich ist, da der fifo-Kram aus dem rf12 Code rausgeworfen werden muss.

Zuerst würde ich den C-Code kurz testen. Wenn der funktioniert kannst du zumindest davon ausgehen, daß es nicht an der Hardware liegt.

apohero
25.03.2008, 19:20
Die SDO, SEL, SCK, SDI Leitungen sind alle so angeschlossen wie sie im comwebnet stehen.
Inwiefern ist der Fifo Kram gefährlich? Das habe ich nicht verstanden.
Ja, den C Code testen...... Mit C habe ich den Mikrocontroller noch nie Programmiert, hab also kein Programm dafür. Ich würde also jede andere Bascom Lösung vorziehen.

Ich will für den anfang nur ein einfaches Bascom Programm welches mir am Empfänger eine LED ein und aus schaltet.

Defiant
25.03.2008, 19:24
Weil die RFM01/02 im Gegensatz zu dem RFM12 keinen FIFO haben.

apohero
25.03.2008, 19:32
aha............................................... ...............

apohero
25.03.2008, 19:35
das wußte ich noch nicht. Das erklärt einiges. Dann kann das modifizierte RFM12 Programm auch schlecht funktionieren wenn ich das richtig sehe. Dann werde ich wohl erstmal auf meine RFM12 866mhz Module warten bevor ich mich weiter in arbeit stecke und die RF01/02 Module eintüten.

apohero
25.03.2008, 20:50
hmm in der Beschreibung des RFM01 steht aber was von einem 16bit Fifo. Also geht es also doch?

Defiant
25.03.2008, 21:02
ok stimmt. Hab mir eben die (richtige) Doku nochmal vorgenommen. Der 02er ist der einzige ohne fifo.

apohero
25.03.2008, 21:04
ja der RFM02 ist ja der Sender. Der brauch anscheinend keinen FIFO.

BurningWave
30.03.2008, 18:56
Kann man die Funkmodule auch an AtTiny2313 Microcontroller anschließen, weil die kein SS Anschluss haben???

Bitte helft mir.
mfg _R2D2

Defiant
30.03.2008, 19:03
http://www.mikrocontroller.net/articles/AVR_RFM12 hast du dir schon angeschaut, ja?

apohero
30.03.2008, 20:12
Es soll mit den Tiny 2313 gehen und auch mit dem 45er. Schau mal bei mikrocontroller.net .
Was ich bräuchte wären Codes für den RFM01 und für den RFM02 . BITTTE !!!!
ich wäre echt dankbar wenn den jemand hier posten würde. Achja Bascom sollte es sein. Von C nach Bascom umschreiben klappt bei mir nicht. Es muss aber doch schon einer mit Bascom geschafft haben.

Mit dem Fifo hab ich es noch nicht verstanden. In den Datenblättern steht was von fifo aber in den Foren schreiben viele es gäbe das nur bei dem RFM12 und die RFM01/02 müsste man Bitweise schicken.

wkrug
30.03.2008, 23:20
Mit dem Fifo hab ich es noch nicht verstanden. In den Datenblättern steht was von fifo aber in den Foren schreiben viele es gäbe das nur bei dem RFM12 und die RFM01/02 müsste man Bitweise schicken.
Also der RFM02 ist der Sender, er hat keinen FiFo.
Der RFM02 kan prinzipiell in 2 Modi laufen.
1. Man benutzt den internen Baudrategenerator des RFM02, dann wird nach jedem Bit ein Interrupt ausgelöst, der das nächste Bit anfordert.
2. Man benutzt den USART des Controllers und versendet damit seine Daten.

Der RFM01 ist der Empfänger. Dieser hat einen FiFo den man aber auch abschalten kann.
Ab wann das Modul Daten in den FiFo schreibt wird durch ein VDI Signal gesteuert, dessen Triggerquellen wiederum Programmierbar sind.
z.B. minimaler Empfangspegel überschritten + Startbytes empfangen.

Der FiFo ist ein kleiner Zwischenspeicher der z.B. 8Bit aufnehmen kann ( programmierbar ) und dann einen Interrupt auslöst.
Das entprechende Bit kann aber auch gepollt werden.
Der Controller kann sich dann den Inhalt des FiFo auslesen und hat ein komplettes Byte für die weiterverarbeitung zur Verfügung was ja sehr praktisch ist.

Durch das " Schloß " mit dem VDI kann man während der Sendepausen Störsignale wirksam ausfiltern, die im non FiFo Mode gnadenlos beim Controller ankommen würden.

Mit dem RFM12 hab ich nocht nichts gemacht, er vereinigt aber meines Wissens die Funktion des RFM 01 und des RFM 02 auf einem Chip.

Ich habs schon ein paarmal hier im Forum geschrieben - die Dokumentation der Bausteine bei Pollin ist wirklich bescheiden.
Hat man aber erstmal die funktionsweise der Bausteine begriffen, sind die Dinger echt super.

apohero
31.03.2008, 09:48
aha. jetzt begreife ich es.
Du hast ja anscheinend nur mit dem RF01/02 zu tun. Hast du es mit bascom Programmiert oder in C?

wkrug
31.03.2008, 19:30
@apohero
Mein Quellcode ist in "C" für den CODEVISION AVR Compiler.

Allerdings hab ich den nicht von der Pollin Page verwendet, sondern meinen Eigenen entwickelt.

BurningWave
31.03.2008, 21:09
Was spricht denn so gegen C?

Du kannst doch einfach den Beispiel C Code von Pollin compillieren und die .hex Datei brennen. Dazu musst du nicht in C programmieren können.

mfg

wkrug
01.04.2008, 20:07
Was spricht denn so gegen C?
Du kannst doch einfach den Beispiel C Code von Pollin compillieren und die .hex Datei brennen. Dazu musst du nicht in C programmieren können.
Gegen "C" spricht mal grundsätzlich überhaupt nichts.
Trotzdem haben verschiedene Compiler auch verschiedene Dialekte.
Den Code von Pollin könnte ich so nicht direkt compilieren.
Der P... Code lässt die RFM Module in einem anderen Modus laufen, als er für micht nützlich war, zum anderen soll der Code auch Fehler enthalten ( das hab ich nur vom Hörensagen ).
Als nächstes wollte ich eine Kanaleinstellung, welche beim Beispielcode nicht integriert war.
Bevor ich mich dann tagelang mit einem mir unbekannten Code rumschlage um ihn zu debuggen, schreib ich mir lieber gleich selber was.
Ausserdem werd ich mit selbst geschriebenem Code keine Lizenz Probleme kriegen.

thewulf00
28.04.2008, 13:52
Hi wkrug - ist denn Dein Code irgendwo erhältlich oder ist er geheim?

wkrug
29.04.2008, 16:37
@thewulf00
Du hast PN !

BurningWave
30.04.2008, 17:57
Ich schreibe gerade auch ein Programm für die RFMxx Module. Könnte ich den Code bitte vielleicht auch haben?

mfg _R2D2