www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega16 Timer0-Problem


Autor: Udo Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Udo Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

der µC war offensichtlich defekt. Mit einem neuen µC funktioniert es
einwandfrei.

Shit happens ;-)


Udo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.