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?
>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.
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...
>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?
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.
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....
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?
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
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.
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.
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)?
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?
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...
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....
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
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.
@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
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....
> 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
typedefunion_datenblock
2
{
3
uchardata[16];
4
struct
5
{ucharn;//Laenge des Datenpakets
6
intid;//Eindeutige Nummer des Senders
7
inttemp1,temp2,temp3,temp4;//die beiden Temperaturen in AchtelgradC.
8
uintbatt;//Batteriespannung in Millivolt
9
longzaehler;//Aufsummierte Temperaturdifferenzen
10
ucharsec,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.
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);
> 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_tmeinArray[17];
2
uint8_ti=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.
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
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.