Помогите с таймерами Digispurk ATtiny85
- Войдите на сайт для отправки комментариев
Всем Хой!
Видать эта millis() покоя мне в моей жизни не оставит таки.
Попалась на глаза валяющаяся в ящике плата Digispark ATtiny85. Решил сделать с ее помощью ИК выключатель роутера (ШОб с кровати не вставать и на ночь выключать эту сверлилку мозгов))).
За основу взята библиотека IRlib. https://github.com/digistump/DigistumpArduino/tree/master/digistump-avr/libraries/DigisparkIRLib
Наваял малюсенькую программулину (программирование по удержанию любой кнопки пульта и т. п.).
Загружаю и.. вот незадача. Все задержки на millis() не работают. Гробит их подключенная IRlib.
Библиотека использует по умолчанию Timer0, а ядро Arduino для millis() по умолчанию Timer1...
Вроде как конфликта быть не должно, но он есть...
Меняю в заголовочном файле IRLibTimer.h используемый библиотекой тайме по умолчанию на Timer1(97 строка).
И в ответ сыпется куча ошибок компилятора. Такое ощущение, что у ATtiny85 нет Timer1, но он то есть!
Попробовал задать Ардуино использование для Millis() таймер по умолчанию на Timer 0. Результата это не принесло. Millis() так и не работает при включенной библиотеке IRlib.
Как заставить это работать?
Задержки сделал через прерывания таймера "0" и все работает, но хотелось бы понять что не так с millis()...
Такое ощущение, что у ATtiny85 нет Timer1, но он то есть!
Энто-ж Tiny, тобищь маненькая. Посему Timer1 искать нужно. В сетапе пейсать нужно:
if (search_timer1) then timer1_fuck_on else timer1_fucking_off
Энто-ж Tiny, тобищь маненькая. Посему Timer1 искать нужно. В сетапе пейсать нужно:
if (search_timer1) then timer1_fuck_on else timer1_fucking_off
Спасибо, - поржал))
Ну может и так. Брешет видать core_build_options.h ....
Особенно обманула)) строчка: " For various reasons, Timer 1 is a better choice for the millis timer on the
Значит у Вас какая-то странная поддержка 85-ой. У меня вот и файла-то такого нет. А таймер используется нулевой :-)
Значит у Вас какая-то странная поддержка 85-ой. У меня вот и файла-то такого нет. А таймер используется нулевой :-)
Та пес с тем, что там по умолчанию. Почему не меняется таймер для millis(), если его рученками прописываешь, а он не меняеццо. А так же есть куча вопросов по первому таймеру ATtyni85 (как у меня так и у компилятора). Судя по всему (да и по даташиту) там вообще один регистр ТССR1, а не TCCR1A и TCCR1B. А библиотека какого то юха написана под A и B. как у 16 битного таймера...
Переписал setup таймера 1 в библиотеке IRlib, установил использование таймера 1 для библиотеки, а таймера 0 для millis(). Задерждки работают, библиотека нет. В обратном порядке - задержки не работают, а библиотека фунциклирует...
ПОвбывав бы!!
P\S: Короче, забью я наверное на этот digispurk. Конкретно в этом проекте сделаю все задержки по прерыванию таймера 0 и засуну его в...... роутер, да там и оставлю. Думаю на чистой ATtiny85 такой дрочни не должно быть...
Та пес с тем, что там по умолчанию. Почему не меняется таймер для millis(), если его рученками прописываешь, а он не меняеццо.
Да, хрен Вас знает, что у Вас там за поддержка 85-ой стоит. Вы бы в wiring.c посмотрели. У меня вот там тупо прописана инициализация нулевого таймера и ни на какие "TIMER_TO_USE_FOR_MILLIS" она и не смотрит - хоть заменяйся.
Да, хрен Вас знает, что у Вас там за поддержка 85-ой стоит.
4 года назад уже давали на форуме ответ на вопрос по точно такой же теме (не без вашего участия)))
http://arduino.ru/forum/programmirovanie/digispark-dimmer-i-vector4
Это точно такая же тема? Ну, тогда я совсем не понял Вашей проблемы.
Но wiring.c по любому посмотрите. Таймеры для миллиса инициализируются именно там.
Ну да, вопрос был по таймерам Digispark. Выходит прерывания там заняты.
Да виринг я уже посмотрел давно.
Вот же ж цитата крайнего поста из той темы...
Ну да, нашел ISR(MILLISTIMER_OVF_vect, ISR_NOBLOCK)
Нужно для USB. То есть сохранять загрузчик смысла нет. Вопросов больше нет, буду шить программтором.
Короче все: нах digispark, велком программатор!
У меня аддон на тиньку имеет 3 ядра. Переключение методом копирования одного из ядер в папку core. Одно называется nomilles. Там таймеры вообще не используются, а задержки исключительно на циклах. Под ардуину всё генерится, но миллис не работает. Код получается меньше по размеру. Мне хватает. Где брал не помню. Узнал о возможности менять ядра, когда полез разбираться с таймерами. Когда узнал что можно взять ядро где все таймеры свободны был приятно удивлён.