
Май 2020 года. Самоизоляция. Свободное время. Вспомнил старое увлечение.
Очень давно хотел освоить микроконтроллеры Atmel Attiny 85. Мастерил программатор на основе этого же микроконтроллера, но что-то не получалось. На самоизоляции почитал статьи на эту тему. Ребята не сидели без дела. Развитие бесплатной системы разработки программного обеспечения, технических средств для работы с микроконтроллерами фирмы Atmel не остановилось. Бойцы этого фронта приходят и уходят, а результаты остаются в сети. Применение этих знаний осложняется отсутствием стандартизации. Поэтому постараюсь подробнее рассказать о своем опыте.
В сети есть проекты, разрабатываемые радиолюбителями. Они делятся с нами своими идеями, технической документацией, файлами для прошивки (записи) микроконтроллеров, которые они используют в своих проектах. Для повторения (изготовления) этих проектов (изделий) необходимо записать в микроконтроллер программу, которая будет управлять его работой в изделии.
Давайте разберёмся, что нужно записать в микроконтроллер для его правильной работы в изделии. Сделать это необходимо до момента принятия решения на повторение проекта, так как иногда авторы забывают важные моменты конфигурирования (настройки) микроконтроллера. У них все работает, а мы начинаем повторять, но у нас не получается. Автор занялся другими проектами, с ним нет связи, ему уже трудно вспомнить о своем старом проекте. Ситуация трудная, фактически тупиковая.
Итак, для правильной работы изделия микроконтроллер необходимо подготовить (настроить).
Для настройки микроконтроллера для конкретного проекта требуется:
1. Записать в память программ (flash) программу, она присутствует в технической документации в виде файла с расширением hex (например, такой timer.hex).
2. Записать в энергонезависимую память (EEPROM) данные (постоянные величины, которые программа будет считывать при необходимости), они присутствуют в технической документации в виде файла с расширением eep (например, такой timer.eep). В простых проектах часто в энергонезависимую память ничего не записывают.
3. Включить, выключить или изменить режим работы электронных устройств, находящихся в микроконтроллере. Решается эта задача изменением специальных ячеек памяти (Fuse) программ, которые нельзя изменить при записи файла с расширением hex.
4. Разрешить или запретить считывание, изменение памяти программ. Решается эта задача изменением специальных ячеек памяти (Lock Bits) программ, которые нельзя изменить при записи файла с расширением hex.
5. Система разработки программ для плат семейства Arduino - Arduino IDE.
6. Программатор – электронную схему (Hard). Я буду использовать плату Arduino China (CH340). На сайте - https://github.com/AndrewBiz/avr-programmer-info/blob/master/docs/test-AVR-programmers-RU.md опубликовано следующее заявление: «Замечательно прошивает, не требует особых телодвиждений, работает в режиме моста UART-Host. В качестве USB-UART переходника используется китайский чип CH340G. Работает он вполне надежно, при этом на порядок дешевле варианта m16u2 (Arduino Original (m16u2))». Для его работы в качестве программатора, скомпилируем скетч ArduinoISP (входит в примеры Arduino IDE) автора Randall Bohn и запишем результат в микроконтроллер atmega328 платы Arduino China (CH340). Как записано в самом скетче: «Этот скетч превращает Arduino в AVRISP». У нас есть программатор AVRISP (В статьях в сети его называют иногда не так).
Перевод заголовка скетча ArduinoISP.
ArduinoISP
// Copyright (c) 2008-2011 Randall Bohn
// If you require a license, see
// http://www.opensource.org/licenses/bsd-license.php
//
// This sketch turns the Arduino into a AVRISP using the following Arduino pins:
//
// Pin 10 is used to reset the target microcontroller.
//
// By default, the hardware SPI pins MISO, MOSI and SCK are used to communicate
// with the target. On all Arduinos, these pins can be found
// on the ICSP/SPI header:
//
// MISO °. . 5V (!) Avoid this pin on Due, Zero...
// SCK . . MOSI
// . . GND
//
ArduinoISP
// Copyright (c) 2008-2011 Randall Bohn
// Если вам требуется лицензия, см. раздел
// http://www.opensource.org/licenses/bsd-license.php
//
// Этот скетч превращает Arduino в AVRISP, используя следующие контакты Arduino:
//
// Pin 10 используется для сброса целевого микроконтроллера.
//
// По умолчанию для связи используются аппаратные контакты SPI MISO, MOSI и SCK
// с целью. На всех Ардуино можно найти эти выводы
// на заголовке ICSP/SPI:
//
// MISO °. . 5В (!) Избегайте этого вывода на Due, Zero...
// SCK . . MOSI
// . . GND
//
7. Программа, которая будет управлять нашим программатором AVRISP.
Я выбрал программу SinaProg 2.1.1 SinaProg - это графическая оболочка для программы AVRdude, с простым и функциональным AVR fuse-калькулятором. SinaProg является бесплатным и свободно распространяется. Данная утилита портативная, то есть работает с любого места без установки. Помимо собственных файлов она включает в себя программу AVRdude. SinaProg создана иранскими ребятами, которые занимаются сейчас другими делами. Если SinaProg не запускается, то возможно у вас в системе не установлена программа NET Framework для windows от Microsoft, поэтому потребуется установить его.
6. Соединительные провода.
7. Макетная плата.
8. Кабель USB.
Используя, Фото 0_1 собираю схему программирования микроконтроллера ATtiny85 с помощью платы Arduino China (CH340) превращенной с помощью скетча ArduinoISP в программатором AVRISP, макетной платы и соединительных проводов с наконечниками.
Фото 0_1
Фото 0_2
Приступаем к освоению программы управления программаторами SinaProg и записи управляющей программы в микроконтроллер Attiny85. При первом запуске SinaProg выставляю параметры программатора – AVRISP, COM16 (моя плата Arduino China (CH340) на моем ПК с операционной системой Windows XP определяется на Сom16), BR 19200. На вкладке Device стоял микроконтроллер ATtiny84, я нажал на кнопку Searh (поиск). Все прошло хорошо, программа правильно определила микроконтроллер ATtiny85 и на вкладке Device выставила ATtiny85. SinaProg сообщила так же: «У микросхемы, которую я определяю, персональный идентификационный номер равен 0x1e930b, а у микроконтроллера ATtiny84, который был выставлен в окне Device, номер равен 0x1e930C. Для автоматического определения микроконтроллеров нажимайте на кнопку Searh два раза». Перевод смысловой, не дословный.

Проблемы нарисовались при нажатии на кнопку Advanced. Окна программы lock Bits, Calibration (калибровочный коэффициент), High Fuse, Low Fuse, Ext. Fuse прозрачные (неактивные), тоесть программа не может работать с этими объектами.
После долгих поисков, чтений статей пришлось дописывать файл avrdude.conf из состава SinaProg 2.1.1 для полной поддержки микроконтроллера ATtiny85.
Скачать файл avrdude.conf с поддержкой ATtiny85
После замены файла avrdude.conf, SinaProg 2.1.1 считала lock Bits, Calibration (калибровочный коэффициент), High Fuse, Low Fuse, Ext. Fuse.
Работу SinaProg 2.1.1 в Windows XP (32bit) c микроконтроллера ATtiny85 я проверил.
У меня есть ПК с операционной системой Windows 7 (32bit). Я читал о том, что SinaProg 2.1.1 не работает на системах с Windows 7.
Я все же решил проверить работу SinaProg 2.1.1 на системе с Windows 7. А также заодно проверить работу Arduino China (CH340) как программатора AVRISP на системе, где не установлена Arduino IDE.
Я подключил кабелем USB Arduino China (CH340) - программатор AVRISP к ПК с операционной системой Windows 7 (32bit), и в диспетчере устройств появилось устройство USB2.0-Serial cо знаком !. Система требует установить драйвер.

Устанавливаем драйвер: разархивируем файл CH341SER.rar, запускаем setup, затем install. Скачать файл CH341SER.rar
Установка драйвера прошла успешно, и в диспетчере устройств появилось новое рабочее устройство USB-SERIAL CH340 (COM5) - Arduino China (CH340) - программатор AVRISP).

Далее я настроил в свойствах устройства SERIAL CH340 (COM5), скорость передачи данных – 19200 бит в секунду.
К моему удивлению SinaProg 2.1.1 запустилась, но я не смог выставить COM5. Его не было в выпадающем списке. Там были только COM1, COM2, COM3, COM4, LTP, USB. При установке USB не заработало. Но тут я решил посмотреть каталог программы SinaProg 2.1.1 и обнаружил там файл Port.txt
Посмотрев содержимое файла Port.txt, я дописал в него строку COM5 com5 и сохранил его.

И случилось чудо. Я смог настроить SinaProg 2.1.1 (см Фото 13 окно Programmer). SinaProg 2.1.1 определила микроконтроллер ATtiny85 после двойного нажатия кнопки Search,
Фото 13
SinaProg 2.1.1 считала lock Bits, Calibration (калибровочный коэффициент), High Fuse, Low Fuse, Ext. Fuse.
Для полной уверенности я записал в микроконтроллер ATtiny85 файл timer.hex, списал данные с ATtiny85 в файл timer2.hex , а затем переключился к ПК с операционной системой Windows XP и считал данные с ATtiny85 в файл timer3.hex. Сравнил файлы timer2.hex и timer3.hex - они оказались одинаковые.
Затем я переключился к ПК с операционной системой Windows 7 и стер программу (Chip Erase) и считал память Flash в файл timer3.hex, он оказался чистым.

Скачать файл архива файл timer.rar с файлами timer.hex, timer2.hex, timer3.hex
В итоге я получил возможность работать с микроконтроллером ATtiny85 на ПК с операционными системами Windows XP и Windows 7. И могу утверждать, что программа SinaProg 2.1.1 работает на ПК с операционной системой Windows 7 (32bit). Также хочется сказать спасибо создателям хорошей программы SinaProg 2.1.1.
Теперь я задумался, а не сделать ли мне платку (шильд) типа такой, кtimerак на Фото 0_3, которая будет сверху устанавливаться на мою Arduino China (CH340) и подключаться к ее разъёмам.

Фото 0_3
Пример применения.
Предположим, я хочу собрать Программатор vusbtiny.
В технической документации я нахожу файл - vusbtiny85.hex, файла vusbtiny85.eep нет. Информация по фьюзам оказалась в виде графического файла. Скачать файл vusbtiny85.rar с файлом vusbtiny85.hex

Записываем файл - vusbtiny85.hex в микроконтроллер ATtiny85.

Теперь попробуем поработать с фьюзами. На вкладке Advanced в окне Low Fuse меняем 62 на E1 и нажимаем кнопку Write, а затем Read. Значение фьюза E1 не меняется, а значит, Low Fuse прописался.
Теперь при изменении Hign Fuse c DF на 5D я потеряю возможность моего программатора к работе с этим микроконтроллёром, т.к. мы изменим назначения выводов микроконтроллёра. Так и произошло. Теперь с этим микроконтроллёром можно будет работать только в режиме High Voltage Serial Programming.
Но об этом в следующей статье. А в технической документации на программатор vusbtiny указано: «Далее необходимо поменять фьюзы так, чтобы firmware могло использовать вывод 1 микроконтроллера (который пока по умолчанию используется для сброса). Для этого выполните команду:
avrdude -c usbtiny -p t45 -V -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xff:m
Внимание! Эта команда запретит дальнейшую перепрошивку запрограммированного чипа, так как вывод 1 перестанет работать как вход сброса. Чтобы стереть/перепрограммировать микроконтроллер, нужно использовать специальный высоковольтный программатор HVSP. Только им можно восстановить фьюзы, чтобы чип снова программировался по ISP».

Но теперь у меня есть микроконтроллер ATtiny85, подготовленный для работы в программаторе vusbtiny.
Скачать файл с SinaProg 2.1.1. rar с программой SinaProg 2.1.1
Удачи!