Forum: Mikrocontroller und Digitale Elektronik 16 Timer Interrupt


von Sven (Gast)


Lesenswert?

Hallo,

ich kenne mich mit dem 8 Bit Timer des ATmega aus, leider nicht mit dem 
16 Bit Timer - denn diesen bekomme ich nicht wunschgemäss zum "Laufen".

Ich möchte 200 mal in der Sekunde einen Interrupt auslösen, mein ATmega 
ist mit 8 MHz getaktet. Meine Berechnung ist wie folgt: 8.000.000 Hz 
(Quarz) / 8 (Presacler) sind 1.000.000 Takte für den Timer. ALso muss 
der Timer bei dem Wert 5000 (deshalb auch der 16 Timer) einen Interrupt 
auslösen.

Mit den vielen Konfigurationsmöglichkeiten des 16 Bit Timer schaff ich 
es nicht. Vielleicht kann mir jemand behilflich sein. - Vielen Dank 
schon einmal.

Sven

von Rahul D. (rahul)


Lesenswert?

CTC Modus
Und da trägt man dann 4999 als Vergleichswert ein.

von Fritz123 (Gast)


Lesenswert?

Hallo,

ich würde den freien (Evaluation/eingeschränkt) C Compiler CodeVison
herunterladen, der unter
http://www.hpinfotech.ro/html/download.htm
erhältlich ist.
Die Installation geht wirklich sehr einfach, ohne dass man ein Manual 
lesen muss und der Compiler hat eine Wizzard. Damit kann man den Timer 
durch ausfüllen einer Bildschirmseite konfigurieren und im erzeugten 
Code die Timereinstellungen nachlesen.
Für knifflige Fälle wird man zwar das Datenblatt lesen müssen, aber 
dieser Weg ist m.E. der relativ einfachste.

Gruß
Fritz

von Johannes M. (johnny-m)


Lesenswert?

Fritz123 wrote:
> Damit kann man den Timer
> durch ausfüllen einer Bildschirmseite konfigurieren und im erzeugten
> Code die Timereinstellungen nachlesen.
Und da der Wizard freundlicherweise alle Werte als Hexadezimalzahlen 
schreibt, muss man spätestens wenn man was ändern will, doch im 
Datenblatt nachsehen (abgesehen davon, dass man ohne Datenblatt-Lektüre 
überhaupt nicht mehr nachvollziehen kann, wie der Timer überhaupt 
konfiguriert ist).

Außerdem hat der OP nix von einer bestimmten Programmiersprache erzählt. 
Mit Assembler z.B. wird er mit CodeVision nicht viel anfangen können.

> Für knifflige Fälle wird man zwar das Datenblatt lesen müssen, aber
> dieser Weg ist m.E. der relativ einfachste.
Klar, einfach, aber man hat nix davon.

Erzähle keinem, man könne einen µC sinnvoll programmieren, ohne das 
Datenblatt zu konsultieren...

Wenn schon in C programmiert werden soll: Schau lieber ins 
AVR-GCC-Tutorial. Da steht alles, was man wissen muss, auf deutsch. 
Und sinnvollerweise gewöhnt man sich auch gleich am Anfang die Syntax 
mit Bitschiebe-Operatoren an. Dann kann man das Programm später auch 
lesen und v.a. ändern, ohne jedes einzelne Bit aus dem Datenblatt 
rauszuklamüsern.

von Sven (Gast)


Lesenswert?

Hallo,

AVR-GCC ist auch meine 1. Wahl. leider löst folgender code keinen 
Interrupt aus:

TCCR1A |= (1<<CS11)|(1<<WGM12);  // Prescaler 8 / CTC
OCR1AH=1; // timer laden
OCR1AL=1;
TIMSK |= (1<<OCIE1A); // Interrupt

Die Sache mit dem A und B Channel verwirrt mich ein wenig.

von Kai F. (kai-) Benutzerseite


Lesenswert?

ich kann dir auch nur zu Codevision raten, aber da gehen die Meinungen 
auseinander...
das A und B sind nur zwei unterschiedliche Compare Match Interrups. Den 
einen setzt du mit OCR1A, den anderen mit OCR1B. Das H und das L sind 
nur High und Low Byte. brauchst du aber nicht benutzen (zumindest bei 
Codevision). Was du in deinem Code gamacht hast ist, dass du den Compare 
A Match auf 0x0101 gesetzt hast, was umgerechnet 257 sind.
Zum Rest kann ich wenig sagen, weil ich mit den >> Befehlen nicht 
umgehen kann...

von Jörg X. (Gast)


Lesenswert?

> AVR-GCC ist auch meine 1. Wahl. leider löst folgender code keinen
> Interrupt aus:

> TCCR1A |= (1<<CS11)|(1<<WGM12);  // Prescaler 8 / CTC
> OCR1AH=1; // timer laden
> OCR1AL=1;
> TIMSK |= (1<<OCIE1A); // Interrupt
>
> Die Sache mit dem A und B Channel verwirrt mich ein wenig.
Für welchen Atmega ist denn das gedacht? Die CSxx Bits sind doch 
meistens in TCCR1B, nicht ~A (Die TCCRxx register gehören NICHT zu den 
Channels).
Die Bezeichnung 'Channel' steht nur für PWM-kanal (kann z.B. ein 
PWM-Signal auf bestimmten Pins ausgeben).
Es gibt im Datenblatt eine schöne Tabelle mit allen (15?) Modi, die der 
Timer beherrscht.

hth. Jörg
ps.: Poste (bitte) kompilierbare Beispiele

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.