С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой STK200 программатор и пользовался им до этого момента. Но в последнее время он перестал меня устраивать и я начал искать альтернативу. Что из этого вышло я и постараюсь рассказать далее.
К программатору у меня были следующие требования:
- Скорость прошивки
- Работа с AVRStudio, AVRDUDE и другими распространенными программами
- USB интерфейс (не программный)
- Возможность прошивки устройств с различными напряжениями питания (1.5v — 5v)
По всем параметрам мне понравился клон Avrisp mkII. Он был собран и опробован на макетке. По скорости прошивки, думаю, он безусловный лидер. Но у него есть один недостаток, из за которого я отказался его собирать, это невозможность работы с avrstudio и с avrdude одновременно. Тип программы, с которой будет работать программатор задается на этапе компиляции прошивки. Меня это не устраивало.
Позже был найден проект AvrUsb500v2, на основе которого я и сделал себе программатор. Этот проект был мной доработан программно и схемотехнически. Главная программная доработка, пожалуй, это замена программного SPI интерфейса на аппаратный, что дало значительный прирост скорости прошивки. (Полностью atmega8 зашивается за 2 секунды, с верификацией 3 секунды) Теперь скорость ISP соответствует выбранной в AVRStudio и может меняться от 4kHz до 1.845 MHz. Скорость и другие настройки сохраняются в EEPROM. Также было исправлено несколько багов, переработан местами алгоритм работы программы, добавлена возможность просмотра напряжения питания программируемой схемы в AVRStudio. Добавлена возможность генерации внешнего тактового сигнала на 3 ножке 10-пинового ISP коннектора. Частота сигнала устанавливается из окна настроек AVRStudio и может меняться от 10kHz до 3.686MHz, либо генерация сигнала вообще может быть отключена. Добавлена возможность прошивки программатора через bootloader.
В схему я добавил буферы на все линии, для возможности программирования схем с различным напряжением питания (1.5-5v) На линии reset тоже стоит буфер. Это для возможности программирования нескольких поддерживаемых AT89* контроллеров, которые сбрасываются плюсом. Если поддержка их не нужна, можно сэкономить на буфере и поставить npn транзистор, не забыв инвертировать в исходнике соответствующий пин.
После того, как прошивка зашита в целевое устройство, все буферы, кроме буфера в линии Ex. Clock переводятся в Hi-Z состояние. Буфер в линии Ex. Clock переводится в Hi-Z состояние если выключена генерация внешнего тактового сигнала.
Если не подключено целевое устройство, все буферы, включая Ex. Clock, переводятся в Hi-Z состояние.
В спящем режиме программатора (см. ниже.) все буферы переводятся в Hi-Z состояние.
В качестве usb-uart преобразователя используется CP2102. (Помучился я, запаивая ее паяльником)
Три светодиода индицируют работу программатора.
- LED1 горит при подключении программатора к компьютеру, мигает, когда не обнаружен сигнал usb, например при выключенном компьютере (спящий режим программатора). Для этого используется пин SUSPEND CP2102.
- LED2 горит при подключении программируемой схемы.
- LED3 — обмен данными с компьютером.
Кнопка S1 — режим обновления прошивки, я её не выводил. При необходимости обновления просто замыкаю пинцетом 2 и 3 ножки атмеги. Чтобы войти в bootloader необходимо просто замкнуть эти ножки, при этом никаких переподключений не требуется. Пока мы в бутлоадере горят все три светодиода. Прошивка обновляется средствами avrstudio программой avrprog.
На транзисторе VT1 собрана защита входа VCC от переплюсовки без падения напряжения. В схеме использована Atmega88. Т.к. SPI теперь используется аппаратный, для достижения минимальных скоростей isp используется программный делитель частоты. В Atmega8 его просто нет.
Плата получилась компактная, двухсторонняя. Делалась под размер имеющегося корпуса от какой то радиометки. Дальше немного фоток:
Под этот корпус делалась плата, корпус вообще без всяких отверстий:
Такая получилась плата:
Спичечный коробок для масштаба:
В корпусе были вырезаны все необходимые отверстия, распечатаны наклейки:
В режиме бутлоадера:
Программатор в работе:
В архиве схема в pdf, прошивки (bootloader и основная), программа CP210xSetIDs для конфигурации CP2102, печатная плата в формате Sprint Layout 5.
Update. Обновил прошивку. Теперь минимальная скорость ISP не 14 а 4KHz, что дает возможность программировать контроллеры с низкочастотным кварцем, например часовым. Такой низкой скорости удалось достигнуть использованием программого spi, на остальных частотах задействован аппартный spi модуль.
Update. от 02.07.2012. Все, что написано дальше не является обязательным а нужно лишь для того, чтобы программатор корректно работал при подключении к компьютеру других устройств на микросхеме CP210x, а также для того, чтобы новое устройство определялось компьютером не как "Silicon Labs CP210x USB to UART Bridge", а как "STK500v2 USB Programmer"
Скачайте и распакуйте драйвер программатора отсюда, к нему мы ещё вернемся.
Подключите программатор к компьютеру, если у вас уже установлен драйвер CP210x в системе появится новый com порт, если нет, скачайте и установите драйвер тут.
Запустите программу CP210xSetIDs.exe, в выпадающем списке выберите подключеннный программатор, заполните поля Vid, Pid и Product String, как показано на скриншоте, не забудьте установить галочки. Нажмите «Program Device».
Переподключите программатор к компьютеру, система должна обнаружить новое устройство "STK500v2 USB Programmer":
Укажите путь к папке скаченного драйвера. В процессе установки вылезет сообщение с предупреждением, смело жмем «Все равно продолжить»:
Теперь наш программатор имеет название и его легко можно найти в диспетчере устройств:
Для корректной работы программатора необходимо зайти в свойства нового устройства и на вкладке «Управление электропитанием снять» снять галочку:
Автор: Bonio
Архив для статьи "Программатор STK500v2 by Bonio" | |
Описание: Схема в pdf, прошивки (bootloader и основная), программа CP210xSetIDs для конфигурации CP2102, печатная плата в формате SprintLayout 5. | |
Размер файла: 547.72 KB Количество загрузок: 6 519 | Скачать |
Комментарии
Я думаю заменить можно, по идее только дрова нужны другие
На штырьке активации загрузчика 0В ??? А если 0, то как среагирует, ведь на "землю" коммутируется. Может неправильно "залил" загрузчик??? Буду разбираться.
Использовал Atmel88 в DIP-корпусе... Адекватная ли замена???
Буду дальше проверять...