Hey,
ich nutze einen Atmega 328p zur Aufnahme von Sensorwerten, welche
mittels eines NRF24L01 Funkmoduls an einen anderen µC übertragen werden
sollen.
Dabei treten ein paar Schwierigkeiten auf, auf die ich mir keinen Reim
machen kann.
Zur Übersicht teile ich untersuchte bzw. eingegrenzte Szenarios ein:
1. Die int-Werte der Sensoren werden in Strings umgewandelt und gesendet
1.1 Nach dem Programmieren mit ISP:
-funktioniert einwandfrei
1.2 Erneutes Einschalten zu einem beliebigen Zeitpunkt:
-funktioniert einwandfrei
2. Die Strings werden noch ein wenig umgewandelt (hinzufügen von Kommata
etc)
2.1 Nach dem Programmieren mit ISP:
-funktioniert einwandfrei
2.2 Erneutes Einschalten zu einem beliebigen Zeitpunkt:
-Programm läuft ein einziges mal ansatzweise durch, aber
scheint Fehler zu verursachen. Auch ein Reset bringt
nichts.
Ich hatte irgendwie an den RAM gedacht, aber soweit ich es beurteilen
konnte, sollte es da keine Probleme geben. Die SuFu hat einige ähnlichte
Fälle gefunden, bei denen das Programm nur direkt nach dem Programmieren
sauber lief, aber einen problemlösenden Ansatz für meinen Fall konnte
ich leider nicht finden.
Habt ihr vielleicht Ideen wo das Problem genau liegen könnte?
Viele Grüße
Daniel
Das RAM wird beim Programmieren über ISP gelöscht. Wenn Dein Programm schon mal gelaufen ist und Du nur einen Reset auslöst oder aber der Controller neu eingeschaltet wird, ist der zustand des RAMs undefiniert. Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte Werte definiert zu beschreiben.
Daniel H. schrieb: > Habt ihr vielleicht Ideen wo das Problem genau liegen könnte? Das wird an deinem Programm liegen. Von selbst macht ein µC gar nichts - nicht mal direkt nach dem Flashen.
Jawoll schrieb: > Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte > Werte definiert zu beschreiben. Das werde ich gleich mal testen, sobald ich die Gelegenheit habe - danke! google schrieb: > Wo ist das Programm? Ich könnte den Code gleich mal hochladen, aber momentan sieht das wahrscheinlich etwas chaotisch aus, sodass ich mir dafür erst mal was anhören müsste ;x. Ich finde es nur merkwürdig, dass eine Änderung am String das oben genannte Fehlerbild erzeugt.
Möglicherweise ist dein String zu kurz und es wird über das Ende des Speicherbereichs hinausgeschrieben oder eine Variable wird nicht initialisiert. Schau mal auf eventuelle Warnungen, die der Compiler ausgibt.
MikeH schrieb: > Möglicherweise ist dein String zu kurz und es wird über das Ende des > Speicherbereichs hinausgeschrieben oder eine Variable wird nicht > initialisiert Das hatte ich eigentlich schon überprüft, aber ich checke es nochmal sobald ich daheim bin. Wenn ein string zu kurz initialisiert wird, sollte es dann nicht auch direkt nach dem Programmieren durch den ISP zu Fehlern kommen?
So, hier ist der verwendete Code. Die Datei iO.c kennzeichnet das Programm das immer funktioniert. Unter niO.c ist das Programm zu finden, das immer nur direkt nach dem Programmieren funktioniert. Der einzige Unterschied ist der mittlere Teil zur Anpassung der Strings, der bei iO.c auskommentiert wurde. Jawoll schrieb: > Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte > Werte definiert zu beschreiben. Den RAM komplett auszunullen versuche ich, sobald ich herausgefunden habe wie das geht. Viele Grüße Daniel
Hallo Ein String muss mit einer 0 terminiert werden Bei deinen handgemachten Strings machst du das nicht Bernhard
Bernhard schrieb: > Ein String muss mit einer 0 terminiert werden oh, du meine Güte... du hast natürlich Recht. Die Fehlersymptomatik hat mich überhaupt nicht an sowas denken lassen. Das Programm funktioniert jetzt wie gewünscht. - auch wenn ich gerne verstehe würde warum der fehlerhafte Code jedesmal nur direkt nach dem Programmieren funktioniert hat Vielen Dank für die Hilfe!
Daniel H. schrieb: > auch wenn ich gerne verstehe würde warum der fehlerhafte Code > jedesmal nur direkt nach dem Programmieren funktioniert hat weil vermutlich beim ersten Durchlauf noch Nullen im RAM-Bereich nach deinem String steht. Bei den weiteren versuchen steht da aber irgendwelche undefinierten Werte drin du schickst das Ding ins Nirwana.
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.