Hallo,
ich weiß, die Frage wurde sicherlich schon mehrfach durchgekaut, in der
Suche habe ich aber nichts gefunden.
Nämlich: Wie verwende ich die OCRxn Register im Atmega644?
Ich möchte 2 Timer - TCNT0 und TCNT2 laufen lassen und befülle die OCRxn
Register dementsprechend mit Werten zwischen 0 und 255.
Dann Frage ich den Interruptvektor TIMER0_COMPA_vect ab. Also ob
Register OCRxn und TCNTn Register gleich sind.
Ein Interrupt wird auf jeden Fall erzeugt - von beiden Vektoren.
Allerdings scheint die Zeitspanne dazwischen unabhängig vom OCRxn
Register zu sein, sprich ich kann reinschreiben was ich will, der
Zeitabstand zwischen den Interrupts ist immer der selbe.
Verwenden will ich die beiden Interrupts um 2 Schrittmotoren mit einem
Takt zu versorgen.
Im Datenblatt steht dass man für das Einschalten des CTC-Modus (in
diesem wird dann OCRxn)verwendet nur die WGM Bits setzen muss. Oder habe
ich da was wichtiges Überlesen? Weil grundsätzlich funktionieren die
Interrupts ja, nur zeitlicher Unterschied ist nicht :-/
Hier noch ein paar Ausschnitte aus dem Programm:
Schreiben des Registers (z.B):
1 | OCR2A |= 20; //Wert bei dem Interrupt erzeugt werden soll
|
1 | TCCR2A |= (1<<2); //Setzen des WGM1 Bits (laut Datenblatt) für CTC-Modus
|
2 | TIMSK2 |= (1<<OCIE2A); //Erlauben von Interrupts durch OCRxn Register
|
1 | ISR (TIMER2_COMPA_vect) //Interruptvektor
|
2 | { }
|
Prozessortakt läuft übrigens auf 20MHz, Prescaler ist 1024.
Sollten noch Infos benötigt werden bitte melden!
Danke schon im Vorhinein und eine gute Nacht,
Constantin