Go Down

Topic: Timer3 auf Mega2560 (Read 324 times) previous topic - next topic

1udo1

Feb 24, 2018, 11:43 am Last Edit: Feb 24, 2018, 07:16 pm by uwefed
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?
Code: [Select]
// 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()
{

}

combie

Quote
ISR(TIMER1_OVF_vect)
Welchen Timer möchtest du nutzen?
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

1udo1

Hallo combie,

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

Nochmals Danke!!!

postmaster-ino

anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Doc_Arduino

Hallo,


Quote
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.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up