www.mikrocontroller.net

Forum: HF, Funk und Felder Frage zu RFM12


Autor: Judith P. (kiskil-lilla)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Für meine Studienarbeit möchte ich eine Funkstrecke mit 2 
RFM12-Funkmodulen aufbauen. Zunächst habe ich dazu das SPI zum Laufen 
gebracht (in der Datei betrifft das die Testmethoden SPI_1 und SPI2 mit 
zugehöriger Verkabelung), über welches ein Lauflicht gesteuert wurde, 
was auch gut funktioniert hat. Nun habe ich jeweils 2x SPI-Übertragung 
hintereinander ausgeführt, um ein Kommando ans Funkmodul zu übermitteln 
(void transmit). Nun habe ich aber das Problem, dass das Funkmodul 
nichts tut.

Funkmodul und ATmega8 sind über den SPI-Bus sowie die 
Clock(-output)-Leitung des RFM12 verbunden. Der ATmega verwendet also 
die Clock des RFM12.

Es wird offensichtlich nichts gesendet, denn am empfangenden Funkmodul 
wird das Interrupt-Bit für "empfangen" (nIRQ) nie gesetzt. Das Kommando 
scheint das RFM12 jedoch zu verstehen, denn wenn ich in der init-Methode 
irgendein Kommando zur Einstellung der Clock ändere, blinkt das 
Kontrollicht am zugehörigen ATmega, welches eigentlich im Sekundentakt 
blinken sollte, in einem anderen Takt oder gar nicht mehr.

Nun kenne ich mich noch nicht so gut aus mit Mikrokontrollern, folglich 
weiß ich nicht so genau, was weiter tun, zumal das Funkmodul ja auch 
keine Rückmeldung abgibt, wo es nun gerade hakt. Ich habe jetzt mal 
sowohl die Initialisierungs-Kommandos aus den hier geposteten Programm 
verwendet (Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module") als auch die 
"offiziellen", die es als Download gab... 
(http://www.pollin.de/shop/ds/MDU5OTgxOTk-.html), aber keines 
funktioniert so richtig.

Hat jemand vielleicht eine Idee, woran es haken könnte oder zumindest, 
wie ich weiter testen kann? Mir unerfahrenem Etwas gehen nämlich so ein 
bisschen die Ideen aus, zumal ich auch nicht von alles im Datenblatt 
beschriebenen Kommandos wirklich verstehe, was sie tun...

Vielen Dank schonmal und viele Grüße,
kiskil-lilla

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl-heinz H. (kalliheinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ergänzend zu ozo's Hinweis kannst du dir vielleicht mal dieses Proggi :

Beitrag "Re: RFM12 Empfangsinit"

anschauen.Es soll bei der RFM-Config unterstützen.


>#define F_CPU 1000000UL // 1 MHz
>transmit(0xC400);//1.66MHz,2.2V

Vielleicht auch besser F_CPU und RFM-Takt auf 10Mhz stellen.
AVR-Fuse-Bits beachten !Sollten richtig eingestellt sein.

Die auskommentierten Zeilen in deiner "Send-Routine" nochmals
genauer anschauen.

>transmit(0xCA81);//FIFO8,SYNC,!ff,DR

Wenn du in der "Init" das Senden der Sync-Bytes einstellst -solltest
du sie auch senden.
>//  transmit(0xB82D);
>//  transmit(0xB8D4);

sonst macht der Empfänger garnichts mehr, da er auf die Sync-Bytes
wartet.

Damit sich der Empfänger auf den Sendetakt synchronisieren kann,
solltest du zu allererst 3 Präambel-Bytes senden, diese hast du
ebenfalls auskommentiert.

>//  transmit(0xB8AA);
>//  transmit(0xB8AA);
>//  transmit(0xB8AA);

Bevor du überhaupt irgendetwas sendest, musst du den Sender auch
einschalten - ist aber auch auskommentiert.

>//  transmit(0x8238);    // TX on

Dieses :
>//  transmit(0xB8D4);    // TX off

ist falsch.Siehe Power Management Command.

Der grobe Ablauf des Sendens könnte in etwa so aussehen :

1. Sender einschalten
2. 3 Präambelbytes
3. die Sync-bytes
4. Daten
5. nochmals 2-3 Präambelbytes um den Empfängerfifo sicher zu leeren
6. Sender ausschalten

hoffe hilft ein wenig...

lg
kalli

Autor: Judith P. (kiskil-lilla)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Erstmal vielen Dank für die Antworten und sorry, dass ich so lang nichts 
mehr geschrieben hab. Ich habe eure Vorschläge beherzigt und bin auch 
ein gutes Stück weitergekommen. Ich weiß jetzt dank Oszilloskop, dass 
mein RFM12 sendet, es liegt auch ein schwächeres Empfangssignal auf der 
Empfängerantenne an. Aber: Weder wird der Interrupt auf nIRQ ausgelöst 
noch der auf FFIT oder MOSI, wenn ich die empfangenen Daten "auf gut 
Glück" hin auslese, bekomme ich auch nur "0" zurück. Ich nehme an, dass 
in der Initialisierung oder der Empfangsmethode ein Fehler sein muss, 
sitze da jetzt aber schon länger dran und habe keine Ahnung.

Meine Verschaltung ist: Ganz normal (wie im Datenblatt auch) an den 
Strom angeschlossen, ein Pullup von 1k auf FSK/DATA/nFFS und einer von 
10k auf nIRQ. Nun ist nIRQ dauer-high, FFIT dauer-low und MOSI auch. Ich 
sitze da jetzt bereits mehrere Tage dran und so langsam hab ich auch 
keine Ideen mehr, vielleicht fällt euch ja was dazu ein... (Funkmodule 
habe ich übrigens mehrfach ausgetauscht, dass die hinüber sind, ist also 
eher unwahrscheinlich...)

Liebe Grüße,
kiskil-lilla

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Karl-heinz H. schrieb:
>...
> Der grobe Ablauf des Sendens könnte in etwa so aussehen :
>
> 1. Sender einschalten
> 2. 3 Präambelbytes
> 3. die Sync-bytes
> 4. Daten
> 5. nochmals 2-3 Präambelbytes um den Empfängerfifo sicher zu leeren
> 6. Sender ausschalten

auch wenn es immer wieder so auftaucht, Punkt 5 ist schlicht falsch.

im Empfängerfifo ist genau, was gesendet wurde und leeren muß ihn der 
µC, der am Empfänger hängt.

Das Problem, das mit den zusätzlichen Bytes kaschiert wird:
ohne die Zusatzbytes wird der Sender abgeschaltet, bevor das letzte Byte 
komplett gesendet werden konnte...

Richtig ist also:

4. Daten
5. warten, bis das letzte Byte komplett gesendet wurde
6. Sender ausschalten.

Gruß aus Berlin
Michael

Autor: Judith P. (kiskil-lilla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm. Ich hab die Pullups auf nIRQ weggenommen, immer noch alles high. Ich 
habe das FIFO-Level wie im Artikel beschrieben auf CAF3 gesetzt, immer 
noch keine Interrups. Ich habe die Präambelbytes nach den Datenbytes 
weggenommen und stattdessen nach dem Senden 10 ms gewartet, und ich hab 
immer noch keine Interrupts...

Nichts im MOSI, nichts auf nIRQ, nichts auf FFIT...

Autor: Karl-heinz H. (kalliheinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

danke für die Info - ...hatte es aber irgendwo hier im Forum
so gelesen.Man lernt halt nie aus :)

lg
kalli

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.