Как то приобрел в хозяйство маленькие контроллеры ATTiny13. Недавно руки дошли с ними повозиться.
Приобрести их можно по цене $3.3/10шт в корпусе SOP8 или $4.83/10шт в корпусе DIP8.
Я взял в корпусе DIP8 вместе с панельками
Характеристики ATTiny13A
- Память для программ (FLASH) — 1Кб
- ОЗУ — 64 Байт
- Число входов/выходов — 6
- Выходов ШИМ — 2
- Аналоговых входов (АЦП 10бит) — 4
- Таймер 8 бит — 1
- Напряжение питания 1.8 — 5.5В
- Рабочая частота — до 20МГц
- Потребление в активном режиме 1.8В/ 1МГц — 190мкА
- Потребление в режиме сна 1.8В/1МГц — 24мкА
Все характеристики микроконтроллера в даташите
Программирование ATtiny13
Для программирования я настроил среду Arduino IDE. Как известно, эта среда разработки может поддерживать дополнительные контроллеры. Например, в этой статье, я рассказывал, как программировать в Arduino IDE «народный WiFi» ESP8266. На сайте arduino.cc есть ветка, посещенная программированию ATTiny13 в среде Ардуино. У меня установлена версия 1.6.5. Скачиваю архив ATTiny core for Arduino. Распаковываю в папку c:\Program Files (x86)\Arduino\hardware\ и в Arduino IDE появляются дополнительные платы
Теперь загрузка программ. Объем памяти микропроцессора всего 1Кб и никакой загрузчик туда не поместится. Поэтому загрузка скетчей производится программатором по ISP. USBAsp, которым я программировал Atmega328 работать с тинькой не захотел. Нужна специальная прошивка программатора, с которой я возиться не захотел. Программировать микроконтроллер можно при помощи любой Ардуины. Для этого собираю такую схему:
В Arduino IDE выбираю «Файл->Образцы->ArduinoISP» и загружаю в Ардуино скетч программатора. Затем выбираю «Инструменты->Программатор->Arduino as ISP». Теперь можно загружать скетчи в тиньку. Следует отметить, что ATTiny13 core for Arduino содержит ограниченный набор функций Ардуино.
Применение ATTiny13
На работе у меня есть настольная елочка со световодами
В елочке стояла галогенная лампочка на 12В и моторчик, который крутит цветной круг-цветофильтр, который меняет цвет световодов. За 3 года умерли и лампочка и моторчик.
Вот я и решил восстановить эту елочку кусочком RGB-ленты управляемой ATtiny13. Съема управления лентой получилась такая:
три транзистора и резистора, линейный регулятор напряжения и собственно тинька.
Скетч представляет собой программный трехканальный ШИМ с изменением яркости по разным каналам, в результате которого лента переливается разными цветами
Скетч ATTiny13 RGB-PW...После этого остается только закрепить плату и ленту в корпусе елочки
Белый скотч наклеен для улучшения отражения света внутри корпуса.
Теперь можно собирать корпус
И елочка готова
.
Все просто и функционально! Мне нравится!
На последней версии arduino 1.6.8.0
Не работает! Идет ошибка…
Что делать?
Интересно как получился шим на 3 канала, когда он в 13 тиньке только на 2 поддерживается? Наверное в исходнике пойму…
Ну идет ошибка на последней — что мешает поставить версию как у автора?
Так и получается ШИМ на 3 канала, можно больше. При помощи таймера.
На Атмеге 328 я запускал 12 каналов ШИМ
Версия чего не идет. Arduino IDE
Хотел загрузить скетч через Arduino Nano. Получаю ошибку
C:\Users\E47B~1\AppData\Local\Temp\build5816874580202649740.tmp/core.a(wiring.c.o): In function
__vector_3':
__vector_3′C:\Atmel\Arduino1711\hardware\attiny13\avr\cores\core13/wiring.c:21: multiple definition of
C:\Users\E47B~1\AppData\Local\Temp\build5816874580202649740.tmp\pwm3_1.cpp.o:C:\Atmel\arduino1711/pwm3_1.ino:12: first defined here
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
Подскажите пож. в чем дело? А то Новый год на носу, хотел порадовать близких.
Проблема в том в программе Автора используется прерывание Таймера0 для программного ШИМ и оно же используется библиотеками Arduino (которые автоматом подключаются к программе) для отсчета времени millis() — в результате конфликта компилятор не понимает которую процедуру использовать.
Однако, каким то образом у меня скомпилировалось в среде Arduino 1.0.2 (но с другой библиотекой, для ATtiny85), так что попробуйте более старый дистрибутив Arduino (может там другой порядок компиляции).
либо попробуйте закомментировать в C:\Atmel\Arduino1711\hardware\attiny13\avr\cores\core13/wiring.c строки
ISR(TIM0_OVF_vect){
ovrf++; //Increment counter every 256 clock cycles
}
Но надежнее всего компилировать в AVR Studio, тогда точно никакие ардуинские библиотеки не будут мешаться, при том что они и не используются.
Спасибо автору! Делал подобную штуку на Ардуинке и решил сотворить на Тиньке13. Еле уложился в среде Ардуино в 1кБ и всё равно не в полной мере достиг задуманного. А тут 300 байт и так работает! Проблем с загрузкой не было. Открыл авторский скетч в Ардуино 1.6.13 (с подключённой Тинькой) и без проблем загрузил как описано на https://geektimes.ru/post/254970/. Управляю лампой сканера от МФУ — посох Дед мороза. Ключи — 2N7002. можно использовать мощные полевики с материнских плат, но они большие. Не забыть про токоограничивающие резисторы. В лампе сканера их нет. Я использовал на 50 Ом. А так, те же RGB диоды. Ещё раз спасибо автору!
Здесь на тиньке 13 WS2812 работают
http://samopal.pro/ws2812-attiny13a/
По тинькам главное в Arduino IDE не использовать setup() и loop(), а писать все в main()
И не пользоваться digitalWrite и прочими, а использовать напрямую доступ к портам ввода вывода.
Пробовал (Здесь на тиньке 13 WS2812 работают
http://samopal.pro/ws2812-attiny13a/) в IDE 1.0.6 и IDE 1.6.5 на Attiny85 —
Для управления WS2812 использовал 0 pin (5 контакт)
Загораются сразу все диоды белым…
Перестает работать delay(tm)
Если комментировать (вставил для проверки вывод попеременно высокого/низкого уровня на другой вывод) цикл работает, но цвет светодиодов не меняется
🙁
А версию библиотеки какую используете?
Попробуйте для Arduino IDE
Которая с setup() и loop()
Заранее извиняюсь(наверно я туплю)
Имеется в виду библиотека из архива light_ws2812-master.zip, которая в папке: light_ws2812-master\light_ws2812_Arduino\ ?
Если она, то на IDE 1.6.5 результат не изменился. Загораются все светодиоды белым и все (и для метеора и и для радуги).
Для Attiny85 похоже delay не работает, так как контрольный светодиод на выводе управления не помигивает.
Для Attiny13A на выводе управления контрольный светодиод помигивает, но все горят белым
🙁
Доброго дня!
То ли руки не из того места, то ли звёзды не так сошлись, но у меня возникла проблема. Нет, схема работает, вот только по какой-то причине светодиоды мерцают при смене яркости. И я всё никак не могу разобраться, что я делаю не так. Ну да,я схему упростил, у меня стоит просто 3 светодиода через сопротивление 330 Ом каждый. Но, как мне кажется, это не должно было стать причиной. Пробовал на разных частотах от 1.2 до 9.6 МГц, меняется только скорость смены яркости, а мерцание остаётся
Мерцание означает, что тинька работает на очень низкой тактовой.
Нужно сперва сделать операцию «записать загрузчик» — программатор пропишет фьюз-биты микроконтроллера, а затем уже заливать прошивку. Понятно, что на 9.6МГц без делителя будет самое плавное диммирование.
Большое спасибо, помогло!
Я боялся записывать загрузчик, т.к. уже однажды прибил эту attiny13 поломав фьюзы. Теперь с осторожностью к этому подхожу)
почитайте еще как прошить attiny13
http://phpjs.ru/2017/12/03/arduino-прошивка-attiny13/