sadr0b0t / arduino-timer-api

Cross-platform Arduino timer API
GNU Lesser General Public License v3.0
35 stars 18 forks source link

ATMega328p таймеры 8Bit #10

Open GusakIurii opened 5 years ago

GusakIurii commented 5 years ago

Судя документации ATMega328p имеет 2 шт. - 8 битных таймера, 1шт.- 16 битный таймер. – Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode

Подскажите пожалуйста Ваша библиотека рассчитана только на 16 битные таймеры? Пробую объявить 2 переменные таймеров: int _timer1 = _TIMER1; int _timer2 = _TIMER2; компилятор ругается на int _timer2 = _TIMER2;

Подскажите пожалуйста возможно ли на ATMega328p процессоре, с вашей библиотекой использовать три таймера? Для моей задачи достаточно и двух, но может кому то нужно три штуки...

sadr0b0t commented 5 years ago

Добрый день. Прошу прощения за долгий ответ, весна получилась сильно замороченая.

Код для инициализации таймеров для ARV я брал из стандартной библиотеки Arduino для управления сервомашинками Servo.h https://github.com/arduino/Arduino/blob/ide-1.5.x/libraries/Servo/src/avr/ServoTimers.h https://github.com/arduino/Arduino/blob/ide-1.5.x/libraries/Servo/src/avr/Servo.cpp

Проверял на ардуинах, которые были под рукой (Uno и Leonardo, кажется). Для остальных чипов не проверял - эта часть кода в основном попала в библиотеку как есть.

В общем, если на вашем чипе есть таймеры, для которых не объявлена константа в библиотеке, вы можете попробовать их добавить в код, все необходимое для платформы AVR должно находиться в этом файле: https://github.com/sadr0b0t/arduino-timer-api/blob/master/src/avr/timer_setup.c

Скорее всего придется почитать даташит на ваш чип. И бы еще посмотрел последнюю версию Servo.cpp из Arduino, возможно, они уже исправили код для вашего чипа и добавили недостающие таймеры.