Hallo zusammen, ich habe ein Programm geschrieben, um ein IR-Signal zu dekodieren und die übertragenen Daten auf einem 4x7 LED Display anzuzeigen. Code siehe Anlage. Leider habe ich das Phänomen, dass das Programm nicht zuverlässg funktioniert, sondern eher "sporadisch" - d. h. ich sende immer wieder das gleiche Signal, und so in der Hälfte der Fälle wird es richtig entschlüsselt und angezeigt (State Machine zum Empfang durchlaufen) - in der anderen Hälfte nicht (leider erkenne ich keine wirkliche Regelmäßigkeit...). Manchmal scheint das Programm aus dem Modus 1 "Anzeige Ergebnis" nicht mehr richtig in den Modus 0 "IR-Signal empfangen" zurück zu kommen. Ich hatte vor ein paar Tagen schon mal ähnliche Probleme, die auf verschiedene Anfängerfehler zurückzuführen waren (siehe Thread Beitrag "Compiler Optimization Level (-O1) ändert Ablauflogik?") Nun denke ich, alle Eure Hinweise beachtet zu haben und finde (wieder mal) partout keine Fehler im Programm... Ist da noch ein genereller Fehler in der Ablauflogik und/oder Interruptsteuerung drin, so dass das Programm nur "auf gut Glück" mal funktioniert? Und noch ein Randproblem: Ich habe eine Schleife zur Ausgabe der empfangenen Daten: <c>for (i=0;i<4;i++) { displayZahl(datenbyte[i],dauer); _delay_ms(500); }</c> Da ist es so, dass manchmal (unregelmäßig) zwei Zahlen ohne die gewünschte Pause von einer halben Sekunde angezeigt werden... Hat jemand eine Idee? Vielen Dank!
Axel Schwenke schrieb: > Gibt es eigentlich irgendeinen Grund, warum du nicht IRMP > > verwendest? Ja, gibt verschiedene Gründe: ich möchte (später mal) einen eigenen Sender und Empfänger für verschiedene ferngesteuerte Anwendungen basteln (z. B. Weichensteuerung LEGO-Eisenbahn). IRMP ist mir für diesen Zweck zu "mächtig", d. h. es kann viel mehr als ich benötige. Und vor allem möchte ich das Programm verstehen - habe bei IRMP bei Zeile 2578 aufgegeben ;-) Und last but not least: Bin ziemlicher Anfänger und möchte vor allem was lernen...
... oder - bevor du alle mit deinen 13K Programm-Code abschreckst, erst mal erzählst, wie dein Algorithmus funktionieren SOLL? Entweder geht man LOGISCH falsch ran, da gibts hier bestimmt genug Unterstützung. Oder man hat Probleme mit SYNTAX und AUSFÜHRUNG: Dann ist es besser, man programmiert erst mal die grundsätzlichen Programmteile einzeln und testet sie. Mit KONKRETEN Problemen in einzelnen Programmteilen findet sich auch schnell jemand, der in einem ÜBERSCHAUBAREN Programm-Abschnitt nach Fehlern sucht.
Bernie schrieb: > ... oder - bevor du alle mit deinen 13K Programm-Code > > abschreckst, erst mal erzählst, wie dein Algorithmus > > funktionieren SOLL? das hatte ich in dem referenzierten Thread gemacht: Mike schrieb: > siehe Thread > > Beitrag "Compiler Optimization Level (-O1) ändert Ablauflogik?" ok, war etwas missverständlich, sorry. Bin aber gerade dem Fehler auf der Spur (so hoffe ich) - so dass ich es vielleicht selbst schaffe - bin da schon ein paar Tage dran... :-( Bernie schrieb: > Mit KONKRETEN Problemen in einzelnen Programmteilen findet > > sich auch schnell jemand, der in einem ÜBERSCHAUBAREN > > Programm-Abschnitt nach Fehlern sucht. Leider lässt sich die Problemstelle beim IR-Dekodieren nicht so leicht eingrenzen, aber vielleicht finde selbst noch was. Aber ein ganz konkretes Problem bei der Anzeige der Ergebnisse: <c>for (i=0;i<4;i++) { displayZahl(datenbyte[i],dauer); _delay_ms(500); }</c> Wie kann es passieren, dass z. B. zwischen der ersten und zweiten (oder dritten und vierten) Zahl KEINE Pause von einer halben Sekunde eingelegt wird? Hier habe ich keinen Schimmer, das ist ja sehr "atomar" und wüsste auch nicht was/wie ich da noch eingrenzen und testen könnte...
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.