Forum: Mikrocontroller und Digitale Elektronik Hilfe bei RFM


von Prinz Sebi (Gast)


Lesenswert?

Hallo zusammen,

ich habe mir bei Pollin 2 RFM12er geholt für drahtlose Datenübertragung. 
Aber die Biester wollen nicht so wie ich möchte. Jetzt habe ich das 
Beispielprogramm hier aus dem Forum von Benedikt K. genommen und 
gehofft, dass es funktioniert. Tut es aber leider nicht und ich weiss 
nicht woran das liegen könnte, kenne mich nämlich mit Funk nicht so gut 
aus. Habe mir mal die Empfangsbytes via Uart auf die serielle 
Schnittstelle des PC's geworfen. Aber der empfängt nur wirres Zeug. Auch 
wenn ich den Sender vom Strom trenne. Wie kann ich feststellen, ob der 
Sender richtig sendet? Oder was kann ich noch versuchen, um der Lösung 
näher zu kommen. Bin für alle Antworten dankbar.

Zur verdrahtung. Habe beide Grounds vom RFM12 gebrückt, sonst alles wie 
im Beispielprogramm gelassen, nur die Frequenz des Atmegas habe ich zur 
Berechnung auf 1Mhz gestellt, weil der Atmega ohn externen Ram läuft.
Antennen sind ca. 17,5 cm lang.

Zur Ausstattung: ich habe kein Oszilloskop.

Der Sebi

von H.Joachim S. (crazyhorse)


Lesenswert?

"nur die Frequenz des Atmegas habe ich zur
Berechnung auf 1Mhz gestellt, weil der Atmega ohn externen Ram läuft."

Das ist ein gewichtiges Argument :-)

von Prinz Sebi (Gast)


Lesenswert?

Uups. Ich meinte natürlich ohne externen Quarz :D

von Prinz Sebi (Gast)


Lesenswert?

Hab jetzt auch mal versucht UART-Baudrate und FUNK-Baudrate anzugleichen 
aber immernoch das gleiche Problem. Wie kann ich feststellen ob der 
Sender richtig sendet? Weil wie oben beschrieben, empfängt der Empfänger 
auch was, wenn ich den Sender vom Strom trenne.

von Bernhard M. (boregard)


Lesenswert?

Prinz Sebi schrieb:
> Sender richtig sendet? Weil wie oben beschrieben, empfängt der Empfänger
> auch was, wenn ich den Sender vom Strom trenne.

Wenn der wirklich was empfängt, dann sendet jemand anderes auf der 
Frequenz (z.B. Funkthermometer), also erst mal eine freie Frequenz 
suchen (solange am Empfänger Frequenz ändern, bis er nichts mehr 
empfängt).

von Prinz Sebi (Gast)


Lesenswert?

Empfgangen tut er definitv was, denn ich hab das Senden via UART in die 
Empfangsroutine geschrieben, d.h nur wenn etwas empfangen wird, dann 
sendet er etwas. In welchem Frequenzbereich darf ich mich denn da legal 
bewegen. hab im Internet gelesen, dass man da stark eingebunden ist.

von Prinz Sebi (Gast)


Angehängte Dateien:

Lesenswert?

Also ich probier hier jetzt schon stundenlang das Senden und Empfangen. 
Klappt alles nicht. Hab die Frequenzen willkürlich durchgefahren. Hat 
alles nicht geholfen. Hab den Sender jetzt vollständig von der Quelle 
abgemacht. Und er empfängt immernoch am Stück Daten. Aber weiss nicht 
woher. Vielleicht wäre jemand malso nett und würde über das Programm 
drüber schauen. hab auch die Delay zeit hochgesetzt.

Mensch das ist doch frustrierend :(

Hab auch schon ein anderes Programm von Ulrich Radig ausprobiert, aber 
das hat gar nichts getan.

Mit dem von V#Benedikt K. empfängt das ;Modul ganz oft 0xFF und 
zwischendurch andere Kürzel...

von Prinz Sebi (Gast)


Lesenswert?

Hat  keiner einen kleinen Tipp für mich? :(

von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe mir die Sourcen nicht angeschaut, aber:

wenn der Empfänger richtig initialisiert ist, empfängt dieser garnichts.
Erst wenn die Magic Pattern (0x2DD4) empfangen wurden, wird der FIFO 
überhaupt freigegeben.
Ich hatte es noch hier nie, daß das zufällig passierte, dazu müte ja ein 
anderer RFMxx im Umkreis senden.
Funkthermometer usw. benutzen üblicherweise kein FSK und und auch nicht 
besagte Pattern.
Es muß also schon einen Fehler in der Empfangsroutine bei Dir geben.

Gruß aus Berlin
Michael

von Prinz Sebi (Gast)


Lesenswert?

Hmm... Hast du vielleicht einen funktionieren Code für Atmega8. Ich 
finde den Fehler einfach nicht. Hab glaube ich schon alles mögliche 
ausprobiert, aber nichts will funktionieren.

von Reinard (Gast)


Lesenswert?

Wie hast Du denn das RFM12 mit dem µC verbunden? Stell' doch mal den 
Schaltplan hier rein, dann kann Dir besser geholfen werden.

von Prinz Sebi (Gast)


Lesenswert?

Okay. ich hoffe es reicht auch, wenn ich es nur schreibe, denn ich hab 
ihn so an Benedigts Beispielprogramm angelehnt:

das heisst,
RFM12           µC

SDO             PB0
NSEL            PB7
SCK             PB6
SDI             PB5

Das war eigentlich alles!

von Michael U. (amiga)


Lesenswert?

Hallo,

nein, das reicht nicht!

Die restliche Beschaltung wie FSK-Pin, Abblockkondensatoren, Beschaltung 
des AVR, Stromversorgung sind/können die richtige Funktion genauso 
beeinflussen.

PS: meine Module laufen nämlich...
http://www.avr.roehres-home.de/sensoren/index.html

Gruß aus Berlin
Michael

von Prinz Sebi (Gast)


Lesenswert?

Sorry ich hab vergessen zu erwähnen, dass ich FSK mit 10KOhm gegen VDD 
geschaltet habe. Sonst ist der Atmega nackt beschaltet. Das heisst mit 
einem 7805 die Spannung und dann am Atmega nur VCC und GND , und 10KOHM 
von Reset nach VDD...

Alles ohne externen Takt. läuft als auf 1Mhz. Uart  funktioniert 
einwandfrei. Durch Testprogramm verifiziert ^^

Hab ich denn noch irgendwelche anderen Möglichkeiten zu überprüfen, 
woran es liegt?

Es haben im Thread zu dem Beispielprogramm alle geschrieben dass es 
funktioniert. Deswegen denke ich, dass doch eigentlich alles 
funktionieren müsste. Allerdings schreibt er mir dauerhaft was auf die 
Serielle Schnittstelle. Egal welche Frequenz ich einsetze.

von Huch (Gast)


Lesenswert?

Du zerrst ein wenig an unseren Geduldsfäden und ich höre da einen leicht 
fordernden Unterton heraus.

Klar ist die Situation frustrierend für Dich. Aber denke daran: Dein 
Frust ist nicht unser Frust. Und Deine Probleme sind nicht unsere 
Probleme. Vor allem vermisste ich, dass Du selbst Maßnahmen zur Diagnose 
ergreifst. Wenn Du Anfänger bist, dann ist dieses Projekt eindeutig eine 
Nummer zu gross für Dich.

1. Im Tutorial 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART steht, 
dass Du auf keinen Fall den internen RC-Oscillator verwenden sollst 
sondern einen Quarz.

2. 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment#Selbstbau 
steht wie in anderen Artikeln auch, dass Du ohne Abblockkondensatoren 
auf keinen Fall auskommst.

3. Stelle bitte mal klar: Ist es richtig, das Du vom AVR wilde Zeichen 
empfängst? In dem Fall mach mal ein Testprogramm, das nur ein Zeichen 
vom PC empfängt und wieder zurücksendet. Ohne Empfang sollte der AVR von 
alleine garkeine Zeichen senden. Wenn er das tut hat das nichts mit dem 
RFM zu tun.

Am besten ist Du machst alles schrittweise und versuchst nicht alles auf 
einmal. Dann ersparst Du Dir eine Menge Frust.

Ausserdem erfordert so etwas die Beachtung einer Menge Details die Du 
erstmal lernen und uns natürlich auch angeben musst. Es macht keinen 
Spass Dir alles einzeln aus der Nase zu ziehen.

von Prinz Sebi (Gast)


Lesenswert?

Es tut mir leid, falls hier irgendjemand einen fordernden Unterton 
verstanden hat. Das war definitiv nicht meine Absicht und ich bin 
Heilfroh, dass es dieses Forum gibt. Wirklich

Nun nochmal ganz von Anfang, was ich alles gemacht habe:
- Das Tutorial durchgearbeitet.
- Atmega8 auf Steckbrett aufgebaut
- Spannungsstabilisierer auf kleiner Extra-Platine mit nötigen 
Kondensatoren etc. aufgelötet
- Einen Stk500v2 Programmierer gekauft und angefangen zu programmieren
 (LED Spielerreihen, Ein und Ausgabe, LCD-Display angesteuert,UART  etc)

So nun zum eigentlichen
- Zunächst ein einfaches (mehrdateienfassendes) Uart-programm zum 
Ausgeben von seriellen Daten an meinen PC, Senden + Empfangen und Aktion 
aufgrund des Empfangsstrings abarbeiten. Das hat alles funktioniert

- Dann das besagte Beispielprogramm verwendet und unter Zugabe meiner 
UART-Bib betrieben, Funktion des reinen UARTS getestet. Ohne Probleme 
möglich

- Anschluss des RFM12 nach obigen Muster inclusive dem 10kOHM 
Widerstannd von FSK gegen Masse

- Sender und Empfänger Atmega mit dem programm bespielt, dabei einmal 
als Sender und einmal als Empfänger mit gleichen Parametern

- Aufgefallen, dass der Empfänger wa empfängt, was aber nicht dem 
Sende-String entspricht. Daraufhin, den Sender vom Stom entfernt. 
Immernoch Zeichenempfang, deshalb
1) Andere Frequenzen verwendet, das gleiche Problem
2) Alle Kontakte am RFM nochmal neu gelötet, das gleiche Problem
3) Eine andere Schaltung verwendet (Ulrich Radig) auch kein Erfolg
4) Untersuchung ob der Uart fehlerhaft ist und ihn deaktiviert und mir 
bei einem Empfangen Byte eine LED blinken lassen (Alles ohne Sender) 
immernoch dad gleiche Problem. mLED blinkt.
5) Delay Zeit wie im Thread besprochen hoch gesetzt.

- Alles neu aufgebaut, um Verdrahtungsfehler zu eliminieren, immernoch 
das gleiche Problem

- Geprüft ob die Kontakte untereinander eine Verbindung haben, haben sie 
nicht

Jetzt bin ich langsam mit meinem Latein am Ende. Die RFM's waren neu, 
deswegen gehe ich nicht davon aus,dass ich einen Schaden daran habe.

von Huch (Gast)


Lesenswert?

Nochmal: Wenn Du ohne Sender Zeichen vom UART des AVR bekommst, dann 
stimmt entweder mit Deinen Sendefunktionen etwas nicht oder mit den 
Empfangsfunktionen für den RFM12.

Was ist nun mit den Abblockkondensatoren?
Was ist mit dem Quarz?

Wir wissen nun was es nicht ist. Tips wie Du weiterkommst haben wir Dir 
gegeben. Der Rest ist nun Deine Sache.

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn sein UART mit dem internen Takt die Baudrate trifft, kann man den 
zum debuggen auch duchaus mal so benutzen, mache ich auch manchmal und 
es geht auch.

Sollte man natürlich auch getestet haben, ich mache es dann meist so, 
daß ich beim Start des AVR erstmal etwas wie "Reset, initialisiere RFM" 
oder so sende.
Dann bemerkt man eine weglaufende Baudrate schon rechtzeitig.

Den Sender würde ich erstmal ignorieren und aus lassen, bis geklärt ist, 
warum der Empfänger angeblich was empfängt.

Ansonsten: Du willst 12 Byte empfangen, ich sehe nicht, wo Du 12 Byte 
sendest...

Der Ablauf ist generell:

Sender einschalten
mindestens 3 Syncbytes (0xAA) senden, die geben dem Empfänger Zeit, auf 
das Signal zu reagieren (AFC, AGC).
Magic Pattern senden (0x2DDA), wenn der Empfänger die erannt hat, wird 
der FIFO freigegeben. Erst ab hier meldte der RFM mit dem FIFO-Bit, daß 
die eingestelle Anzahl Bits (üblicherweise 8) im FIFO bereit liegen.
Die können (und müssen) jetzt abgeholt werden.
Alle folgenden empfangenen Bits werden weiterhin in den FIFO geschoben 
und entsprechend gemeldet.
Das bleibt hier jetzt so, bis der FIFO ausgeschaltet wird und neu 
initialisiert wird.

Man muß also logischweise beim Empfang wissen, wieviel Bytes man sendet 
und dann den FIFO neu starten, um auf die nächste Sendung zu warten.

Sendet man z.B. nur 1 Byte (nach Sync/Pattern) und setzt nach dem 
erwarteten Byte den FIFO nicht neu, dann erwartet der Empfänger 
natürlich weiterhin Daten und meldet jede Störung als Empfang.

Gruß aus Berlin
Michael

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.