mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega 16 CTC Problem


Autor: Th B. (tbusse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin

Ich habe folgendes Phänomen beim Simulieren einer Anwendung beobachtet. 
Ich initalisiere zuerst den Timer 1, aktiviere den CTC Modus und setze 
einen Grenzwert. Der Zähler läuft dann auch brav los. Danach wird noch 
der Ana_Comp initalisiert und dann werden die Interrupts freigegeben. 
Obwohl der TimerCounter nun ja schon ein paar Takte läuft wird sofort 
nach der Freigabe der CTC Handler angesprungen und die entspr. Routine 
ausgeführt. Warum? Mit hilfe von "seriellen Debugging" beobachte ich das 
scheinbar auch bei der echten Hardware. Nach einem Reset ist ein Zähler 
der in der CTC Isr hochgezählt wird noch Null und wird unmittelbar 
danach erhöht obwohl der TOP Wert noch nicht erreicht ist.

Any hints?

Thomas

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viele Leute hier sind ein bischen wie Compiler. Sie wollen Quellcode 
sehen und können mit mehr oder weniger schwammigen Beschreibungen von 
Code wenig anfangen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du den Grenzwert erst nach dem Initialisieren des Prescalers 
(Starten des Timers) setzt, kann je nach Taktfrequenz für den Timer 
durchaus schon ein Interrupt anstehen, wenn die Interrupt-Bearbeitung 
freigegeben wird! Schließlich ist der Reset-Wert der für CTC infrage 
kommenden Register (OCRnx bzw. ICRn) Null und dementsprechend wird beim 
zweiten Timertakt das Compare-Match-Flag gesetzt.

Autor: Th B. (tbusse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Johannes

Das wars! Vielen Dank, so einfach kann die Lösung sein...

@A.K.

Hätte ich auch gerne gemacht nur dürfen wir zur Zeit keine Wechselmedien 
verwenden wegen einer kleinen fiesen Wurminfektion 8-§ und das Programm 
ist natürlich nicht auf diesem Rechner...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

In welcher Reihenfolge initialisierst du die Register?
Ich könnte mir vorstellen, das wenn der Timer aktiviert wird, bevor OCR 
gesetzt ist als Top 0 angesehen wird. Damit würde das IR-Flag gesetzt 
und nach 'sei' der Interrupt angesprungen. Evtl. nach der 
Initialisierung OCFxy löschen.

MfG Spess

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.