Drehgeber mit Mega8 - zu wenige Timer?!

OP #2300044
Lesenswert?
• ▲
▼
Hey,

ich habe eine Temperaturüberwachung mit einem Mega8 gebaut. Am Mega8 
hängt ein LCD (20x4), 4 Temperatursensoren (KTY-222, PC0/ADC0 - 
PC3/ADC3), ein Transistor für nen Lüfter (PWM, PB3/OC2), eine DUO-LED in 
rot/blau als Hintergrundbeleuchtung (PWM, blau = PB1/OC1A, rot = PB2 = 
PB2/OC1B) und ein STEC11B03 Drehgeber (PD2/INT0 - PD3/INT1).

Vorerst will ich nur einen Wert am LCD ausgeben, welchen ich mit dem 
Drehgeber verändern kann. Habe jetz aber schon mehrere Vorschläge 
probiert (auch http://www.mikrocontroller.net/articles/Drehgeber), es 
aber immernoch nicht hinbekommen. Hier erst mal mein Code, die Teile zur 
Temperaturmessung, Lüftersteuerung etc. hab ich mal rausgenommen: 
http://nopaste.info/26ecdb16a1.html

Ich denke, das Problem liegt irgendwo zwischen Zeile 30 - 32. Sobald ich 
TIMSK nicht als Kommentar schreibt läuft gar nichts mehr, keine LCD 
Ausgabe etc.

Bei OCR0 meckert er, was ja klar ist, weil es das beim Mega8 nicht gibt. 
Aber womit soll ich das ersetzten?

Wär über nen Tipp sehr dankbar, da ich grad echt nicht weiter komm und 
ich auch in den Datenblättern von Mega8 und Mega16 nicht über das 
richtige gestolpert bin...
#2300296
Lesenswert?
• ▲
▼
Christian Wächter schrieb:

> Temperaturmessung, Lüftersteuerung etc. hab ich mal rausgenommen:
> http://nopaste.info/26ecdb16a1.html

Und du denkst ernsthaft, in einem Programmiererforum darf man keinen 
Source Code posten? Ich war mal so frei.

>
> Ich denke, das Problem liegt irgendwo zwischen Zeile 30 - 32. Sobald ich
> TIMSK nicht als Kommentar schreibt läuft gar nichts mehr,

logisch. Du gibts den Overflow Interrupt frei, hast aber einen Handler 
für den Compare Interrupt. Und kaboom. Aufruf einer ISR, die nicht 
existiert wird mit einem Prozessor-Reset bestraft.

weiter hab ich dann nicht mehr geschaut.
Angehängte Dateien:
Gast #2300299
Lesenswert?
• ▲
▼
Hallo,

> Ich denke, das Problem liegt irgendwo zwischen Zeile 30 - 32.

Halb richtig; es scheint eine Diskrepanz zwischen dem freigegebenen 
Timer0-Interrupt (Zeile 34) und der ISR (Z.37) zu sein. Sie passen nicht 
zusammen (Overflow-Int freigegeben, die ISR ist für den Compare- 
Interrupt). Das geht nicht gut ...
Lösung: den ISR-Vektor auf Overflow-Interrupt umstellen. (Im Tutorial 
ist es richtig.)

> Bei OCR0 meckert er, was ja klar ist, weil es das beim Mega8 nicht gibt.

Logisch, Timer0 hat keine Compare-Einheit ...

> Aber womit soll ich das ersetzten?

Wenn man die Funktionsweise der Geber-Abfrage verstanden hat, sollte das 
Konfigurieren von Timer0 auch ohne Compare-Register kein Problem 
darstellen; im Tutorial stehen genug Kommentare. (Tip: im Tutorial wird 
der Timer alle 1ms die ISR aufrufen. So muss dein Timer0 incl. Prescaler 
konfiguriert werden.) Die leichte Abweichung zu 1ms bei korrekter 
Einstellung kann vernachlässigt werden (ich komme auf 1,024 ms).
OP #2300753
Lesenswert?
• ▲
▼
Also gut, habe es jetzt nochmal überarbeitet und zum laufen bekommen. 
Folgendes hab ich geändert:

1) ISR( TIMER0_COMP_vect ) musste man zu ISR( TIMER0_OVF_vect ) ändern
2) Die internen Pull-Up Widerstände aktivieren (habe keine externen 
vorgesehen. Leichtsinnsfehler...
3) TCCR0 =  (1<<CS01) | (1<<CS00); Ich verstehe zwar nicht ganz warum, 
aber es geht. Damit habe ich einen Prescaler von 64. Bei 4 MHz komm ich 
damit auf eine Verzögerung von 0,004 ms, oder hab ich da nen 
Rechenfehler?

Na ja, jetz läuft es wunderbar (STEC11B03 is n 2 Schritt Decoder ;-P ), 
also danke für die Denkhilfe.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.