www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer ATMEGA8


Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Habe eine Taktfrequenz von 8 MHz am ATMega 8 liegen. Ich möchte nun eine 
Funktion schreiben, der ich als Parameter einen Zeitwert ( ms) übergebe.

Ich möchte dieses mit dem Timer machen, da es eine ziemlich korrekte 
Zeit sein muss.

Ich habe nun gedacht für den Timer0:

TCCR0 |=(1<<CS00);        // Prescaler von 256

Somit habe ich ja 8 Mhz = 8000000 / 256 = 31250

D.h. ja, dass ich eigentlich nur noch bis 31250 zählen muss und dann 
einen Interrup auslösen kann ...
Gehe ich richtig vor?

Autor: Björn R. (sushi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer 0 ist ein 8-Bit Timer! Der kann nur bis 255 zählen!

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
denn nehm ich den 16 bit zähler,oder andere idee?

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist denn das prinzip richtig? Will wie gesagt eine zeitfunktion haben. 
Damit ich nachher genau steuern kann, zb. displayschaltzeiten einhalten 
kann oder so

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn du beim 8-Bit-Timer den Vorteiler 32 nimmst. bekommst du einen 
Overflow bei 1,024ms. Die 8MHz hören sich wie interner RC-Oszillator an. 
Der ist sowieso nicht so genau. Wenn du im Overflow-Interrupt eine 
Variable herunterzählst kannst du definierte Zeiten erzeugen.

MfG Spess

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn du z.B. eine Funktion "wait_ms(int ms)" schreiben willst würde 
ich das so machen.
Wenn du 8 MHz Takt hast würde ich erstmal gucken welcher Prescaler sich 
eignet um wirklich exakt auf 1 ms zu kommen. (1*10^-3)*(8*10^6) = 8000. 
Nun guckst du mit welchen Prescaler du das ganzzahlig teile kannst. Da 
würde ein Prescaler von 64 passen (8000/64 = 125). Somit reicht ein 8 
Bit Timer aus.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kann ich ja sogar noch us nehmen. Dann habe ich bei 8 schon ein 
interrup

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR0 |=(1<<CS00) | (1<<CS00);
OCR1  = 125;

wie scxhreib ich nun, dass bei dem vergleichswert ein interrupt 
ausgelöst wird?

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abgesehen, dass eh bei 125 ein overflow entsteht

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.