Hallo
habe eine kleine Verständnissfrage zu dem 16Bit Timer im ATMega644 o.ä.
Ich möchte ein Signal wie Folgt Simmulieren
1 | 1 -----+ +---------...-+ +---
|
2 | | 0,3ms | 0,7ms + Xms | 0,3ms | usw.
|
3 | | | | |
|
4 | 0 +-------+ +-------+
|
Gedanke war der, AVR mit 8Mhz und Timer Prescaler clk/8, also alle 0,001
ms ein Tackt.
Jetzt könnte ich doch COMPA und COMPB benutzen.
Wenn ich nun CTC benutze, setzt er bei COMPA den Timer Counter auf 0 und
fängt von vorne an.
COMPB soll nach der Zeit des Height auslösen und COMPA 0,3ms später und
den Counter zurück setzten.
Leider habe ich nix da um den Korrekten ablauf zu testen, deswegen habe
ich hier mal einen Ausschnitt aus dem Source und wollte mal eure Meinung
dazu höhren ob meine Idee soweit richtig ist.
1 | OCR1B = 700 + 1000;
|
2 | OCR1A = OCR1B + 300;
|
3 | TCCR1B = (1<<WGM12)|(1<<CS11); // Prescaler auf clk/8 und CTC ein
|
4 | TIMSK1 |= (1<<OCIE1A)|(1<<OCIE1B); // COMPA und COMPB aktivieren
|
5 |
|
6 | ISR (TIMER1_COMPB_vect) // Interupt nach 0,7ms + Xms
|
7 | {
|
8 | PORTC &= ~(1<<PC0);
|
9 | }
|
10 |
|
11 | ISR (TIMER1_COMPA_vect) // Interupt nach 0,7ms + Xms + 0,3ms und Counter Reset
|
12 | {
|
13 | PORTC |= (1<<PC0);
|
14 | }
|
Gruß Sven