Hallo,
so langsam verliere ich die Lust.
Der OCIE1x (Timer Compare Interrupt) von A/B sind ausgeschalten. Normalerweise dürfte A/B gar nicht takten.
Tun sie aber laut Screenshot mit genau dem Code hier.
Nehme ich den ISR COMPC Vector dazu, takten alle 3 Kanäle gleich, leicht verschoben mit irgendeiner Frequenz ohne mein Einfluss.
/*
01.07.2015
Doc Arduino - german arduino.cc Forum
Arduino Mega2560
*/
// globale Variablen
boolean _toggle_T1 = LOW;
const byte _LED = 8;
long _CounterA;
long _CounterB;
long _CounterC;
// Funktionen deklarieren
void set_Timer1_CMR();
void setup() {
Serial.begin(38400);
pinMode(_LED, OUTPUT); // max. 36 bzw. 170kHz
pinMode(11, OUTPUT); // Pin von OC1A > Pin 11 Mega2560 (max. 8MHz)
pinMode(12, OUTPUT); // Pin vom OC1B > Pin 12 Mega2560 (max. 8MHz)
// beim Uno sind das Pin 9 und 10
pinMode(13, OUTPUT); // Pin vom OC1C > Pin 13 Mega2560 (max. 8MHz)
set_Timer1_CMR(); // gewünschte Taktfrequenz in Hz - bei Bedarf mit einer Kommastelle
// 0.2 bis 36kHz bzw. 170kHz bzw. 8MHz)
} // Ende Setup
void loop() {
// do other things here
}
// *** Funktionen *** ----------------------------------------------
void set_Timer1_CMR() // Normal Mode, kein CTC
{
cli(); //stop interrupts
// set Timer-1 Register
TCCR1A = 0; // Reset TCCR1A Register
TCCR1B = 0; // Reset TCCR1B Register
TIMSK1 = 0; // Reset TIMSK1 Register (disable Timer Compare Interrupts)
TCNT1 = 0; // initialize counter value to 0
TCCR1A |= (1 << COM1A0); // set Toggle OCnA Pin on compare match > Pin 11 Mega2560
TCCR1A |= (1 << COM1B0); // set Toggle OCnB Pin on compare match > Pin 12 Mega2560
TCCR1A |= (1 << COM1C0); // set Toggle OCnC Pin on compare match > Pin 13 Mega2560
OCR1A = 10000; // Compare Match Register A
OCR1B = 15000; // Compare Match Register B
OCR1C = 20000; // Compare Match Register C
//TCCR1B |= (1 << WGM12); // turn on CTC mode
TCCR1B |= (1 << CS11); // set Prescaler 8
//TIMSK1 |= (1 << OCIE1A); // enable Timer Compare Interrupt A
//TIMSK1 |= (1 << OCIE1B); // enable Timer Compare Interrupt B
TIMSK1 |= (1 << OCIE1C); // enable Timer Compare Interrupt C
sei(); //allow interrupts
} // end Funktion
/*
ISR(TIMER1_COMPC_vect) { // Timer 1.C Interrupt
TCNT1 = 65500;
}
*/

