Делаем дешевый аналог STK500 из китайского USB ISP программатора

На aliexpress был куплен USB ISP программатор коих там - пруд-пруди.
Будем переделывать его в аналог атмеловского STK500, известный как AVRDOPER.


Стоит он в где-то 3-4$ (около 200 рублей на момент покупки), ищется на aliexpress / ebay по фразе USB ISP programmer. Если в хозяйстве нет программаторов для ATMEL - рекомендую брать там же USBASP программатор (только платка) по цене 2-3$ - она позволит не только программировать микропроцессоры ATMEGA, но и вот такие программаторы. Правда не из среды разработки, а только из AVRDUDE и подобных спец. программ.

Открываете у программатора колпачок, затем стягиваете алюминиевый корпус в сторону USB-разъема и все - получаете плату программатора. Смотрите внимательно - нам нужно, чтобы программатор был собран на ATMEGA88 (предположительно, версия платы > 3.0).

Если Вы там увидели простую ATMEGA8 - не страшно, люди ставили AVRDOPER и туда:
здесь, здесь и здесь. Ну либо сделать аналогично тому, что написано ниже, только для ATMEGA8.

Ну а если у Вас там - ATMEGA88 - продолжаем - переворачиваем плату, видим там два контакта для перемычки (с надписью UP). Закорачиваем их проводком:

После этого программатор перейдет в режим самопрограммирования. Программировать его можно любым другим программатором с аналогичным разъемом - например USBASP-ом.

Т.е. берем второй программатор, его втыкаем в компьютер, а хвостик с разъемом - в нашего подопытного.

Я программировал с помощью AVRDUDE + AVRDUDEPROG и китайского USBASP программатора. Выбираем в AVRDUDE USBASP и ATMEGA88. Считываем сигнатуру - если считалась - значит все сделали правильно и можно шить.

Если хотите сохранить текущую прошивку программатора, что я рекомендую (чтобы была возможность откатиться), то:
  1. считать текущие FUSE - биты и записать их значение
  2. считать прошивку в отдельный файл
  3. считать EEPROM в отдельный файл

Далее:

  1. полностью стереть микроконтроллер
  2. записать новые FUSE биты
    для ATMEGA88 FUSE LOW BYTE = 0xDF и FUSE HIGH BYTE = 0xDD, если FUSE не инвертированные - это означает включеные SUT1, SPIEN и BODLEVEL1
  3. скачать и прошить прошивку AVRDOPER
  4. EEPROM не трогать

Ну вот и все, теперь надо отпаять нашу перемычку, чтобы программатор вошел в штатный режим работы и установить драйверы AVRDOPER.

Теперь, когда Вы подключите новый программатор в USB, он найдет два устройства. Одно из которых будет виртуальный COM-порт. Находите его в диспетчере устройств, смотрите какой у него номер. Если номер > 4, то советую принудительно переопределить там же на какой-либо от 1 до 4 (т.к. в средах разработки COM-порты с бОльшими номерами не показываются).

Все - теперь что из CodeVision, что из AtmelStudio можно настроить, что программатор у Вас - STK500 на соответствующем COM-порту - и все - можно шить прямо из среды разработки.

По скорости мне показалось, что AVRDOPER медленнее прямого USBASP, зато удобней из-за работы непосредственно из среды, где код пишешь.


Что касается FUSE битов и других контроллеров ATMEL

В принципе, FUSE биты можно посмотреть в makefile от AVRDOPER (в том числе и для ATMEGA8). По-умолчанию AVRDOPER собран для ATMEGA8 и кварцев от 12 MHz с соотвествующим makefile-ом, однако в моем архиве он изменен под ATMEGA88 (однако hex для ATMEGA8 там присутствует, да и makefile можно всегда исправить).
Для нашего случая я перекомпилил AVRDOPER для ATMEGA88.

Перекомпилить просто в любом линуксе (я использовал Ubuntu server):
  1. ставим компиллер GCC с поддержкой ATMEL
    sudo apt-get install gcc-avr binutils-avr avr-libc
  2. ставим утилиту make sudo apt-get install make
  3. копируем в некую директорию разархивированный AVRDOPER
  4. изменяем там makefile, выставляя там DEVICE, F_CPU и FUSE_L и FUSE_H
  5. make usbasp
  6. получаем в той же директории нужный нам hex-файл прошивки


Этот же программатор можно переделать в нормальный USB ASP

Вот переделанные исходники, их можно скомпилить хоть под ATMEGA8 хоть под ATMEGA88 и авторская статья.

Для ATMEGA88 FUSE LOW BYTE = 0xFF и FUSE HIGH BYTE = 0xDF и прошивка.

09.08.2016, Protocoder
Михаил15.02.2018 23:51:04#ответить
Перерыл весь инет. Единственное доступное и полное описание. Спасибо!
АРТМ07.03.2019 18:02:18#ответить
Соглашусь с Михаилом
Владислав07.08.2019 15:22:07#ответить
Купил программатор "USBISP" version2.0, сделанный на чипе Atmega88. Определялся вообще как HID. Сделал всё по вашей инструкции. При установке драйвера указывает на ошибку код 10. После повторного включения программатора, жёлтый треугольник не горит, COM видится как активный, но COM порт в терминале и атмел студии не виден. FUSE биты как указано. Программатор вычитывает все конфиги и прошивку.
Protocoder09.08.2019 01:49:13#ответить
Во-первых, если драйвера установились с ошибкой - они вряд-ли будут нормально работать.
А во-вторых наши китайские друзья могли запросто что-то сделать со схематехникой этого модуля.

Чтобы я попробовал - если все-таки виртуальный COM видится и доступен - попробуйте переназначить его на COM1-4 - возможно тогда студия его увидит и сможет с ним работать.
Я не припомню, чтобы у меня было такое - все сразу-же подхватилось.
Игорь08.05.2020 13:03:13#ответить
Самая правильная статья из всех
Написать комментарий