Moin, ich habe eine dummes Problem mit dem Timer0 (?), dessen Ursache ich einfach nicht erkenne. Gegeben ist eine Steuerung (4 MHz), die in Abhängigkeit von einigen Schaltern, Tastern und analogen Sensoren 3 Verbraucher schaltet. An die Steuerung ist ein 4x20-Display angeschlossen. Die Hauptschleife benötigt derzeit ca. 400msec für einen Durchlauf. Timer2 ist als einfacher Timer mit Überlauf-Interrupt (40msec) konfiguriert, umfasst das Hochzählen einer Variablen und eine Handvoll einfacher Vergleiche; Codelänge knapp 20 Instruktionen, kein Funktionsaufruf. Timer1 ist ebenfalls ein einfacher Timer mit Überlauf-Interrupt. Er liefert einen 1sec-Takt für diverse Zeitsteuerungen; Codelänge ca. 100 Instruktionen, kein Funktionsaufruf. Die Zeitsteuerung funktioniert einwandfrei bis auf die folgende Ausnahme: Timer0 zählt Flanken am Eingang T0 und soll als 'rudimentärer' Frequenzzähler (max. ca. 1kHz) dienen. Die Flanken werden, gesteuert von Timer1 1 Sekunde lang gezählt. Initialisierung von Timer0: { TCCR0 = 0x00; TCNT0 = 0x00; OCR0 = 0x00; TCCR0 = 0x07; } Interrupt-Routine Timer0: { TCNT0 = 0x00; iFrequenz += 256; } 'Messung' in Timer1: { ... iFrequenz += TCNT0; iSpeed = iFrequenz; //Übergabe an main() iFrequenz = 0; TCNT0 = 0x00; ... iFrequenz und iSpeed sind globale Variablen; unsigned int, 2 Byte, 0 - 65xxx. Das Problem: Ab und an wird der korrekte Wert angezeigt. Aber obwohl das Signal ständig anliegt (Messung per Oszi), eben nicht ständig. Teilweise wird die korrekte Frequenz im Wechsel mit 0 angezeigt, teilweise im Wechsel mit irgeneiner Zahl. Dabei schliesse ich einen int-Überlauf aus. Warum funktioniert das nicht? Wass habe ich übersehen? Vielen Dank im Voraus, Udo
Moin, der µC war offensichtlich defekt. Mit einem neuen µC funktioniert es einwandfrei. Shit happens ;-) Udo
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.