www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Counterwert von Timer


Autor: Ruediger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem mit der Initialisierung von Timer0 beim 90AT2313.
Mit dem TCNT0-Register (Counterwert) müsste ich doch eigentlich die
Frequenz an den Port-B-Ausgängen verändern können (siehe Programm).
Allerdings ändert sich die Frequenz nicht, egal was ich für einen Wert
lade. Eine Veränderung vom Teilerwert im TCCR0 ändert meine Frequenz,
der Interrupt ist also offenbar ok. Wer kann mir hier weiterhelfen?

Danke und Gruß

Autor: Toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du änderst den Startwert des Timers aber nur in der Initialisierung.
Wenn dein Interrupt einmal durchgelaufen ist läuft der Timer ganz
normal von 0 bis 255.
Versuch mal den Startwert des Timers in der Interruptroutine neu zu
setzen.
Also so ungefähr:

timer:inc r17
out PORTB,r17
ldi r16,0b11110000
out TCNT0,r16; Counterwert laden
reti

Ich weiss nicht welchen Vorteiler du genommen hast aber wenn er zu
niedrig ist wirst du bei der hohen Taktfrequenz auch keine grossen
Unterschiede sehen.Wenn der AVR von 0 bis 255 bei z.B 8MHZ zählt oder
von 100 bis 255 macht dann Zeitlich keinen sichtbaren Unterschied wenn
du LED's am Port verwendest.

Hoffe ich konnte helfen

Autor: Ruediger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich lade den Counterwert jetzt zusätzlich in der Interruptroutine.
Funktioniert nun einwandfrei.

Danke für die Hilfe!

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber Vorsicht, immer das SREG sichern.
bei Einfachst-ISR-Programmen kann es auch ohne gut gehen. Aber man
sollte sich das gar nicht erst angewöhnen, darauf zu verzichten. Wenn
doch aus Zeitgründen mal drauf verzichtet werden soll, dieses gut
kommentieren, nach ein paar Monaten weisst du es sonst nicht mehr.
Standardprogrammteile dafür:
meist reserviere ich mir ein eigenes Register:
.equ sreg_bak=R1

ISR:
in sreg_bak, sreg
.
.
out sreg, sreg_bak
reti

Alternative:
push r1 (oder irgendein anderes)
in r1, sreg
.
,
out sreg, r1
pop r1
reti

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.