www.mikrocontroller.net

Forum: Codesammlung Beispielprogramm für RFM12 433MHz Funk-Module

Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 10:27
Dateianhang: rfm12.zip (2,3 KB, 3295 Downloads)

Dieses Programm steuert ein RFM12 Funkmodul an, und sendet/empängt einen
Datenblock einstellbarer Länge. Es ist keine Fehlerkorrektur oder
ähnliches vorhanden.
Die gesamte Hardwareansteuerung wird von der Software in der RF12.c
erledigt, ebenso das Ein/Ausschalten von Sender und Empfänger.
Man muss also nur das Modul initialisieren, die ganzen Parameter
einstellen und kann direkt senden oder empfangen.
Der Takt am CLK Pin ist auf 10MHz eingestellt, damit man damit z.B. den
AVR damit versorgen kann.
Um den Schaltungsaufwand klein zu halten, benutze ich nicht den
Interrupt Pin sondern Polle das Interrupt Bit im Status Register.
Dadurch kommt man mit nur 4 Pins aus (SPI + Chipselect). Da alles ohne
speziellen Hardwarefunktionen läuft, sollte die Software auf jedem AVR
(mit SRAM) lauffähig sein.
Der FSK/DATA/nFFS Pin muss über einen Pullup (z.B. 1-10k) an VDD gelegt
werden, damit alles richtig funktioniert. Alle anderen, in der Software
nicht aufgelisteten IO Pins des Moduls, werden auf Ausgang geschaltet
und brauchen daher nicht angeschlossen zu werden.

Die meisten der Einstellungen habe ich irgendwo in die Mitte gesetzt.
Für eine optimale Datenrate und Reichweite muss man mit Sicherheit noch
ein paar Details anpassen.
Autor: Bascom Jünger (Gast)
Datum: 16.04.2007 11:46

Heul,
schade nicht in Bascom.
Könnte es ein C-Versteher den Code in Bascom übersetzen, oder wenigstens
ein Flußdiagramm schreiben.
Hätte vielleicht auch ein ASM-Freak was davon.
Bitte bitte
Autor: 433MHz-Frager (Gast)
Datum: 16.04.2007 12:39

Hallo,
meine Module sind leider noch nicht da :-/
Ich habe mir gerade mal Dein Programm angesehen und frage mich gerade
warum Du bei "void rf12_init(void)" :
for (unsigned char i=0; i<10; i++)
    _delay_ms(10);  
statt z.B.:
    _delay_ms(100);  
genommen hast ?
Denke mal Du hast einfach solange probiert, bis die passende Delay-Zeit
erreicht war ?
Ich habe einige hahnebüchene Fehler in den Code-Beispielen bei Pollin
und Hope entdeckt :-?
Woher hast Du Deine Infos ?
Aus den Hope-Datenblättern, die sind ja auch ziemlich neben der Reihe
:-?
Ich wollte mit einem RFM01 und RFM02 eine kleine Funkfernsteuerung
bauen.
Jetzt Frage ich mich, ob Dein Code auch auf einem Tiny13 läuft oder zu
groß wird ?
In Assembler bin ich nämlich nicht so fit :-P
Danke für Deinen Code ;-)
Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 13:01

Der Grund wiso delay(100ms) nicht funktioniert:
Delay ist eine Schleife mit 16bit Zähler. Diese kann je nach CPU Takt
nicht länger als einige 10ms werden. Bei 20MHz sind daher nur 13,1ms
möglich.

Falls die Software nicht richtig laufen sollte: Eventuell muss die Delay
Zeit vergrößert werden, denn 100ms braucht das Modul nach dem
Einschalten bis es Befehle ausführen kann.

Die Datenblätter von den Modulen und die Beispielcodes sind nahezu
kompletter Mist.
Programmiert habe ich das ganze nach den Datenblättern der einzelnen
ICs, die weitaus besser und vor allem fehlerfreier sind:
http://www.hoperf.com/pdf/RF01.pdf
http://www.hoperf.com/pdf/RF02.pdf
http://www.hoperf.com/pdf/RF12.pdf

Das RFM12 Programm hat nicht ganz 800Bytes (RFM12 Routinen + main mit
Initialisierung auf einem tiny2313). Der Code ist nicht auf Codegröße
optimiert, sondern so dass es erstmal funktioniert. Da kann man mit
Sicherheit noch einiges verbessern.
Die RFM01 und RFM02 Routinen sind etwas kleiner, da bei diesen ja nur
Senden oder Empfangen benötigt wird.
Autor: 433MHz-Frager (Gast)
Datum: 16.04.2007 14:00

Danke für die Erklärung und die Datenblätter ;-)
Soweit ich das jetzt verstanden habe, müßte ich den RF02-Sender mit zwei
Steuerleitungen SCK und MISO betreiben können, da es nur einen Sender
gibt kann ich doch nSel direkt auf GND legen, sowie FSK mit Pullup gegen
Vcc.
Oder übersehe ich da was ?
Meine Idee ist im Tiny13 den aktuellen Zustand des zu steuernden Geräts
zu speichern und kontinuierlich abzusenden.
Ich denke diese Lösung ist am sichersten ;-)
Oder gibt's da bessere Varianten ?
Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 14:27

Bei dem RF02 Sender ist das etwas komplizierter: Im Gegensatz zum RF12
besitzt dieser kein Sende FIFO. Man muss die Bits also im Takt der
Baudrate entweder an den FSK oder an den SDI Pin legen (ist per Befehl
umschaltbar). Den FSK Pin braucht man also nicht unbedingt, aber der
SDO/IRQ Pin ist notwendig, denn an diesem gibt der RF02 den Takt der
Baudrate an. Bei jeder fallenden Flanke von diesem wird das Bit an FSK
oder SDI eingelesen und gesendet.
Momementan polle ich die Leitung noch, später möchte ich das aber per
Interrupt oder per USI/SPI im Slave mode machen, denn der IRQ Pin ist
nur für 1,6us high. Wenn da ein Interrupt dazwischen kommt, gehen Bits
verloren.
nSEL kann man nicht auf GND legen, denn damit wird u.a. die Übertragung
beendet.

Ich habe gerade eine Testplatine mit einem RF02 aufgebaut, im Laufe des
Tages werde ich also die Software dafür fertig testen können und diese
dann hier rein stellen.
Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 15:28
Dateianhang: rfm02.zip (2,1 KB, 1236 Downloads)

Hier nun dasselbe für den RF02 Sender. Funktioniert ähnlich, ist aber
etwas einfacher (da nur Senden), und kleiner (rund 650Bytes inkl main).
Ein Nachteil hat das ganze aber: Während die Senderoutine läuft, darf
kein Interrupt auftreten, also Interrupts während dem Senden abschalten.
Eine bessere Lösung wäre, die Senderoutine selbst teilweise in einen
Interrupt zu packen (USI, SPI, INT), aber das würde dann nicht mit allen
AVRs funktionieren, daher erst mal die einfache Lösung.
Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 19:58
Dateianhang: rfm01.zip (2 KB, 1432 Downloads)

Und hier die Software für den Empfänger RF01.
Autor: Dr (Gast)
Datum: 16.04.2007 21:01

Na, da tut sich auch bei Pollin was. Die C-Programme com
Sender/Empfänger sind jetzt vom 16.4.07 8:45.
Autor: Benedikt K. (benedikt)
Datum: 16.04.2007 21:15

Oder auch nicht:
Den einzigen Unterschied den ich sehe ist, dass das Wort "Pinbelegung"
hinzukam.
Autor: jonny (Gast)
Datum: 16.04.2007 21:23

verkauf ihnen doch deine Verion xD
Autor: Sven Günther (s705081)
Datum: 16.04.2007 22:32

Hallo Benedikt,

sag mal wo kommt bei dir die utils/delay.h her? Ist das aus einer avr
clib?

Gruss Sven


Autor: Benedikt K. (benedikt)
Datum: 17.04.2007 07:31

Die ist beim Libc vom AVR GCC dabei.
Autor: Thomas Kropf (thomas_k)
Datum: 17.04.2007 21:04

Sorry für die dumme Frage aber was genau hat jetzt rfm01 und rfm02 mit
dem rfm12 Modul von Pollin zu tun?
Autor: 433MHz-Frager (Gast)
Datum: 17.04.2007 22:29

@ Thomas Kropf:
Alle drei Module gibt es bei Pollin ;-)
RFM01 & RFM02 für 4,95 Teuronen
RFM12 für 7,95 Teuronen
Auf dem RFM01 und RFM12 sind Chips mit FIFO verbaut und (Danke Benedikt)
der Sender RFM02 hat leider keinen :-/
Aber alle Chips haben identische Kontrollparameter ;-)
Hoffe das meine Bestellung bald mal ankommt, zum Basteln und Testen ;-)
Bin schon ganz kribbelig mal zu probieren ob meine Ideen auf 100m Sicht
funzen :-P
Autor: Thomas Kropf (thomas_k)
Datum: 17.04.2007 22:44

Aaah, danke!

Ich bin noch stark am Überlegen.
Vor allem wieviele Stück (wenn dann nur rfm12) ich mir zulegen soll. Ich
kann leider schwer einschätzen wie "gut" die Dinger wirklich sind.

Pollin wird wohl auch nicht ewig diese Module verkaufen. Deswegen würde
ich mir gleich einen kleinen Vorrat zulegen wollen.

Wenn ich irgendwann mal eine von diesem MCA-25 Kameras wo billig
ergattern würde dann wär die Kombination von Funkübertragung und Kamera
ein Traum (ich weiß es würde lange dauern aber das wäre egal) :)
Autor: Sven Günther (s705081)
Datum: 18.04.2007 18:46

@ Benedikt

das mit der Library hat sich grade aufgeklärt, meine war etwas veraltet.

Gruss Sven
Autor: bastelbär (Gast)
Datum: 20.04.2007 13:54
Dateianhang: rf12.zip (1,6 KB, 928 Downloads)

Hi, da ich die Teile auch bestellt habe, habe ich mir schon mal den Code
von Benedikt auf BASCOM angepasst. Ich weiss allerdings nicht ob er so
funktioniert, jedenfalls kompiliert er ohne Fehler.
Damit der/die BASCOM-Jünger auch was mit den Funkmodulen machen können
poste ich ihn mal. Aber ohne Gewähr, nur als Anregung zu verstehen
Viel Spass damit

  Fossie
Autor: Reinhard Max (rmax)
Datum: 20.04.2007 18:38

Hi,

vielen Dank an Benedikt für die Bibliotheken!


Hier noch ein kleiner Optimierungsvorschlag für die Funktion
rf12_trans():

Während das auszugebende Wort am "High-Ende" rausgeschoben wird, kann
vom "Low-Ende" her der Rückgabewert in die gleiche Variable geschoben
werden. Dadurch wird die Variable werti eingespart, es sind nur halb so
viele Schiebeoperationen nötig und der Code wird ein bißchen kleiner.

cu
Reinhard
Autor: Humix (Gast)
Datum: 20.04.2007 18:40

@Bastelbär
Sauber programmiert Respekt
werde es nächste Woche testen

@alle
Muss der AVR zwingend mit 10MHZ takten ?
Autor: Benedikt K. (benedikt)
Datum: 20.04.2007 19:39

Nein, der AVR kann beliebig getaktet werden. 10MHz bietet sich nur an,
das dieser Takt von dem Modul zur Verfügung gestellt wird. So spart man
sich den Quarz. Ein weiterer Vorteil ist auch: Man kann den AVR
dynamisch takten, indem man den Takt bis auf 1MHz reduziert.
Autor: Bascom Jünger Nr12 (Gast)
Datum: 20.04.2007 20:41

@Bastelbär
Respekt auch von mir, wie kommt der AVR denn zum 10 Mhz-Takt?
Hat er hier einen eigenen Quarz?
Bzw. wie wird das verdrahtet?
Vielen herzlichen Dank für den Code !!!
Autor: Uwe ... (uwegw)
Datum: 20.04.2007 21:54

Das Modul gibt die 10MHz an CLK aus. Am AVr speist man sie dann an XTAL1
ein, lässt XTAL2 unbelegt und setzt die Fusebits auf externen Takt.
Autor: Michael (Gast)
Datum: 21.04.2007 16:54

Hallo Benedikt,

hier nochmal in einem anderen Thread die passende Frage.
Bin gerade dabei mal einen Schaltplan zu machen.

Ich lese von dem Pull-Up an dem FSK/DATA/nFFS Pin.
Der Atmel-Port lässt sich doch so programmieren,
das ein interner Pull-Up eingeschaltet wird.
Das weisst Du aber sicherlich.
Warum hast Du dennoch einen externen Pull-Up empfohlen?

Gruss
Michael
Autor: Benedikt K. (benedikt)
Datum: 21.04.2007 17:05

Wiso einen Pin verschwenden, wenn ein Pullup reicht ?
Autor: Michael (Gast)
Datum: 21.04.2007 17:36

Hallo Benedikt,

uups, habe ich da was falsch verstanden?
Benutzt Du ausschliesslich SDI/SDO/SCLK?
Und der FSK/DATA/nFFS Pin ist garnicht mit Deinem Controller verbunden?

Gruss
Michael
Autor: Benedikt K. (benedikt)
Datum: 21.04.2007 17:50

Ja, so in etwa. nSEL braucht man aber noch, also das komplette SPI
Interface: Daten, Takt, Chipselect.

Alle anderen Leitungen wie Interrupt oder nFFS sind optional, wenn man
alles auf maximale Geschwindigkeit auslegt, oder es eben mit einem
Interrupt betreiben möchte.
Autor: Michael (Gast)
Datum: 21.04.2007 17:59

Hallo Benedikt,

ah, mein Fehler.
Ja, das mit der Geschwindigkeit war so mein Hintergedanke.
Danke für die Infos.

Gruss
Michael
Autor: Humix (Gast)
Datum: 22.04.2007 10:43

@Bastelbär  @Alle

Die Bascom Datei von Bastelbär enthält meiner Meinung nach einen Fehler?

Sub Rf12_setfreq(byval Freq As Single)

  Freq = Freq - 430.00
  Temp = Freq / 0.0025
  If Temp < 96 Then
    Temp = 96
  Elseif Temp > 3903 Then
    Temp = 3903
  End If

 Temp = Temp + &HA000    !!!! Diese Zeile fehlt  oder irre ich mich ???

  Temp = Rf12_trans(temp)
End Sub

Kann es leider noch nicht Testen
Autor: bastelbär (Gast)
Datum: 23.04.2007 11:35
Dateianhang: rf12.zip (1,6 KB, 731 Downloads)

@Humix

Hast natürlich recht. Die Zeile fehlt. Wird Zeit das meine Module
endlich kommen damit ich das testen kann.

Korrigierte Verison anbei.

mfg.
    Joachim
Autor: Tobi A. (Gast)
Datum: 24.04.2007 14:20

Hi

Ich hab mir irgendwan bei einer früher AVR GCC version mal einen hass
auf das programm anprogrammiert und meide es seitdem.
Hat irgendwer eine Idee wieviel Aufwand es sein wird das auf Codevision
zu portieren?

Tobi
Autor: Benedikt K. (benedikt)
Datum: 24.04.2007 15:17

Eigentlich kaum Aufwand, da es kaum hardwarenahe Funktionen gibt, die
irgendwas spezielles vom Compiler erwarten.
Es müssen eigentlich nur die #defines passen, dann sollte das Programm
laufen.
Autor: Juppi (Gast)
Datum: 24.04.2007 16:38

Hat jemand schon Erfahrungen mit dem Antennenanschluß gemacht. Wie
sollte diese Antenne optimal beschaffen sein?

gute Zeit wünscht Juppi
Autor: Uwe ... (uwegw)
Datum: 24.04.2007 16:53

Welche Entfernung willst du schaffen? Mit 15cm Draht ist schon einges
machbar...
Autor: Tobi A. (Gast)
Datum: 25.04.2007 01:04

@ Juppi
"Wie sollte diese Antenne optimal beschaffen sein?"

Das hängt von der Anwendung ab.
Sag uns was Du vorhast und wir können Dir eine Antenne empfehlen.
Autor: Andy (Gast)
Datum: 26.04.2007 14:44

Hallo,

Ich habe das Bascom Programm einmal mit einem Mega8 probiert, aber es
will nicht so recht. Ich habe nach der RX-Routine in der for-Schleife
ein "Print rfdata(count)" eingebaut, um zu sehen, ob der Text auch
übertragen wird, aber es kommt immer der Text "96" (ASCII 39 und 36)
heraus.

Kann es sein, das im Code noch Fehler sind? Ist da was bekannt?


Vielen Dank!!


Andy
Autor: Sascha Focus (sascha_focus)
Datum: 30.04.2007 16:46

Hi,

habe nachdem meine RFM12 endlich gekommen sind, den Code ausprobiert.
Keinerlei Datenverlust. Aber eine Frage mal so nebenbei. Warum Software
SPI und nicht Hardware SPI?

Gruß Sascha
Autor: Benedikt K. (benedikt)
Datum: 30.04.2007 18:21

Ganz einfach: Weil nicht jeder AVR SPI hat.
Damit die Software wirklich auf jedem AVR läuft, und nicht jeder erst
die Software an seinen Wunsch AVR anpassen muss.
Autor: Koko Lores (Gast)
Datum: 01.05.2007 01:37

Hier mal der Link zur Diskussion vom Modul

Beitrag "RFM12 - Funkmodul"
Autor: Stefan (Gast)
Datum: 02.05.2007 17:56

Habe versucht den Code von Benedikt zum laufen zu bringen, leider ohne
Erfolg. Nutze zwei ATMEGA16 und zwei Module RFM12 gemeinsam auf großem
Steckboard. Habe den Pull Up an FSK mit 10kOhm gesteckt, rückmeldung
bekomme ich über RS 232. Antenne ist 17cm lang. Dabei fiel auf, daß das
Senden scheinbar funktioniert (an SDO kommt mit steigender Flanke
rückmeldung). Allerdings scheint der Empfang nicht zu funktionieren. Das
Empfangsprogramm bleibt in der Funktion:
void rf12_rxdata.....
....
  for (i=0; i<number; i++)
  {  rf12_ready();
    *data++=rf12_trans(0xB000);
  }
  rf12_trans(0x8208);
...
bei dem rf12_ready hängen, da der RFM12 an SDO das Signal nicht wieder
auf HIGH zieht...
Hatte das jmd von Euch schon mal???
Autor: Avr Nix (avrnix) Benutzerseite
Datum: 02.05.2007 18:06

@bastelbär: Hast du schon dein BASCOM Programm mit den RFM12 Modul
ausprobiert?
Autor: Benedikt K. (benedikt)
Datum: 02.05.2007 18:18

@ Stefan
Entweder wurde das Modul nicht richtig initialisiert, oder der Sender
sendet nichts.
Versuch mal die Pause vor der Initialisierung größer zu machen.
Autor: Stefan (Gast)
Datum: 02.05.2007 19:38

@ Benedikt

Danke,also, die Pause in der Initialisierung habe ich schon auf 150ms
erhöht...muß mir mal nen Funkscanner leihen, um zu sehen, ob er
sendet...oder wie macht Ihr das?
Autor: Benedikt K. (benedikt)
Datum: 02.05.2007 19:52

Ich nutze einen TV PLL-Tuner um zu sehen ob das Ding sendet. Ergibt
einen wunderbaren Spectrumanalyer im Bereich 45-880MHz mit etwa 100kHz
Auflösung.
Autor: Marco Schwan (masterof)
Datum: 02.05.2007 20:47

Benedikt K. wrote:
> Ich nutze einen TV PLL-Tuner um zu sehen ob das Ding sendet. Ergibt
> einen wunderbaren Spectrumanalyer im Bereich 45-880MHz mit etwa 100kHz
> Auflösung.

ist zwar etwas OT aber:

Wie nutz du den TV-Tuner als Spectrumanalyer?
Autor: Benedikt K. (benedikt)
Datum: 02.05.2007 21:25

Ich habe am Ausgang des Tuners (ca 34-40MHz) einen SA615 hängen, der als
Bandpass + logarithmischer Gleichrichter dient (nebenbei kann man an dem
auch noch das FM demodulierte Signal abgreifen, aber das nutze ich
nicht). Das RSSI Signal messe ich mit einem AVR, der dem Tuner die
Frequenz per I2C vorgibt. So durchlaufe ich den ganzen Frequenzbereich.
Leider hat der Tuner nur ein 62,5kHz Abstimmraster, aber das reicht für
die meisten Sachen. Die Bandbreite meiner ZF Filter ist sowiso größer.
Autor: Avr Nix (avrnix) Benutzerseite
Datum: 02.05.2007 21:50

Hast du dazu eine Bauanletung oder sowas?
Autor: Sven Günther (s705081)
Datum: 02.05.2007 22:39

@ Stafan
ich habe hier genau das gleich Problem mit zwei ATmega16s. Das senden
scheint zu klappen nur beim empfangen hängt der zweite Atmel. Der Code
ist nicht angepasst, Original aus dem Zip. Beide können Senden. Sehr
Komisch.

Hat jemand einen Mega16 als Empfänger am laufen?

Gruss Sven
Autor: Tino (Gast)
Datum: 02.05.2007 22:53

Beim mir das gleiche Problem, ich hab Mega32 dran hängen. Senden geht
auf jeden Fall, hab ich mit einem Spektrumanalysator überprüft.
Autor: Sven Günther (s705081)
Datum: 02.05.2007 23:09

@ Stefan sorry habe mich vertippt.
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 07:44

Ich habe es bei mir gerade nochmal ausprobiert: Die Module an je einen
tiny2313 @ 10MHz, und es funktioniert.
Probiert mal folgendes: Erst den Empfänger einschalten, dann denn
Sender.
Autor: Stefan (Gast)
Datum: 03.05.2007 10:12

@ Benedikt

Also der Sender sendet eindeutig, das habe ich jetzt mit nem Funkscanner
überprüft! Man hört dann beim Senden ein kurzzeitiges Rauschen!...
Aber der Empfänger scheint nicht zu funtionieren, auch wenn ich den
Empfänger  zuvor mit Spannung versorgt habe und anschließend den Sender
einschalte!
Aber woran soll es dann noch liegen?
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 10:31

Leider kann ich da auch nicht viel machen, da man ja nicht in die Module
reinschauen kann.
Falls du ein Oszilloskop oder einen Frequenzzähler hast: Schau mal ob am
CLK Ausgang (vom Empfänger) 10MHz rauskommen. Falls ja, dann ist das
Modul zumindest halbwegs richtig initialisiert. Dann sollte es
eigentlich funktionieren.
Der Sender sollte etwa im 1s Takt Daten senden. Das müsste man deutlich
an kurzen Rauschimpulsen hören können.
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 10:41

Ich glaube ich habe das Problem: Es liegt am Sender !
Aus irgendeinem Grund funktioniert die Initialisierung nicht immer,
sondern erst nach ein paar Versuchen. Zu Beginn höre ich auch nur ein
Dauerrauschen, schalte ich den Sender aber mehrmals ein und aus, dann
kommen plötzlich die 1s Rauschimpulse. Danach funktioniert es aus
irgendeinem Grund jedesmal beim Einschalten.
Autor: Stefan (Gast)
Datum: 03.05.2007 11:32

@Benedikt

Also: Die Rauschimpulse kommen bei mir immer, das macht mein Scanner
hörbar!
Die 10MHz kommen sowohl am Sender als auch beim Empfänger an.(Oszi) Habe
die Empfängerschaltung jetzt mit einem MEGA8 versucht, aber auch das
funktioniert nicht! Der Empfänger bekommt scheinbar kein Signal! Die
Signale an SDI und SCK kommen am Modul an, allerdings nichts an
SDO!...kann es sein, daß die Initialisierung beim Empfänger nicht
stimmt??
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 11:46

Die Module gegeben nach dem Einschalten 1MHz aus. Ich schalte den Takt
auf 10MHz um. Wenn also die 10MHz rauskommen, versteht also das Modul
die Befehle. Ich habe es jetzt noch ein paarmal ausprobiert: Sobald der
Sender läuft, empfange ich jedesmal die Daten problemlos.
Autor: stefan (Gast)
Datum: 03.05.2007 13:35

DANKE, Benedikt, aber ich bin noch nicht weiter...:(
Ich hoffe wir sprechen von dem gleichen Programm!?...ich habe das
rfm12.zip, des ersten Eintrags genommen...und das send auskommentiert
und receive rein! oder hab ich da noch was vergessen??? vlt. kannste das
aktuelle noch mal posten???
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 14:06

Ja, genau dasselbe nutze ich auch. Wenn der Sender läuft, sollte der
Empfänger eigentlich auch funktionieren. Hast du auch die Pause in der
Schleife beim Empfänger auskommentiert ? Funktionieren müsste es aber
trotzdem.
Autor: Stefan (Gast)
Datum: 03.05.2007 15:58

ja, habe ich alles gemacht...mir fiel jetzt folgendes auf, wenn ich den
Tastkopf an de SDO anschließe, dann scheint es zu funktionieren, aber
warum???? Hat da jmd ne Ahnung?
Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 16:21

Timingproblem ? Oder ist der Pin nicht richtig angeschlossen ? Wie
schnell läuft der AVR ?
Muss der Tastkopf schon beim Einschalten vorhanden sein, oder reicht es
erst später während dem Empfangen ?
Probier mal ob es mit einem Pullup oder Pulldown funktioniert.
Autor: juppi (Gast)
Datum: 03.05.2007 18:35

Also um nochmal auf die Antenne zurückzukommen:

Zum Einsatz kommen nur RFM12 Module:
macht es in der Beschaffenheit der Antenne einen Unterschied, ob ich 10,
20 oder 50m überbrücken möchte? - wahrscheinlich nicht - die Länge und
Beschaffenheit hängt doch von der Frequenz ab, oder?

Zum Einsatz kommen sowohl RFM01 alsauch RFM02 Module:
Verwendet man unterschiedliche Antennen bei Sender und Empfänger ?

Um eventuelle Auschweifungen vorzubeugen: nein - keine Richtantenne -
ich will nur ein Stück Draht dranhängen.



Autor: Benedikt K. (benedikt)
Datum: 03.05.2007 19:00

Im einfachsten Fall: etwa 16cm Draht reicht. Die Antennenanpassung macht
den Rest. Falls die Entfernung klein ist, kann man die Sendeleistung per
Software reduzieren.
Autor: Stefan (Gast)
Datum: 04.05.2007 10:29

@Benedikt

Also, der SCK Takt liegt bei 3,7kHz und die Daten an den RFM12 Sender
scheinen anzukommen. Allerdings kommt am SDO nicht heraus! Hast Du da
noch einen Tipp für mich????
Autor: Benedikt K. (benedikt)
Datum: 04.05.2007 10:35

Es gibt da eigentlich nur 2 Möglichkeiten (vorausgesetzt die Hardware
ist OK):
a) Die Intialisierung des Empfängers ist nicht korrekt angekommen.
Versuch einfach mal die Init Routine mehrmals hintereinander aufzurufen.
b) Der Sender sendet nicht die korrekten Daten.
Autor: Stefan (Gast)
Datum: 04.05.2007 11:17

Also die initialisierung des Empfängers scheint zu laufen! Danach gibt
es, da
der SDO auf Low-Bleibt keine weiteren SCK-Impulse mehr....
Autor: Sebastian (Gast)
Datum: 05.05.2007 13:10

In Dateianhang ist meine code fuer:

ATmega8 + RFM02 (TX modul) + hardware SPI

PB2 (SS)   -> nSEL=CS
PB3 (MOSI) -> SDI
PB5 (SCK)  -> SCK
PB0        <- nIRQ
PB1        -> FSK
Autor: Sebastian (Gast)
Datum: 05.05.2007 13:13
Dateianhang: RFM02.zip (1,4 KB, 581 Downloads)

...
Autor: Joachim R. (bastelbaer)
Datum: 07.05.2007 15:44
Dateianhang: rf12.zip (1,7 KB, 542 Downloads)

Hi Leute,
nachdem nun endlich meine Module gekommen sind habe ich mir mal meinen
Code wieder vorgenommen und wollte ihn probieren. Dabei habe ich,
abgesehen von einem Programmierfehler von mir, einige Ungereimtheiten im
Compiler festgestellt. Duch diese Ungereimtheiten war es nicht möglich
dass das Programm richtig lief obwohl beim Compilieren kein Fehler
auftrat.

Als kleine Info: Ohne die Angaben von $hwstack, $swstack und framesize
werden beim Aufruf der Funktionen bzw. Subs die Parameter anscheinend
nicht richtig übergeben bzw. verarbeitet. Und beim Berechnen der
Baudrate wird beim casten der Wert von Temp null anstatt 16 da die
344828 für Word zu gross sind. Also man lernt nie aus was Compiler so
alles machen.
Ich habe den Code entsprechend geändert und mal duch den Simulator
laufen lassen und jetzt klappt es zumindest mit den Aufrufen.
Leider kann ich erst morgen das ganze an der Hardware testen. Aber ich
schick das File mal mit, die Tage gibts dann einen Erfahrungsbericht von
mir.
Also bis denne dann....
Autor: Humix (Gast)
Datum: 07.05.2007 18:19

@bastelbär
In die Config SPI muß NOSS = 1 eingefügt werden und dann den SS Pin
 im Programm schalten. ansonsten geht SS (Chip Select) schon nach
8 Bit wieder auf High.
Autor: Avr Nix (avrnix) Benutzerseite
Datum: 07.05.2007 19:49

@HUMix - geht es bei in bascom und würdest das zur verfügung stellen?

Autor: bastelbaer (Gast)
Datum: 08.05.2007 10:27
Dateianhang: rf12.zip (1,8 KB, 1447 Downloads)

ES LEBT, ES LEBT!!
Die Routinen für den BASCOM laufen. Ein kleiner Fehler, abgesehen von
dem den HUMIX gemeldet hat, war noch drin (Highbyte zuerst senden) aber
jetzt laufen sie. Ich habe sie gerade an der Hardware mit einem
Evalboard getestet. Allerdings hab ich den MEGA32 mit 8Mhz vom Evalboard
getaktet, also nicht mit den 10MHz vom Modul. Also aufpassen im
Quelltext falls einer die 10Mhz nutzt. Angeschlossen hab ich das Modul
folgendermassen:
VDD    ->  VCC
GND    ->  GND
SDI    ->  MOSI (PB5, Pin 6)
SDO    ->  MISO (PB6, Pin 7)
SCK    ->  SCK  (PB7, Pin 8)
nSel   ->  SS   (PB4, Pin 5)
FSK    ->  R 10k Pullup

Jetzt gehts weiter im Programm mit den Feinheiten und IRQ-Steuerung.
Auch werde ich mal mit dem SPI-Clock spielen um schneller zu werden.

Datei anbei, und nicht die Fuses vergessen.

Joachim
Autor: Avr Nix (avrnix) Benutzerseite
Datum: 08.05.2007 12:37

@bastelbär kann ich dein Bascom Programm auf http://www.comwebnet.de
veröffentlichen? Dort sammele ich von Usern Projekte und die werden
veröffentlicht. Gucke mal rein und schreib mir bitte.
Autor: Stefan (Gast)
Datum: 08.05.2007 15:22

@Benedikt

Kannst Du mir bitte mal die AVR Studio Version nennen, mit der du das
Programm compiliert hast..bei mir ist Version 4.13 , Bulid 528....
Bei der Version habe ich bereits rausgefunden, daß man das "#define
F_CPU 1000000UL" weder in der Header noch in der c-Datei definieren
darf, sondern nur im Makefile von AVR...sonst bekommt man falsche Zeiten
bei DELAY.h routinen...
Wie gesagt, es funktioniert immer noch nicht und ich sehe im Moment
keinen Fehler..!?
Autor: Benedikt K. (benedikt)
Datum: 08.05.2007 18:44

Ich nutze den GCC ohne AVR Studio und erstelle alles über das Makefile.
Autor: Ronald (Gast)
Datum: 09.05.2007 16:51

Hallo liebe gemeinde!

ich habe vor, mir auch eine Datenstrecke basierend auf den Modulen RF12
aufzubauen, meine Frage richtitet sich an die Antenne. und zwar nicht
für wieweit sie lang sein muss, sondern eher ob ihr erfahrungen mit der
max. Länge habt? Der einsatz ort einer Gegenstellt ist dirket neben
einem leeren