Badenser
29.11.2016, 16:34
Hallo Leute,
ich bin gerade dabei für eine Robotersteuerung einen Timer in meinen Scetch zu Integrieren.
Als Vorlage habe ich die Anleitung von Heise unter: https://www.heise.de/developer/artikel/Timer-Counter-und-Interrupts-3273309.html verwendet.
Da Timer 1 der im Heise Beispiel scheinbar von der Servo Library benötigt wird, verwende ich Timer 3.
Die Version mit dem Überlauf eines Timer-Registers funktioniert einwandfrei.
Hier der Code:
void setup()
{
....
noInterrupts();
// Gem Heise:
TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 34286;
TCCR3B |= (1 << CS12) | (1 << CS10);
TIMSK3 = (1 << TOIE3);
interrupts();
....
}
ISR(TIMER3_OVF_vect)
{
TCNT3 = 34286;
....
}
Verwende ich aber die CTC (Clear Timer on Compare Match) Methode,
Hier der Code:
void setup()
{
....
noInterrupts();
// Gem Heise:
TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 0;
OCR3A = 32150;
TCCR3B |= (1 << CS12) | (1 << CS10);
TIMSK3 = (1 << OCIE3A);
interrupts(); // Alle Interrupts aktivieren
....
}
ISR(TIMER3_COMPA_vect)
{
....
}
.. bekomme ich die folgende Fehlermeldung:
Kompiliere ... Fertig!
Kompiliert um: 16:19:18
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_32'
sketch\Robot_2016_1_6.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
collect2.exe: error: ld returned 1 exit status
Mehrere Bibliotheken wurden für "IRremote.h" gefunden
Benutzt: C:\Users\klaus\Documents\Arduino\libraries\IRremot e
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Mega or Mega 2560.
Kann mir jemand Erklären was da los ist?
Grüsse Klaus
ich bin gerade dabei für eine Robotersteuerung einen Timer in meinen Scetch zu Integrieren.
Als Vorlage habe ich die Anleitung von Heise unter: https://www.heise.de/developer/artikel/Timer-Counter-und-Interrupts-3273309.html verwendet.
Da Timer 1 der im Heise Beispiel scheinbar von der Servo Library benötigt wird, verwende ich Timer 3.
Die Version mit dem Überlauf eines Timer-Registers funktioniert einwandfrei.
Hier der Code:
void setup()
{
....
noInterrupts();
// Gem Heise:
TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 34286;
TCCR3B |= (1 << CS12) | (1 << CS10);
TIMSK3 = (1 << TOIE3);
interrupts();
....
}
ISR(TIMER3_OVF_vect)
{
TCNT3 = 34286;
....
}
Verwende ich aber die CTC (Clear Timer on Compare Match) Methode,
Hier der Code:
void setup()
{
....
noInterrupts();
// Gem Heise:
TCCR3A = 0;
TCCR3B = 0;
TCNT3 = 0;
OCR3A = 32150;
TCCR3B |= (1 << CS12) | (1 << CS10);
TIMSK3 = (1 << OCIE3A);
interrupts(); // Alle Interrupts aktivieren
....
}
ISR(TIMER3_COMPA_vect)
{
....
}
.. bekomme ich die folgende Fehlermeldung:
Kompiliere ... Fertig!
Kompiliert um: 16:19:18
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_32'
sketch\Robot_2016_1_6.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
collect2.exe: error: ld returned 1 exit status
Mehrere Bibliotheken wurden für "IRremote.h" gefunden
Benutzt: C:\Users\klaus\Documents\Arduino\libraries\IRremot e
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Mega or Mega 2560.
Kann mir jemand Erklären was da los ist?
Grüsse Klaus