Gast
#2635805
Hallo, ich habe ein Programm geschrieben, welches in ein Compare Match Register Zeit lädt und bei erreichen des Compare Matches etwas tun soll. Das ganze läuft auf einem Atmega8 und betrifft den Timer1 (16-bit) Leider funktioniert das ganze nicht wie es soll und ich möchte den Fehler finden. Das Compare Match tritt manchmal richtig auf (alle Zeiten vernachlässigbar gleich), manchmal aber auch nicht, dann gibt es Differenzen. Der Fehler tritt eher sporadisch auf, d.h. es sind mehr "richtige" Compare Matches, als "falsche". Hierzu habe ich direkt am Beginn der ISR Compare Match die Variablen des OCR1A, TCNT1 und der Vorladezeit (ulTimeToCompareMatch) für das OCR1A Register in ein Buffer geschrieben und lasse diese mir auf einem Display ausgeben. In c quasi so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Nun habe ich folgende Unstimmigkeiten: Fall A: Der Wert von OCR1A unterscheidet sich von TCNT1 und ulTimeToCompareMatch. TCNT1 und ulTimeToCompareMatch sind (vernachlässigbar) gleich (die paar Timertakte zum schreiben der Variablen macht wohl den unterschied) Fall B: ulTimeToCompareMatch verschieden ist von TCNT1 und OCR1A, aber TCNT1 und OCR1A gleich Ich weiß, dass ohne vollständiges Programm der genaue Fehler eine Rätselei mit der Glaskugel ist. Dennoch lassen sich vielleicht mögliche Fehler so finden. Fall A kann ich mir ehrlich gesagt nicht erklären, wieso ein Compare Match auftritt, TCNT1 und OCR1A aber verschieden sein sollen und gleichzeitig TCNT1 mit ulTimeToCompareMatch übereinstimmt. Fall B könnte auftreten, wenn beispielsweise ein anderer Programmteil OCR1A verändert. Kann mir jemand helfen, dieses Gedankenspiel fortzusetzen, wann Fall A und wann Fall B eintreten könnte? Besten Dank.