www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M32 Timer läuft nicht


Autor: Der Zeitlose (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Im angehängten Coder soll durch einen Drehgeber (Panasonic EVEQDBRL416B) 
die 7-Segment-anzeige verändert werden. Funktionierte anfangs auch, 
abgesehen davon, dass die Anzeige machte was sie will. Neuerdings wird 
aber nichtmal mehr der Interrupt ausgelöst (getestet mit hochzählen 
einer Variable im Interrupt), sonder er Zeigt kontinuierlich "0" an. 
Nein,  das mittlere Segment  ist wirklich aus, ein schnelles 
Durcheinander ist es also nicht.

Der Code ist aus http://www.mikrocontroller.net/articles/Drehgeber und 
siebzehn mal Kontrolliert. Wer kratzt mir die Tomaten von den Augen?

MfG,
Tomate

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pullups aktiv?

Autor: Der Zeitlose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind aktiv, hatte ich nur mal zu Testzwecken ausgemacht. Änderte aber 
nichts ob mit oder ohne. Wie gesagt, der Timer läuft nicht, aber warum?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du diese Zeile in main() erläutern? Läuft auf Jörgs Frage hinaus 
:-)
>   PINA=0x00;

Um das Programm im Simulator zu testen, wären Angaben zum Drehencoder 
hilfreich: Wie ändern sich PA6 und PA7 in etwa zeitlich. Mit dieser Info 
könnte man eine Stimuli-Datei anlegen. Wenn du bereits eine 
Stimuli-Datei hast, her damit.

Die ISR( TIMER0_COMP_vect ) wird wie im Programm kommentiert im Sim alle 
1ms aufgerufen.

Watchdog ist aus, Brownout ist an, Stromversorgung OK? Findet ein Reset 
statt? Eventuell im Artikel Watchdog nachlesen wie man vor main() 
eine Resetursache ermittelt.

Bei der Berechnung von enc_delta in der ISR würde ich einen Angstcast 
hinzufügen: enc_delta += (int8_t) pgm_read_byte(&table[last]);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Vermutung, dass irgendwas mit dem Timer nicht stimmt, würde ich 
mal losgelöst vom Drehencoder verifizieren. In der ISR eine LED 
einschalten. Das genügt dann schon als Nachweis, dass die ISR aufgerufen 
wird.

(Ich seh zwar keinen Grund warum das auch nicht so sein sollte, aber es 
beruhigt nun mal.)

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.