Hallo, Ich versuche nun schon seit geraumer Zeit Funkübertragung mittels des RFM12-Moduls von Pollin zu realisieren. Dazu verwende ich die Library von "das-labor.org" in svn-Revision 85. Die beiden Quellcode-dateien zeigen beide einen Sender/Empfänger von denen einer den Status nur mittels LEDs, der andere über usart (mit das-labor-library-debug-ausgabe) mitteilt. Eine der Schaltungen (für die der usart-code bestimmt ist) ist auf einem Steckbrett aufgebaut. Die Schaltung(en) sind zu einfach für ein Diagramm: µC : atmega8, RFM12 <-> mega8 VDI <-> MOSI VDO <-> MISO SCK <-> SCK nSel <-> NSS nIRQ <-> Int0 FSK/Data/nFFS <-> VCC zwischen VCC und GND des RFM12 ist jeweils noch ein Kondensator mit 100µF gelötet. Das 2., fest gelötete Modul ist nach dem gleichen Schema aufgebaut. Mein Problem: Beide Module signalisieren nur "OCCUPIED" als Antwort auf alle bis auf die erste Sendeanfrage (diese "ENQUEUED"). Obwohl die Verwendung der Interrupts aktiviert wurde wird keines geworfen (uart-ausgabe der Library + codezeile "uart_putstr("int\n")" ;) ). Empfangen habe ich mit den Modulen leider noch nie etwas und kann somit natürlich auch nicht vermuten jemals etwas gesendet zu haben. Gibt es zu diesem oder ähnlichen Problemen bekannte Lösungsansätze? Ich habe bereits dieses Forum durchsucht und gegoogelt, andere Libraries (U.Radigs e.g) ausprobiert oder den Pollin/HOPE-Code per Hand nachgetippt jedoch mit vergleichbaren Ergebnissen. Ist die Verdrahtung grundlegend falsch? Übersehe ich irgend eine Codezeile? Lösche ich auf mysteriöse Weise den Int-Handler? Ich wäre für sehr dankbar für jede Hilfe, Frank
Hast Du diesen Beispielcode schon einmal verwendet ? Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module" Bei mir hat das auf Anhieb mit 2 x attiny2313 funktioniert (OK, nachdem ich dann auch jeweils einen Pullup an FSK angeschlossen hatte) Der macht nix mit Interrupts etc, daher einfacher und wohl fehler-vermeidender. Unbedingt dabei F_CPU beachten, afair war das im Beispielcode für 10MHz eingestellt, also anpassen bzw. kontrollieren. Gruß, Uwe
genau 100nF kerko, (fand die µ-taste so toll ^^) in dem Thread wird des Ur-Programm zum rfm12 diskutiert iirc, des hab ich (und dann eben die änderungen) eigentlich probiert. Aber den pullup an fsk hab ich nicht - einfach widerstand (~100k) zwischen fsk und vcc? Welche Version von dem Programm hast du verwendet ? (gibt in dem Thread ja leider mehrere) Werd' gleich des Programm nochmal probieren. thx schonmal Frank
Die erste Version hatte ich verwendet, also das "Original". Pullup habe ich 10k. Zum Test ists aber recht wurscht, ob nun 4,7k, 10k, 47k. Ohne den Pullup tut sich nichts. Ich habe eine Weile lang gesucht, nochmal die Anleitung gelesen und - oh, doch den Pullup nicht eingebaut, hingepfriemelt - und hat geklappt.
Hallo,
jetzt mit Pullup(10k) und einer Änderung am Code wie im oben zitierten
Thread vorgeschlagen nochmal probiert.
Kann leider immer noch keinen Fortschritt vermerken :(
Das Programm bleibt bei der 1. ready()-abfrage hängen:
void rf12_ready(void)
{
uart_putstr("ready\n");
cbi(RF_PORT, SDI);
cbi(RF_PORT, CS);
asm("nop");
while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready
}
immer noch Ratlos,
Frank
Hallo Loki, SDI und SDO Anschluß kontrolliert ? Ich würde an Deiner Stelle mit einem minimal Programm anfangen um zu sehen ob überhaupt was geht. Gruß und viel Erfolg !
Hallo, eine Frage zum allgemeinen Verständnis: ich habe immer SDO mit MISO und SDI mit MOSI verbunden und auch dementsprechend im Programm angegeben. Ist die Verkabelung so korrekt? Schließe ich die Kontakte nicht oder verkehrt herum an "funktioniert" mein Code natürlich, … Gibt es eine einfach Möglichkeit zu prüfen ob die Module (rfm12) überhaupt funktionieren? :( Frank
loki schrieb: > ich habe immer SDO mit MISO und SDI mit MOSI verbunden und auch > dementsprechend im Programm angegeben. Wie jetzt ? Hast Du das mit dem einfachen Code von Benedikt probiert ? Dort gibt es im Code in rf12.c ganz iben die PIN-Konfiguration, wo und wie die Module angeschlossen werden. Hast Du das gemacht ?
Hallo, habe jetzt nur noch die "einfache" Version (also das Programm aus dem 1. Post von Benedikt). in der rf12.c hab' ich die ersten Zeilen folgendermaßen geändert #define F_CPU 4000000UL #define RF_PORT PORTB #define RF_DDR DDRB #define RF_PIN PINB #define SDI 3 #define SCK 5 #define CS 2 #define SDO 4 (also HardwareSPI-Pins angegeben obwohl HardwareSPI nicht benutzt wird (so kann ich das Programm 1:1 auf mein fest gelötetes Board übernehmen)) der Rest des Programms (inklusive main.c) entspricht bis auf uart-Ausgaben noch dem Original.
update: doch noch fehler in der Verdrahtung gefunden (pullup). mein Sendeprogramm(main3.c) "sendet" nun (ob es das wirklich tut kann ich nicht nachvollziehen), jedoch hängt die Empfangsversion(main2.c) des Programms (beide im Anhang) eben wieder bei ready(). die rfm12.c etc sind (bis auf kleine Erweiterungen zur Ausgabe) noch Originalversionen von Benedikt. Gibt es da sonst noch bekannte Fallen?
Hm, wie gesagt, bei mir hat das auf Anhieb funktioniert. Mal die HW getauscht ? (also den Sender empfangen lassen und andersrum) Allerdings, ich habe zum Debuggen LEDs an einen PIN gehängt und auf den Inhalt des ersten empfangenen Bytes hin verglichen. Auf den UART Kram habe ich komplett verzichtet.
es gibt noch zig fallen. zb bleibt das empfangsmodul ganz sicher hängen, wenn es nichts empfängt. - hast du nen jtag zur hand, oder wie debuggst du?
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.