Переделать millis на таймер 2
- Войдите на сайт для отправки комментариев
Здравствуйте, посоветуйте как поступить. Придумываю программу для регулятора оборотов двигателя. Железо уже готово и вносить изменения нет возможности. Загвоздка вот в чем, двигатель управляется шим с таймера 0. Этот же таймер нужен для функции millis и delay. На стандартной для arduino частоте шим, мотор отвратительно пищит. Нужно поднять частоту шим за звуковой диапазон, но тогда перестанут корректно считать время delay и millis. Таймер 2 свободен, вот я думаю можно ли как то залезть в потроха millis и переделать ее на второй таймер. Или не связываться с этим и строить временные интервалы вторым таймером...Хотел для программы воспользоваться готовым планировщиком (looper), а он работает на millis, вот и возник такой вопрос.
Прошу прощения, плохо гуглил. Если кому нибудь понадобится, то решение проблемы вот здесь -http://playground.arduino.cc/Main/TimerPWMCheatsheet
Добрый день, скажите а вам удалось решить проблему?
Незнаю что я делаю не так но рецепт по ссылке не работает. Частота шим увеличивается но так же и увеличивается в 64 раза длительность Delay и Millis (c)
Правка файло wiring.c ничего не даёт. Ерунда какаято.
UNO 328
Правка файло wiring.c ничего не даёт. Ерунда какаято.
UNO 328
ОтчегоЖ ерунда-то? Timer0 в дурдуине используется ВСЕГДА, даже в пустом скетче и представляет из себя (ща не помню точно) декрементный счётчик по переполнению ISR_Timer0_OVF. Если ты "напрямую" впихнул в регистры Timer0 другие коэффициенты делителя - получишь соответствующую твоей мессаге картину. Мне вот тока нипонятно, почему Mills увеличивается??? С увеличением ШИМ счётчик должен "вроде" как считать "быстрее" ... )))))
Добрый день, скажите а вам удалось решить проблему?
Незнаю что я делаю не так но рецепт по ссылке не работает. Частота шим увеличивается но так же и увеличивается в 64 раза длительность Delay и Millis (c)
Правка файло wiring.c ничего не даёт. Ерунда какаято.
UNO 328
Не понятно, на кой фиг переносит millis() на таймер2 .. если он свободен, то куда как проще использовать его для ШИМ на моторах и регулировать частоту ШИМ на нем. Они в этом плане одинаковы, чуть более чем полностью. Переставьте моторы на таймер2 - всего-то делов.
Так, разобрался.
Оказывается рецепт по ссылке (правка строки wiring.c) работает только для Millis()
Delay и Міcros же не исправляется .
зы. Да, конечно же уменьшается )
Я вот про этот рецепт с изменением таймера0
PWM frequencies on Timer 0, pins 5 and 6, Arduino Uno
Example: DC motor drive on the Arduino UNO, pins 5 and 6
Вообще, если это так необходимо, можно полностью переделать ISR_Timer0_OVF для нужнй тебе частоты ШИМ и с соответствующей корректировкой функици mills(). Дизассемблируй Timer_OVF_Vector , возможно, я подскажу что и как переделать.
Но!!! Это может "потянуть" за собой череду глобальных неприятностей в "других" скетчах, которые даже и не "догадываются" о "модернизированной" функции mills(). Так-что здесЯ нужно иметь некий "скилл" , шоб не наступить на грабли.
http://arduino.ru/forum/programmirovanie/shim-proizvolnogo-razresheniya-...
Всё это уже давно "обсосано" на Atmel-овских форумах.Тока на Timer1 16-ти битный ШИМ похож на велосипед с турбореактивным двигателем. Разогнаться можно, да только руля не слушаеццо)))
Не думайте, шо инженеры Atmel на столько "тупы", что не написали про 16-ти битную "фичу" в датащах а ограничили её 10-ю битами!