Timer3 auf Mega2560

Hallo,

ich brauche den Timer1 für Servos und Timer3 als Zähler. Den Code, den ich von Timer1 auf Timer3 umgeschrieben habe funktioniert nicht. Brauche ich eine Headerdatei für Timer3?

// mit Timer1 funktioniert das Programm, aber nicht mit Timer3

#define ledPin 13

void setup()
{
pinMode(ledPin, OUTPUT);

// initialize timer1 
noInterrupts();    // disable all interrupts
TCCR3A = 0;
TCCR3B = 0;

TCNT3 = 3036;    // preload timer 65536-16MHz/256/1Hz
TCCR3B |= (1 << CS32);    // 256 prescaler 
TIMSK3 |= (1 << TOIE3);   // enable timer overflow interrupt
interrupts();    // enable all interrupts 
}

ISR(TIMER1_OVF_vect)
{
digitalWrite(ledPin, digitalRead(ledPin)^1);
}

void loop()
{

}

ISR(TIMER1_OVF_vect)

Welchen Timer möchtest du nutzen?

Hallo combie,

Danke für Deine Aufmerksamkeit. Habe übersehen, dass ich ISR(TIMER3_OVF_vect) ebenfalls ändern musste.

Nochmals Danke!!!

Hi

Tut's denn jetzt?

MfG

Hallo,

TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 3036;
TCCR3B |= (1 << CS32); // okay, weil vorher Register resetet
TIMSK3 |= (1 << TOIE3); // nicht okay, weil vorher Register nicht resetet

das kann zur falschen Verhalten des Timers führen woran man lange grübelt.
Unterschied = zu |= sollte klar sein.
Entweder alle Konfigurationsregister pauschal reseten und dann wieder wie gewünscht konfigurieren. Oder nur unbenutzte Register reseten und die benutzten mit der ersten Zuweisung auch wirklich zuweisen und nicht verodern und dann alle folgenden Einstellungen verodern. Da sollte man sich seinen eigenen übersichtlichen Stil angewöhnen. Bei eigener Timer Nutzung/Konfiguration ist das komplette Register reseten notwendig, weil die IDE "intern" default Einstelllungen für ihre PWM Ausgänge, millis u.ä. vornimmt.