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
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
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
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
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...
Hallo Michael, danke für die Info - ...hatte es aber irgendwo hier im Forum so gelesen.Man lernt halt nie aus :) lg kalli
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.