Forum: Compiler & IDEs Timer - Programmierung!


von Gerald (Gast)


Lesenswert?

Hi!

Ich habe vor kurzem begonnen einen ATMega16 in C zu programmieren.
Jetzt habe ich im Handbuch gelesen, dass es auch einen Timer gibt, doch
leider weiß ich überhaupt nicht wie ich diesen programmieren kann.

Im Grunde zählt das "Ding" ja bis zur einer Obergrenze und löst dann
einen Interrupt aus (im normal mode). Aber wie kann ich jetzt z.B.
sagen, dass er 40 us warten soll bis er die nächste Anweisung ausführt
??

mfg, Gerald

: Gesperrt durch Moderator
von Florian Hrubesch (Gast)


Lesenswert?

Der Timer hat nen (upmode)ctc und nen interrupt der bei einem overflow
ausgelöst wird.
Alles was man wissen muss steht im datasheet unter operating ...
cu Flo

von Alex (Gast)


Lesenswert?

Im Prinzip musst du dir einfach nen Taschenrechner nehmen und anfangen
mit rechnen. Wichtige Größen sind deine Taktfrequenz, der nötige
Prescaler und die Zählgrenze (TOP), an der der Timer wieder auf Null
gesetzt werden soll.
Bsp.:
ftakt = 8 MHz
Prescaler = 8
--> jeder Zählschritt dauert etwa 1/1MHz = 1us
d.h. wenn der Zähler bei 40 angekommen ist, sind 40us vergangen.
Es muss lediglich noch der richtige Interrupt freigegeben werden und
Interrupts global erlaubt sein.
Hoffe, ich konnte helfen.

Alex

von Gerald (Gast)


Lesenswert?

Danke für die schnellen und hilfreichen Antworten.
Jetzt wird mir schon einiges klarer...
Eine Frage nr noch zum Prescaler: Mit dem kann man die Taktfrequenz
sozusagen "skalieren", ist das richtig?

mfg, Gerald

von Florian Hrubesch (Gast)


Lesenswert?

Jo teilt die Taktfrquenz.

von Thorsten (Gast)


Lesenswert?

Wie sieht hierzu jetzt der Code aus für den interrupt und den Prescaler
und wie kann ich diesen Timer dann aufrufen

von Florian (Gast)


Lesenswert?

mc-project.de

Programme -> Timer
ist für den ATMega8 geschrieben, eine Adaption auf andere ATMega's
sollte kein Problem sein.
Prinzipiell hilft aber auch das Datenblatt, dort ist alles haarklein
erklärt!

von Paul (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.
Dazu habe ich auch noch eine Frage. Ich habe das gleiche mit einem 
C8051F060 probiert. Oszillator auf 24.5MHz, Prescaler=1, Interrupt 
freigegeben, Code läuft.

Jetzt möchte ich eine Rechteckschwingung (PIN Toggle) haben, welche mit 
100Hz läuft, d.h. mit 200Hz toggelt. Beim SiLabs gibt es einen schönen 
Hardware Wizard dazu, welcher mir das alles ausrechnet.

Um das zu erreichen muss der Timer SYSCLK/2 als Timebase haben und dann 
mit dem Wert 0x10BE beladen werden damit er das macht was er soll. 
Leider kommt danach am Oszilloskop eine 90Hz Schwingung heraus! Ich werd 
noch Wahnsinnig.

Die Dateien im Anhang helfen beim Verständnis.
Wenn ich die SYSCLK ändere, verändert sich auch die Rechteckschwingung, 
obwohl ich immer den richtigen Preloader Wert in die RCAP2H und RCAP2L 
eingetragen habe...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul schrieb:

> Dazu habe ich auch noch eine Frage.

Dann mach einen neuen Thread auf, statt einen 5 (sic!) Jahre alten, der
noch dazu mit deinem Thema nur den Namen gemein hat (völlig anderer
Controller, damit völlig andere Peripherie), wieder aufzuwärmen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.