Forum: Mikrocontroller und Digitale Elektronik Compare Match Fehlermöglichkeiten


von Sven (Gast)


Lesenswert?

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
ISR (TIMER1_COMPA_vect){
2
DisplayBuffer[1] = OCR1A;
3
DisplayBuffer[2] = TCNT1;
4
DisplayBuffer[3] = ulTimeToCompareMatch;
5
slDifferenz = ulTimeToCompareMatch - OCR1A;
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.

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.