www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CTC-Mode ISR-Problem


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: dr.prof.schlau (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mir die S-65 LCD-Library vom mp3-player 
(http://www.my404.de/index.php?&main=Software&sub=A...) 
für ein eigenes Projekt "ausgeliehen".
(An dieser Stelle großen Dank und Respekt an die Autoren!) Das ganz 
läuft auf einem ATMega644.
Nach dem Start des Programms wird etwas auf dem LCD angezeigt und auf 
eine Tastatureingabe gewartet. Dies passiert zyklisch in der ISR des 
Timers1 durch den Aufruf der Funktion: gui_elements_thread(); --> s. 
Anhang gui_elements...
Der Timer-Init für die ISR geschieht in der global.c.
Nehme ich die originale Version der Autoren (alt_global.c/Timer1) geht 
alles wunderbar und die Tastendrücke werden wie gewünscht ausgeführt.
Da ich aber den Timer1 später für eine andere Funktion benötige, wollte 
ich den Timer0 für diesen Zweck heran führen.
Der Init (neu_global.c/Timer0) hat die gleichen Voraussetzungen: 
Prescaler 1024, CTC, OCR=244
Zur besseren Übersicht habe ich die xy_global.c gekürzt. Bei meiner 
Version wird aber kein Tastendruck erkannt bzw. keine ISR ausgeführt.
Woran liegt das? Erkennt jemand von euch den Fehler?

Gruß
Michael

Autor: dr.prof.schlau (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Zusatz:

die Variable GLOBAL_TIMER_DIVISOR = 40
OCRx...Ergibt bei 10Mhz ca. 244

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
dr.prof.schlau schrieb:
> Der Init (neu_global.c/Timer0) hat die gleichen Voraussetzungen:
> Prescaler 1024, CTC, OCR=244

Nö. Weder hast du Prescaler 1024, noch den CTC-Mode eingestellt.

Autor: dr.prof.schlau (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Stefan,

vielen Dank.
--> WGM01 ist in TCCR0A, nicht in TCCR0B.
UND:
Ich habe die Umstellung zuerst mit Timer2 gemacht und die Clockselect 
übernommen. Bei Timer2 (auch ein 8-Bit Timer) ist der Prescaler 1024 mit 
111 angegeben. Auch wenn ich die CS richtig angeben hätte (101), hätte 
die WGM01 in TCCR0B einen "Extern Clock" eingestellt. Auweia.
Verdammt, manchmal steht man derart auf dem Schlauch, das glaubt man 
einfach nicht. Ich habe zwanzig mal ins Datenblatt geschaut und trotzdem 
diese zwei eklatanten Fehler eingebaut.
Gruß
Michael

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net