www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CTC Timer funktioniert im Studio auf MEGA128 nicht


Autor: Thomas Krug (dlt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

hab mich jetzt schon lange mit dem timer gespielt aber komme auf keinen 
gruenen zweig

ev. kennt ja jemand das problem

16 bit timer1 wird initialisiert auf 1s@16mhz und CTC

im interrupt wird bei time jeweils 1s dazugezaelt

im studio wird auch perfekt jede sekunde ein interrupt ausgeloest rest 
ist auch ok

auf µC wird nur einmal 1s gewartet danach wird immer sofort der 
timer-interrupt ausgeloest!

hab ich was uebersehen? gibts da ev. noch so was wie ne dumme fuse die 
ich setzen stellen muss dass er gleich arbeitet wie im studio

die Mega103 kompatibilitaets fuse hab ich schon richtig gesetzt

anbei gesammter code, gut dokumentiert

vielen dank!!

thomas

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wird das Interruptflag zurückgesetzt ????
Muß der Timer neu geladen oder gestartet werden ???

Bin mit AVR nicht so sehr vertraut.
Sind aber so die üblichen "Verdächtigen "

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst das Compare-Register OCR1A bei der Initialisierung in der 
falschen Reihenfolge! Du musst beim Schreibzugriff erst das High-Byte 
und dann das Low-Byte schreiben. Wundert mich eigentlich, dass da 
überhaupt was  mit einer Sekunde rauskommt, wenn auch nur einmal.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...Das selbe gilt übrigens auch für TCNT1, wobei das in diesem Falle 
egal ist, weil eh null reinkommt. Schau Dir im Datenblatt mal den 
Abschnitt "Accessing 16 Bit Registers" an (der steht irgendwo bei der 
Beschreibung der Timer). Grundsätzlich gilt bei (den meisten) 
16-Bit-Registern:

Lesen: erst Low-, dann High-Byte
Schreiben: erst High-, dann Low-Byte

Das liegt daran, dass diese Register synchron über ein temporäres 
Register bearbeitet werden und beim Zugriff auf das Low-Byte jeweils 
beide Teilregister verarbeitet werden.

Beim Lesen bedeutet das, dass beim Zugriff auf das Low-Byte gleichzeitig 
das High-Byte in das temporäre Register geladen wird. Wird jetzt das 
High-Byte gelesen, greift man nicht direkt auf das High-Byte, sondern 
auf dieses temporäre Register zu.

Beim Schreibzugriff gilt das ganze dann umgekehrt: Schreibt man das 
High-Byte, wird der Wert in das temporäre Register übernommen. Erst in 
dem Moment, in dem das Low-Byte geschrieben wird, werden beide Teile 
synchron in die Timer-Register geschrieben.

Bei Deiner Version im Programm wird das Low-Byte übernommen, während Du 
das High-Byte anschließend in das temporäre Register schreibst, wo es 
bleibt, da das Low-Byte im Anschluss nicht mehr geschrieben wird.

Autor: Thomas Krug (dlt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann ich erst am abend probieren,
bin zuversichtlich...
falls es was anderes war, meld ich mich am dienstag wieder

VIELEN DANK!


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.