Forum: Mikrocontroller und Digitale Elektronik Mega16 Timer0-Problem


von Udo Z. (Gast)


Lesenswert?

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

von Udo Z. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.