Изучаем ATTINY13, восстанавливаем новогоднюю елочку

105Как то приобрел в хозяйство маленькие контроллеры 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мкА

Все характеристики микроконтроллера в даташите

ATTiny13A

Программирование 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 появляются дополнительные платы

Настройка Arduino IDE для ATTiny13

Теперь загрузка программ. Объем памяти микропроцессора всего 1Кб и никакой загрузчик туда не поместится. Поэтому загрузка скетчей производится программатором по ISP. USBAsp, которым я программировал Atmega328 работать с тинькой не захотел. Нужна специальная прошивка программатора, с которой я возиться не захотел. Программировать микроконтроллер можно при помощи любой Ардуины. Для этого собираю такую схему:

Программирование ATTiny13 при помощи Arduino

В Arduino IDE выбираю «Файл->Образцы->ArduinoISP» и загружаю в Ардуино скетч программатора. Затем выбираю «Инструменты->Программатор->Arduino as ISP». Теперь можно загружать скетчи в тиньку. Следует отметить, что ATTiny13 core for Arduino содержит ограниченный набор функций Ардуино.

Применение ATTiny13

На работе у меня есть настольная елочка со световодами

Елочка со световодами

В елочке стояла галогенная лампочка на 12В и моторчик, который крутит цветной круг-цветофильтр, который меняет цвет световодов. За 3 года умерли и лампочка и моторчик.

301

302

Вот я и решил восстановить эту елочку кусочком RGB-ленты управляемой ATtiny13. Съема управления лентой получилась такая:

три транзистора и резистора, линейный регулятор напряжения и собственно тинька.

Схема

Применение ATTiny13

Скетч представляет собой программный трехканальный ШИМ с изменением яркости по разным каналам, в результате которого лента переливается разными цветами

Скетч ATTiny13 RGB-PW...

Применение ATTiny13

После этого остается только закрепить плату и ленту в корпусе елочки

404

Белый скотч наклеен для улучшения отражения света внутри корпуса.

Применение ATTiny13

Теперь можно собирать корпус

406

И елочка готова

Применение ATTiny13

Применение ATTiny13

Применение ATTiny13

 

.

Скетч ATTiny13 RGB-PWM
1.9 KiB
801 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

14 комментариев на «Изучаем ATTINY13, восстанавливаем новогоднюю елочку»

  1. Владимир:

    Все просто и функционально! Мне нравится!

  2. Алексей:

    На последней версии arduino 1.6.8.0
    Не работает! Идет ошибка…
    Что делать?

  3. Андрей:

    Интересно как получился шим на 3 канала, когда он в 13 тиньке только на 2 поддерживается? Наверное в исходнике пойму…

    Ну идет ошибка на последней — что мешает поставить версию как у автора?

    • Alexey Alexey:

      Так и получается ШИМ на 3 канала, можно больше. При помощи таймера.
      На Атмеге 328 я запускал 12 каналов ШИМ

      Версия чего не идет. Arduino IDE

  4. Alex:

    Хотел загрузить скетч через Arduino Nano. Получаю ошибку
    C:\Users\E47B~1\AppData\Local\Temp\build5816874580202649740.tmp/core.a(wiring.c.o): In function __vector_3':
    C:\Atmel\Arduino1711\hardware\attiny13\avr\cores\core13/wiring.c:21: multiple definition of
    __vector_3′
    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, тогда точно никакие ардуинские библиотеки не будут мешаться, при том что они и не используются.

  5. Владимир:

    Спасибо автору! Делал подобную штуку на Ардуинке и решил сотворить на Тиньке13. Еле уложился в среде Ардуино в 1кБ и всё равно не в полной мере достиг задуманного. А тут 300 байт и так работает! Проблем с загрузкой не было. Открыл авторский скетч в Ардуино 1.6.13 (с подключённой Тинькой) и без проблем загрузил как описано на https://geektimes.ru/post/254970/. Управляю лампой сканера от МФУ — посох Дед мороза. Ключи — 2N7002. можно использовать мощные полевики с материнских плат, но они большие. Не забыть про токоограничивающие резисторы. В лампе сканера их нет. Я использовал на 50 Ом. А так, те же RGB диоды. Ещё раз спасибо автору!

    • Alexey Alexey:

      Здесь на тиньке 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)
        Если комментировать (вставил для проверки вывод попеременно высокого/низкого уровня на другой вывод) цикл работает, но цвет светодиодов не меняется
        🙁

        • Alexey Alexey:

          А версию библиотеки какую используете?
          Попробуйте для Arduino IDE
          Которая с setup() и loop()

          • Валерий:

            Заранее извиняюсь(наверно я туплю)
            Имеется в виду библиотека из архива light_ws2812-master.zip, которая в папке: light_ws2812-master\light_ws2812_Arduino\ ?
            Если она, то на IDE 1.6.5 результат не изменился. Загораются все светодиоды белым и все (и для метеора и и для радуги).
            Для Attiny85 похоже delay не работает, так как контрольный светодиод на выводе управления не помигивает.
            Для Attiny13A на выводе управления контрольный светодиод помигивает, но все горят белым
            🙁

  6. Сергей:

    Доброго дня!
    То ли руки не из того места, то ли звёзды не так сошлись, но у меня возникла проблема. Нет, схема работает, вот только по какой-то причине светодиоды мерцают при смене яркости. И я всё никак не могу разобраться, что я делаю не так. Ну да,я схему упростил, у меня стоит просто 3 светодиода через сопротивление 330 Ом каждый. Но, как мне кажется, это не должно было стать причиной. Пробовал на разных частотах от 1.2 до 9.6 МГц, меняется только скорость смены яркости, а мерцание остаётся

    • Alexey Alexey:

      Мерцание означает, что тинька работает на очень низкой тактовой.
      Нужно сперва сделать операцию «записать загрузчик» — программатор пропишет фьюз-биты микроконтроллера, а затем уже заливать прошивку. Понятно, что на 9.6МГц без делителя будет самое плавное диммирование.

      • Сергей:

        Большое спасибо, помогло!
        Я боялся записывать загрузчик, т.к. уже однажды прибил эту attiny13 поломав фьюзы. Теперь с осторожностью к этому подхожу)

Ваш отзыв