Forum: Mikrocontroller und Digitale Elektronik RFM12 keine Übertragung


von loki (Gast)


Angehängte Dateien:

Lesenswert?

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

von us73 (Gast)


Lesenswert?

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

von us73 (Gast)


Lesenswert?

... und ich hoffe, Du meinst 100nF (KerKo) anstatt 100µF (Elko).

von loki (Gast)


Lesenswert?

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

von us73 (Gast)


Lesenswert?

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.

von loki (Gast)


Lesenswert?

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

von Oddel (Gast)


Lesenswert?

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 !

von loki (Gast)


Lesenswert?

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

von us73 (Gast)


Lesenswert?

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 ?

von loki (Gast)


Lesenswert?

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.

von loki (Gast)


Angehängte Dateien:

Lesenswert?

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?

von us73 (Gast)


Lesenswert?

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.

von dbugger (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.