www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-Tutorial: Tasten entprellen und Autorepeat


Autor: Jörg S. (mitchell)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin gerade dabei den Code im Tutorial zu testen.
die Funktionsweise ist mir mittlerweile schon klar, aber was ich noch 
nicht verstehe ist der folgende Auszug.

.equ XTAL  = 4000000

timer_overflow0:               ; Timer Overflow Interrupt

    push    r16
    ldi     r16, -( XTAL / 1024 * 10 / 1000 + 1 )
    out     TCNT0, r16
    pop     r16

Wieso wird in den Timer der Wert -40 geladen,( wenn ich richtig 
gerechnet habe)?
Das ist doch das selbe, wie wenn man den den Wert 216 (256-40)nehmen 
würde.
Das steht jedenfalls in r16 nach ldi.
Wieso einen negativen Wert und welche Zeit soll damit eingestellt 
werden.
währe supper, wenn mir das mal jemand erklärt.

mfg
Jörg

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Kommentar im Tutorial ergänzt: AVR-Tutorial: Tasten. 
Die "+1" ist allerdings falsch.

Eine Erklärung wie das mit dem Timer-Vorladen genau funktioniert fehlt 
im Moment noch im Timer-Kapitel.

Autor: Jörg S. (mitchell)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das es 10ms sein sollten konnte ich mir an hand der Schreibweise schon 
fast denken, aber das mit dem -40, (jetzt nur noch -39), ist mit noch 
unklar.

mfg
Jörg

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
39 ist die Anzahl der Timer-Ticks die für die 10ms benötigt werden.
Da hier der Overflow- und nicht der Compare/Match-Interrupt verwendet
wird muß der Wert vom Zählerhöchststand abgezogen werden.
Also "Anzahl Ticks bis Überlauf".

-1 bedeutet bei 8Bit Registern 255. Und '0 - 39' ist gleich '255 - 38'.
Die Null kann man auch weglassen.

Autor: Jörg S. (mitchell)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ja, jetzt ist mir da ein Licht aufgegangen.
Anders ausgedrückt, der Timer beginnt bei 216 und zählt bis zum Überlauf 
auf 0, also bis zum Overflow, das sind dann 40 Timer-Ticks.

Vielen Dank für die Erleuchtung.

mfg
Jörg

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.