www.mikrocontroller.net

Forum: Compiler & IDEs 8000 überläufe pro sekunde


Autor: roboter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauche Hilfe für den Timer0 vom Atmega32 mit 8Mhz.

Ich möchte pro Sekunde 8000 Durchläufe realisieren.

Der Teiler ist 8.

Wie kann ich jetzt den Startwert ermitteln, womit der Timer starten 
soll.

mfg

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Tutorial: Timer
AVR-Tutorial: Uhr

Stichwort CTC Modus.

MfG
Falk

Autor: roboter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, irgendwie finde ich den Anfang nicht für die Formel um den 
Vorgabewert auszurechnen.

8mhz/8/256 ist klar = 3906 Umläufe pro Sekunde.

Wie komm ich jetzt auf den Vorgabewert, damit 8000 umläufe stattfinden?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
roboter wrote:
> Also, irgendwie finde ich den Anfang nicht für die Formel um den
> Vorgabewert auszurechnen.
>
> 8mhz/8/256 ist klar = 3906 Umläufe pro Sekunde.
>
> Wie komm ich jetzt auf den Vorgabewert, damit 8000 umläufe stattfinden?
Es gibt keinen "Vorgabewert"! Benutze die CTC-Betriebsart, dann musst Du 
nicht lange rumrechnen, kannst praktisch direkt die Anzahl der Zyklen 
eingeben und musst nicht bei jedem Überlauf nachladen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
roboter wrote:
> Also, irgendwie finde ich den Anfang nicht für die Formel um den
> Vorgabewert auszurechnen.
>
> 8mhz/8/256 ist klar = 3906 Umläufe pro Sekunde.
>
> Wie komm ich jetzt auf den Vorgabewert, damit 8000 umläufe stattfinden?

Offensichtlich geht sich das nicht aus, wenn der Timer jedesmal
bis 256 durchzählt. Also wie weit muss er durchzählen:

8mhz/8/x = 8000

Nach x umstellen musst du aber alleine :-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht es doch nicht immer so kompliziert Jungs ;)
Er soll das ja auch verstehen.

8MHz/8 = 1MHz Takt für den Timer0.
Der Timer zählt mit 1/1000000Hz weiter. Also mit 1us.

Du möchtest 8000 mal pro Sekunde einen Überlauf.
1/8000Hz = 125us. Glücklicherweise ist das Ergebnis
eine Zahl ohne Kommastelle.

Der Timer muss 125 Takte abarbeiten bis zum Überlauf.
Im Overflow Betrieb läuft der Timer0 bei 255 über auf 0.
Der Reload Wert ist auf jeden Fall schon mal 255-125.
Der Überlauf erfolgt aber erst einen Takt nach dem
Timerwert 255. Also muss man einen Takt drauflegen.
Reload mit 255-(125+1) nachdem der Timer0 übergelaufen ist.

Bei 16Bit Timern muss man mit 65535 statt 255 rechnen.

Das dumme am Overflow Betrieb ist das man den Reload
Wert von Hand in den Timer nachladen muss. Dabei vergeht Zeit.
Nimmt man z.B. noch den Sprung in eine Interruptroutine
dazu, plus ein paar Pushs um die wichtigen Register
zu retten vergeht da evtl. schon soviel Zeit das der
Timer ein oder mehrere Takte weiterläuft. Gerade bei
kleinen Prescaler Werten. Lädt man den Timer dann mit
255-(125+1) nach, hat man Taktverluste die man mit dem
Reload Wert eigentlich ausgleichen müsste. Der Reload
Wert müsste kleiner werden.

Beim CTC ist das nicht der Fall. Der Overflow Wert wird
nur ein mal in ein Register geschrieben (OCR0 bei Timer0).
Beim Überlauf wird der Timer einfach auf 0 gesetzt. Per Hardware.
Es entstehen keine Taktverluste. Der Timer läuft frei durch,
unabhängig von der Software. Das einzige was man beachten muss ist
das der Timer bei 0 anfängt zu zählen. In OCR0 müsste man bei diesem
Beispiel also 125-1 reinschreiben.

Ich hoffe ich habe nicht zuviel Unsinn geschrieben ;)
 holger

Autor: roboter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jup, danke , das reicht.

es läuft jetzt mit euren vorschlägen.

mfg

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.