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
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.
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).
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.
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...
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
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.
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!
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
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.
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.
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.
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.
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