Forum: Mikrocontroller und Digitale Elektronik rfm22b Empfänger läuft nicht


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo....
Ich habe folgendes Problem: Ich habe an einem Atmega32 ein RFM22b 
Funkmodul angeschlossen um damit Daten von einem anderen RFM22b zu 
empfangen. Als Beispiel um zu schauen, ob überhaupt eine Kommunikation 
stattfindet, habe ich das Beispielprogramm von Ulrich-Radig genommen. 
Das Senden funktioniert auch...nur beim Empfänger läuft gar nichts. Habe 
in der while an PORT D5 eine LED angeschlossen um zu sehen, ob das 
Programm überhaupt abgearbeitet wird. Aber es passiert nichts und die 
LED leuchtet dauerhaft(wird am Anfang des Programms 
eingeschaltet)....habe die Ports schon alle an den Atmeg32 angepasst. 
Jemand ne Idee?

von holger (Gast)


Lesenswert?

>in der while an PORT D5 eine LED angeschlossen um zu sehen, ob das
>Programm überhaupt abgearbeitet wird. Aber es passiert nichts und die
>LED leuchtet dauerhaft(wird am Anfang des Programms
>eingeschaltet)....

Also wird es bei einer dieser Funktionen hängen bleiben:
1
   
2
  usart_init(600);
3
  
4
  rf22_init();
5
  rf22_setfreq(RF22FREQ(869.545));
6
7
  rf22_rxmode();

Jetzt kannst du dich doch schrittweise der problematischen
Funktion nähern. Fang oben an die LED nach einer Funktion
abzuschalten. Wenn sie nicht mehr ausgeht hast du die
Funktion gefunden wo du weiter suchen musst.

>habe die Ports schon alle an den Atmeg32 angepasst.

Und dabei vermutlich Fehler gemacht.

>Jemand ne Idee?

Mit dem bisschen Code: Nein.

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hab ich gemacht...
Komme jetzt in die While rein, bleibe dann aber bei...
cnt = rf22_getpacket(rx_tmp);
 hängen...danach lässt sich die LED nicht mehr abschalten...

von holger (Gast)


Lesenswert?

>Komme jetzt in die While rein, bleibe dann aber bei...
>cnt = rf22_getpacket(rx_tmp);

Mit einmal kommst du doch bis in die while(1)?
Wieso geht das jetzt und vorher nicht?
Na, da ist wohl mehr im Busch als man denkt.

Dir ist klar das dein RFM22B nur bis 3.6V arbeitet?
Hoffentlich läuft dein ATMega32 nicht mit 5V.
Es sei denn du hast Pegelwandler dazwischen.

Wie sieht noch mal dein Schaltplan aus?

von Peter (Gast)


Lesenswert?

Beim Sender läuft der Atmega mit 3,3V. Beim Empfänger mit 
5V....Verdammt. Über haupt nicht drauf geachtet, da ich die anderen Ein- 
und Ausgänge alle mit 5V betreibe. Also brauch ich einen 
Pegelwandler....gut. Danke für die schnelle Antwort.

von Peter (Gast)


Lesenswert?

Hallo
habe jetzt einen Pegelwandler zwischen dem Funkmodul und dem 
Atmega.....trotzdem noch das selbe Problem. Kann nichts Empfangen. 
Bleibe immer noch an der selben Stelle hängen....

von Mike (Gast)


Lesenswert?

Peter schrieb:
> habe jetzt einen Pegelwandler zwischen dem Funkmodul und dem
> Atmega.....trotzdem noch das selbe Problem. Kann nichts Empfangen.

Und das Modul hat die 5V gut überstanden?

von Peter (Gast)


Lesenswert?

Sind diese Funkmodule denn sehr empfindlich was das angeht?

von Stefan B. (sibbl) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi Peter,

anbei mal ein komplettes Programm, so wie bei es mir funzt. Nicht 
perfekt, aber es läuft. Ist noch ein CO2-Sensor eingebunden, mußt dirs 
halt zurechtmodeln.

Ist noch ein Schaltplan dabei, wie man einen 5V-Atmega mit einem 3.3V 
RFM12B-Modul verbindet (die Ports passen aber glaub ich nicht alle). 
Schauste in der rfm12.h nach.

Vergesse den 100nF Kondensator direkt am Empfangs- UND Sendemodul 
zwischen GND und VSS nicht. Dann sollte es laufen.

Gruss

von Peter (Gast)


Lesenswert?

Danke für das Programm Stefan.....
Sender läuft einwandfrei....Empfänger natürlich immer noch nicht(liegt 
aber nicht am Programm). Mir ist aufgefallen: Ich kann auf den 
Datenleitungen zwischen dem Atmega32 und dem Funkmodul nichts messen 
bzw. messe ich nur Müll, aber keine vernünftigen Pegel.

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

Hast es so verdrahtet wie auf dem Beispielschaltplan?
Dein Spannungsteiler ist korrekt? Müssen jetzt nicht die gleichen 
Widerstände sein wie auf dem Schaltplan, aber auf 3,3V sollte es schon 
rauskommen.

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

Ja hab ich....
Ob das Funkmodul die 5V eventuell doch nicht überlebt hat(hatte das 
letzte Woche nicht beachtet und einige male ohne Pegelwandler 
programmiert)?

von Peter (Gast)


Lesenswert?

Pull Up Widerstand und Kondensator sind auch dran....

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

Irgendwo glaube ich mal gelesen zu haben, dass die Dinger nicht so 
empfindlich sein sollen. Steht iwo hier im Forum. 100nF direkt am Modul 
zwischen GND und VSS auch dran?

von Peter (Gast)


Lesenswert?

Ja hab ich auch gemacht....glaube das Modul ist Kaputt, habe gerade mal 
eine Datenleitung vom Modul getrennt und konnte dann auch einen sauberen 
Pegel von 3,3V messen. Mit Modul habe ich irgendwas mit 0,6V gemessen...

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

Dann ein neues bestellen und nochmal testen...

von holger (Gast)


Lesenswert?

>Mit Modul habe ich irgendwas mit 0,6V gemessen.

Sowas misst man gerne mal wenn das Modul keine Spannungsversorgung hat;)

von Peter (Gast)


Lesenswert?

holger schrieb:
> Sowas misst man gerne mal wenn das Modul keine Spannungsversorgung hat;)

Doch Spannungsversorgung ist dran....

Hab jetzt ein neues Modul und immer noch das selbe Problem....

von Peter (Gast)


Lesenswert?

Messe immer noch absoluten Mist, wenn ich die Datenleitungen vom 
Atmega32 mit dem Funkmodul verbinde....Trenn ich das Modul von den 
Datenleitungen, hab ich saubere 3.3V

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

Mach mal zwei Fotos von Deinem Aufbau. Vorder- und Rückseite.

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Moin...
Hab alles auf einem Steckbrett aufgebaut.

von Peter (Gast)


Lesenswert?

Links oben auf dem Brett ist der Sender...Unten rechts der Empfänger. 
Links neben dem Empfänger ist der Pegelwandler. Rechts neben dem 
Steckbrett liegt die Platine mit dem Atmega32, der mit dem Empfänger 
kommunizieren  soll.

von Hanns-Jürgen M. (yogy)


Lesenswert?

@Peter (gast) Sehe ich da einen Arduino MINI/NANO zur Steuerung? Der 
beinhaltet auch einen 3,3 V Regler für einen RFM

Hast Du Deinem RFM auch eine Antenne vepaßt?

@altera  Es gibt auch 5-V RFM-Module bei Pollin...
und für die restliche Beschaltung habe ich kleine Platinchen entworfen, 
die mit oder ohne 3,3, V Regler für RFMs geeignet sind. Und zwar einen 
für den RFM12b und eine für den Power-RFM (RFM12BP). Falls einer 
Interesse hat (Schaltbild EAGLE; Layout als Nutzen auch EAGLE) lade ich 
das gerne hoch.

Good Luck, Yogy

: Bearbeitet durch User
von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Läuft jetzt!!!! Danke für eure Hilfe....

Hab da gleich mal die nächste Frage: wollte mir die Daten, die ich 
empfange, auf einem LCD anzeigen lassen....funktioniert aber irgendwie 
nicht richtig.
Hat jemand eine Idee bzw. eine Ahnung was da falsch sein könnte im Code?
Insgesamt soll ein String von fünf Zeichen ankommen....

von Peter (Gast)


Lesenswert?

Das LCD funktioniert....daran liegt es nicht. Es zeigt auch was an, nur 
nicht das was ich Sende...

von Peter (Gast)


Lesenswert?

In rx_tmp müsste doch das drin stehen was ich Sende oder?

von Mike J. (linuxmint_user)


Lesenswert?

> In rx_tmp müsste doch das drin stehen was ich Sende oder?

In der Datei rfm12.h wird die Datei "sensoren.h" mit eingebunden, dort 
findest du den Aufbau der Datenstruktur.
1
typedef union _datenblock
2
{
3
 uchar data[16];
4
 struct
5
  {uchar n;               //Laenge des Datenpakets
6
   int id;                //Eindeutige Nummer des Senders
7
   int temp1,temp2,temp3,temp4;//die beiden Temperaturen in AchtelgradC.
8
   uint batt;            //Batteriespannung in Millivolt
9
   long zaehler;         //Aufsummierte Temperaturdifferenzen
10
   uchar sec,min,stu;    //aktuelle Zeit des Senders
11
  };
12
} datenblock;


Hier wird das Datenpaket gesendet:
1
    rfm12_senden(antwort.data);

und hier empfangen:
1
    err=rfm12_empfang(block.data);
2
    id=block.id;

Also sind die empfangenen Daten in "block.data" welches 16 Byte groß 
ist.
Die zugehörige Struktur ist 20 Byte groß ... komisch.

In dem Archiv "Funkthermometer_RFM12b.zip" kann man eine Datei "rfm12.c" 
finden in der ganz unten ein vereinfachtes Beispiel steht.

von Peter (Gast)


Lesenswert?

Mike J. schrieb:
> und hier empfangen:    err=rfm12_empfang(block.data)

OK, ja danke. Hatte jetzt ein anderes Programm verwendet und zwar das 
Beispielprogramm von Ulrich-Radig. Da sah es ungefähr genauso aus:
cnt=rfm22_getpacket(rx_tmp); etwas weiter oben hab ich die c datei als 
Anhang.
wie kann ich mir dann die empfangenen Daten auf einem LCD anzeigen 
lassen?
SO:  err=rfm12_empfang(block.data);
     lcd_string(block.data);

von Mike J. (linuxmint_user)


Lesenswert?

> wie kann ich mir dann die empfangenen Daten auf einem LCD anzeigen
> lassen?
> SO:  err=rfm12_empfang(block.data);
>      lcd_string(block.data);

Dieses "data" ist ja wahrscheinlich einfach nur ein Array mit einer 
bestimmten Länge, z.B. 16 Zeichen.
Wenn die Daten in dem Array als String angesehen werden sollen, dann 
musst du am Ende eine Null hinzufügen.

Wenn du das Datenpaket beim versenden gleich am Ende mit einer Null 
bestückst, dann wird dieses "lcd_string(block.data);" so funktionieren.


//----------------------------
Dieses Stück Code kopiert die Zeichen in ein neues Array, an die Stellen 
0 bis 15 (=16 Zeichen) und erstellt an der 16. Stelle des neuen Strings 
eine Null.
(das ist natürlich sinnlos wenn du nur 3 Zeichen überträgst, dann stehen 
an den Stellen 3 bis 15 nur Müll)
1
uint8_t meinArray[17];
2
uint8_t i = 0;
3
for(i = 0; i<16; i++)
4
{
5
    meinArray[i] = block.data[i];
6
}
7
meinArray[16] = 0; // Null (String-Terminierung)

Wenn du die Zahl 16 in dem Code durch eine Variable ersetzt welche die 
Länge deines Strings enthält (z.B. 3), dann funktioniert das auch mit 
einer variablen Zeichenkette.

von Georg G. (df2au)


Lesenswert?

String mit 0x00 abschliessen.
Sind die empfangenen Zeichen druckbar?

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

Wenn Du Dir einmal das Programm angeschaut hättest, welches ich gepostet 
habe, würden sich 3/4 Deiner gestellten Fragen erübrigen. Ach ja, 
bißchen Hirn solltest Du noch einschalten ;-)

Gruss

von Mike J. (linuxmint_user)


Lesenswert?

Hallo Peter (Gast),
lass dich nicht ärgern, aber schau dir trotzdem das Programm von "Stefan 
B." an ... es ist immer recht unschön wenn man sich die Mühe macht sein 
Programm hier zu posten und es dann quasi nicht genutzt wird.

Sag dann mal Bescheid ob es dir gelungen ist die versendeten Daten auf 
dem LCD anzuzeigen.

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.