Прерывание от таймеров при Servo.h
- Войдите на сайт для отправки комментариев
Пнд, 28/04/2014 - 14:57
Добрый день. Дело вот в чем: нужна возможность использования 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
результата нет.
Заранее спасибо за помощь.
Пока использую весьма извращенный вариант с одним 8-ми битовым таймером. Для плавного одновременного вращения нескольких сервов подходит, но код выглядит страшно, должен быть более адекватный выход)