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.