Прерывание от таймеров при Servo.h

NorDOSt
Offline
Зарегистрирован: 08.05.2013

Добрый день. Дело вот в чем: нужна возможность использования 16-ти битных таймеров  1,3,4,5 на Меге 2560 с подключенной библиотекой Servo.h. На векторе прерываний любого из этих таймеров (ISR (TIMER1_COMPA_vect){...} ) компилятор говорит, что они уже используются в Servo:

Servo\Servo.cpp.o: In function `__vector_17':
C:\Program Files\Arduino\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_17'
sketch_robot_V3.cpp.o:C:\Program Files\Arduino/sketch_robot_V3.ino:73: first defined here
c:/program files/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
.
 
Вот эти определения из библиотеки Servo:
 #ifndef WIRING // Wiring pre-defines signal handlers so don't define any if compiling for the Wiring platform

// Interrupt handlers for Arduino 
#if defined(_useTimer1)
ISR(TIMER1_COMPA_vect) 
{ 
  handle_interrupts(_timer1, &TCNT1, &OCR1A); 
}
#endif

#if defined(_useTimer3)
ISR(TIMER3_COMPA_vect) 
{ 
  handle_interrupts(_timer3, &TCNT3, &OCR3A); 
}
#endif

#if defined(_useTimer4)
ISR(TIMER4_COMPA_vect) 
{
  handle_interrupts(_timer4, &TCNT4, &OCR4A); 
}
#endif

#if defined(_useTimer5)
ISR(TIMER5_COMPA_vect) 
{
  handle_interrupts(_timer5, &TCNT5, &OCR5A); 
}
#endif
Здесь видно, что она использует только один таймер, а не все сразу. Вопрос - как указать библиотеке, какой таймер ей юзать, а остальные мог использовать я?
 
Пробовал строку :
#define _useTimer4 

результата нет.

 

Заранее спасибо за помощь.

 
NorDOSt
Offline
Зарегистрирован: 08.05.2013

Пока использую весьма извращенный вариант с одним 8-ми битовым таймером. Для плавного одновременного вращения нескольких сервов подходит, но код выглядит страшно, должен быть более адекватный выход)