Следи за обновлениями в facebook

вівторок, 15 листопада 2016 р.

Дневные ходовые огни и поворотники на TM1804 и ATTINY85 или как программировать микроконтроллеры ATMEL при помощи Arduino


Мои заказчики получили забавные сигналы поворотов. Каждый поворот состоит из 16 сегментов. Каждый сегмент может светиться желтым или белым. В комплекте модуль управления со стабилизатором напряжения для питания диодов. При включении модуля диоды светятся белым, при подаче сигнала с поворотника белый выключается и начинает мигать желтый. Когда сигнал с поворотника пропадает вся линейка снова светится белым. Ранее я разрабатывал конструкцию Устройство управления Дневными Ходовыми Огнями (ДХО) своими руками (DIY). Прошлая конструкция управляла только белыми ДХО. Меня попросили совместить прошлую конструкцию и новую светодиодную линейку на TM1804.
Задание есть - поехали работать.

Выбор микроконтроллера

Предыдущая плата управления была на PIC12FF629 (675). Контроллер который я знаю вдоль и поперек но он весьма старый, сложно найти в количестве, и цена не малая. Решыл попробовать ATMEL. Выбор пал на ATTINY85. Мне нужен был минимальный размер. Три входа для управления, выход данных на ленту, вход для кнопки для смены эффектов. В начале планировал использовать ШИМ канал для совместимости с обычной светодиодной лентой в качестве ДХО, но по факту не понадобилось. Температуры рабочие позволяют использовать его на улице. Встроенный тактовый генератор на 1, 8, и даже 16 МГЦ при использовании встроенного PLL генератора.

И так остановился на ATTINY85.  Даташит у меня в папке.

Язык, среда программирования

На ассемблере писать уже не в кайф. Очень долго. Решил писать на  С. На данный момент привычная мне среда программирования Arduino не позволяет "из коробки" писать программы под ATTINY85. Но решение нашлось очень быстро. Оказывается есть ядра для среды Arduino, после установки которых программу написанную в среде ардуино можно компилировать, в том числе, и под ATTINY85, и еще под кучу контроллеров. Архив с ядром лежит у меня на диске.
Ссылка на оригинальный материал на GitHub
Для установки нужно скопировать папку из архива в директорию 


Запустить Arduino. В моем случае версия 1.6.12 Русская. В меню Инструменты/плата/менеджер плат - открыть этот самый менеджер плат, он перечитает папку Hardware и в меню появятся новые пункты


Теперь мы можем писать программы в среде ардуино под выбранный контроллер. 

Программирование микроконтроллера ATTINY85 из среды Arduino

Написали мы программу, а как ее теперь залить в микроконтроллер. Я счастливый обладатель AVRDragon, но использовать мне его так и не довелось. И так не хотелось тратить время на то чтобы разобраться с тем как с ним работать. 
Оказывается плату ардуино можно превратить в программатор для ATTINY. Для этого нужно собрать схему из 6 проводов и конденсатора. Залить в ардуинку скетч с программатором. И программировать контроллер ATTINY85 точно так же как и обычную плату ардуино. Отдельную статейку можно почитать здесь.
Собираем схему




Не забудьте конденсатор между reset и gnd! В моем случае стоял на 1000мкф х 25в.

Загружаем в ардуино скетч с ISP программатором


потом выбираем в инструментах нужный процессор, нужную частоту процессора (если генератор внутренний то нужно выбирать internal!) и программатор "Arduino As ISP"


Мы готовы :)
Чтобы проверить работоспособность, открываем скетч blink из стандартных скетчей ардуино. меняем LED_BUILTIN например на 3.  Это цифровой вывод 3, и находится он на ножке 2 микроконтроллера (см. выводы контроллера выше).
Вгружаем программу. 
Подключаем светодиод на вторую ногу и корпус (GND) и он должен мигать хотя меееедленно!

Замечу что по умолчанию микроконтроллер будет работать на частоте 1Мгц, и по этому задержка в скетче 1000мс - будет на много больше. Для того чтобы изменить частоту контроллера на ту что выбрана в меню, в моем случае 8МГЦ, нужно записать загрузчик. Загрузчик нужно записывать на каждый новый контроллер, если программируете серию.


Ура диодик мигает. Можем продолжать :)


Обновление информации. Программирование ATTINY24/44/84

Развивая и модифицируя проект, стало мало ног на 8ногой тушке. Решил использовать ATTINY44, Ниже схема подключения, распиновка, и настройки среды ардуино. Обратите внимание на то что чтобы распиновка в программе совпадала с распиновкой на картинке, нужно переключить соответствующую настройку "Pin mapping" = "clockwise".





Работа с TM1804 и им подобными микросхемами так называемых Addressable led.

Как оказалось ленточка у заказчика (вернее линейка светодиодов) была реализована на микросхемах TM1804. Даташит на китайском у меня на диске. И даташит на TM1803 на английском для изучения

Каждый сегмент питается в нашем случае стабильным напряжением около 10,5В. Напряжение, да и вообще конкретную схему стабилизатора, срисовал с оригинального блока управления от ленточки. 
У каждого сегмента есть ножка ввода данных и ножка вывода данных. 
Каждый сегмент управляет тремя (в нашем случае задействовано только 2 канала) светодиодами, и организовывает управление яркостью от 0 до 255. 
На каждый светодиод в сегменте нужно 8 бит информации чтобы выставить яркость. В сегменте три канала (из которых используем 2) то есть 8бит х 3 = 24.
Информация загружается последовательно. Например если у нас три сегмента, тогда нам нужно загнать 24 бита х 3 сегмента = 72 бита. 
Микросхема (сегмент) принимает 24 бита, и если информация продолжает поступать, то микросхема начинает отдавать биты которые пришли ранее на выход. 
Иллюстрация из даташита

Откуда следует что каждый новый бит передается 2мкс. Для передачи 0 нужно сформировать импульс длинной 0,68мкс±0.15мкс в начале периода передачи бита. А для передачи 1 - нужно сформировать импульс 1,36мкс±0,15мкс в начале периода передачи бита. 

Библиотека для работы с TM1804 для ардуино

Как видно с описанного выше ничего сложного нет в передаче данных. Единственное что даже при 8Мгц стандартная операция digitaWrite в ардуино занимает очень много времени, и не получается сформировать необходимые длинны импульсов. 

Для того чтобы не изобретать велосипед воспользуемся готовой библиотекой. 
В библиотеке необходимые тайминги сформированы на ассемблере, что занимает существенно меньше процессорного времени. Оригинал библиотеки от pololu здесь.

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


И собственно схема управлятеля лентой:

Программа

Если готовы повторить конструкцию, то программой поделюсь по запросу. Сообщением сюда или на страницу Facebook. Или если хотите установить готовый екземпляр себе на машину в Киеве или Украине, так же можете обращаться.

Видео работы

На последочек видео с работой. На видео я вначале включаю режим программирования, в котором кнопкой можно выбрать режим поворотника. Далее проверяю работу поворотника и работу ДХО/Габаритов.


3 коментарі:

  1. Евгений Нестеренко
    Здравствуйте. У меня сгорел один контроллер на таких ходовых огня, у вас можно купить два собраных и прошитых контроллера для таких ходовых огней ?
    24 ч.
    Фото профиля пользователя Евгений Нестеренко
    Евгений Нестеренко
    Если обратите внимание на мою проб перезвоните мне пожалуйста 0508306880 или 0633403333 Евгени

    ВідповістиВидалити
  2. Доброго дня, а не можна отримати код вашої програми для вивчення ?

    ВідповістиВидалити
  3. Здравствуйте, очень понравилась ваша разработка. Очень хотелось бы повторить. Поделитесь пожалуйста программкой. Спасибо.

    ВідповістиВидалити