Схемы lpt программаторов. Интерфейс внутрисистемного программирования ISP

16.04.2019

Имеющиеся схемы программаторов можно разделить на две категории: подключаемые к LPT порту компьютера и подключаемые к COM порту, причём это разделение весьма условно. Преимуществом LPT программатора является его простота: в простейшем случае он выглядит как несколько проводков, соединяющих непосредственно выводы LPT порта и программируемого микроконтроллера, более сложная схема представляет собой шинный формирователь, через который осуществляется связь компьютера с микроконтроллером. Несмотря на недостатки первой схемы (на разных компьютерах она ведёт себя по-разному из-за разброса характеристик микросхем LPT портов, наводки в кабеле, необходимость отключать программатор от программируемой микросхемы после программирования) она может оказаться полезной при необходимости запрограммировать одну-две микросхемы.

При постоянной работе с микроконтроллерами следует воспользоваться более сложной схемой. Шинный формирователь позволяет не отключать программатор от микроконтроллера после программирования, т.к. программа переводит его выводы в Z-состояние по окончанию работы. Однако у программаторов, подключаемых к LPT порту есть и недостатки. Самый главный из них заключается в том, что программатор занимает обычно единственный доступный в компьютере порт, который, к тому же, в большинстве систем занят принтером, и приходиться либо покупать мультикарту или новый принтер, либо постоянно переключать принтер и программатор, что не очень удобно. От этого недостатка свободны схемы для COM порта. Также, как и в случае с LPT программаторами, существуют простые схемы и более сложные. В простейшем случае схема представляет собой преобразователи уровней RS232 в TTL и наоборот для отдельных сигналов, необходимых для ISP (у COM порта три линии входа и пять линий выхода, для IS программирования требуется три линии выхода (SCK, MOSI, Reset) и одна линия входа (MISO)). Схема более сложного программатора на COM порт состоит из микросхемы интерфейса RS-232 и микроконтроллера, преобразующего команды программы на PC в команды, понятные программируемой микросхемой. К тому же такое построение схемы позволяет практически неограниченно "наворачивать" схему, - можно поставить любое количество индикаторов для индикации режима программирования, можно подключить микроконтроллер к ОЗУ, чтобы программа для программируемой микросхемы сначала переписывалась в ОЗУ, а затем, независимо от работы PC, переписалась в программируемую микросхему, можно также сделать программатор с одной универсальной панелькой для всех программируемых микросхем, - всё зависит от программы управляющего микроконтроллера и фантазии разработчика.

Программаторы можно разделить и по типу подключения к программируемой микросхеме: либо она вставляется в панельку программатора, либо программирование осуществляется внутрисхемно (с помощью специального разъёма, предусмотренного разработчиком устройства). Последний тип подключения очень удобен, но не все МК поддерживают такой режим программирования, к тому же при внутрисхемном программировании невозможно запрограммировать некоторые биты конфигурации и для их изменения следует воспользоваться параллельным программатором. Практически все МК Atmel поддерживают режим ISP, к тому же при повседневной работе с микроконтроллерами вполне достаточно внутрисхемного программатора.

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

Перед начинающими вопрос “а чем мы будем прошивать свой контроллер?” встает практически сразу. Эта проблема решается двумя путями – покупаем серийный программатор или собираем свой собственный. Естественно нецелесообразно приобретать какой либо из серийных программаторов на начальном этапе знакомства с микроконтроллерами. Самым простым решением будет так называемый программатор «пять проводков». Это вариант вполне подойдет для разового применения, но существует большая опасность, что рано или поздно ваш LPT- порт в компьютере сгорит. В качестве бюджетного и безопасного варианта программатора для параллельного порта мы используем более совершенную схему.

Представляем простой и безопасный программатор для параллельного порта. Схема программатора достаточно распространена в различных вариациях и основана на использовании микросхемы-буфера 74HC244N. Буфер сохраняет ваш порт принтера в целости и сохранности. Дополнительно в схему включен резистор, задачей которого является защита от статического электричества.

Программатор совместим с Атмеловскими STK200/300 и поддерживается многими популярными компиляторами. Весь небольшой набор деталей для его сборки достаточно распространен и не вызовет трудностей с приобретением. Печатная плата выполнена в одностороннем варианте с несколькими перемычками.

Для подключения программатора к компьютеру удобно использовать кабель – удлинитель LPT-порта.

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

Программатор из 5 проводков для микроконтроллеров AVR является самым простейшим программатором, который можно собрать на "коленке". Устройство подключается к ПК через LPT порт, что является недостатком программатора т.к. в современных материнских платах не часто можно встретить наличие порта.

Для изготовления программатора понадобятся:

1. Штекер из 25-и контактов для параллельного порта (LPT) DB-25M.

2. Резисторы любые 4 шт. номиналом 100-150 Ом для защиты порта от короткого замыкания и неправильного монтажа.

3. Шлейф или МГТФ провод. Для предотвращения ошибок от помех и наводок при чтении и записи микроконтроллера рекомендуется использовать провод длинной до 20см.

4. Термоусадочная трубка для изоляции оголенных участков проводников, которая предотвратит короткое замыкание.

Сборка программатора

На рисунке изображена схема распайки проводников и резисторов R1-R4, а так же перемычек.

Контакт №6: SCK - последовательный тактовый сигнал (англ. Serial Clock). Служит для передачи тактового сигнала для ведомого устройства.

Контакт №7: MOSI - выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.

Контакт №9: RESET - сброс, используется для входа и нахождения в режиме последовательного программирования.

Контакт №10: MISO - вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.

Контакт №18-25: GND - контакти земли, объединяться с контактом питания GND программируемого микроконтроллера. Можно подключить 1-н контакт на выбор не обязательно все.

Контакт №2,12; 3,11: Перемычки, для определения программатора как STK 200,300.

Видео к статье:

Для предотвращения вывода из строя параллельного порта подключать и отключать программатор следует при выключенном питании на микроконтроллере, а также не допускать замыкания контактов программатора.

Если программируемый микроконтроллер будет питаться внешним источником питания (батарейки, блок питания), то обязательно нужно соединить минус компьютера (GND 18-25 контакти LPT порта) с минусом микроконтроллера.

Самый простой вариант программатора для AVR это пять проводков, припаиваемых к порту контроллера и втыкаемых в LPT порт. Не спорю, можно и так. Но я все же не рекомендую этот способ. Даже схему подключения давать не буду — если надо будет сам найдешь. Так как данный метод не очень стабилен, возможны сбои при прошивке , длина проводков ограничена двадцатью сантиметрами (если больше, то будет глючить), поэтому придется шариться в комповой заднице. Да и LPT порт спалить проще простого . В общем не рулез.

Шарясь по инету, я нашел отличный программатор, работающий через RS232 он же COM порт. А также удобную программу для прошивки контроллера UniProf от Николаева. Схему программатора придумал Громов, создатель Algorithm Builder.

Для сборки программатора потребуется:

  • Три диода, любых из маломощных. Например 1N4148.
  • Семь резисторов на 1кОм. У меня резисторы типоразмера 1206
  • Если будешь делать по моей печатной плате, то можешь еще купить 3 резистора на 0 ом — перемычки, они же пофигисторы.

Печатная плата либо рисуется маркером, либо, как у меня, делается методом лазерного утюга.

Разьем DB9, что на фотке, я поставил для удобства. У меня туда подключаются разные прошивающие шнуры либо вот такой вот адаптер:


Программатор запаян, контроллер к нему подключен. Пора убедиться в том, что все сделано верно.

Запускай UniProf.exe и выбирай номер СОМ порта к которому у тебя подключен программатор. Сразу же должен определиться тип контроллера и высветиться над левым окном кода.

Не получилось? Тут три варианта:

  • Программатор спаян криво.
  • Дохлый контроллер.
  • Неправильно припаял проводки к микроконтроллеру.

Еще раз все досконально проверяешь и пробуешь снова. Должно получиться.

Дальше, если до этого ты никогда не работал с контроллерами, тебе возможно потребуется тестовая программа. Она не будет делать ничего полезного, зато позволит тебе точно быть уверенным, что все что ты сделал до этого ты сделал правильно.

Скачиваешь Atmel AVR Studio — это официальная среда для разработки программ под микроконтроллеры AVR . Студия поддерживает все микроконтроллеры семейства Atmel AVR . Найти ее последнюю версию можно на сайте Atmel.com

Далее создавай новый проект, в качестве языка программирования выбирай Assembler и укажи папку и имя где будет располагаться твой проект. В качестве отладчика бери AVR SIMULATOR и укажи с каким именно контроллером ты будешь работать. После чего забивай в текстстовое окно простейшую программу.

Вот ее примерный текст:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 .INCLUDE "m16def.inc" ; это подключается список макроопределений; без него компилятор не будет знать под какой; именно процессор мы собираем программу; если у тебя другой контроллер, то подставь; соответствующий инклюдник. Они находятся в; папке AVR Studio по адресу; "AVR Tools\AvrAssembler\Appnotes\" .MACRO outi LDI R16,@1 OUT @0,R16 .ENDMACRO ; задаем весьма удобный макрос, позволяющий; записать произвольное заданное число в любой; регистров за одну строку кода. .CSEG .ORG 0x0000 RJMP RESET .ORG 0x0030 ; Директива начала кода с адреса 0х0030 ; адрес взят с большим запасом, потому как; у разных AVR разных размеров таблица; прерываний. Так что уж чтобы наверняка! RESET: ; стартовая метка OUTI DDRA,0xFF OUTI DDRB,0xFF OUTI DDRC,0xFF OUTI DDRD,0xFF ; Конфигурируем направления портов на выход; Если данный контроллер не имет, например, порта; С, то эту строчку надо закомментировать. OUTI PORTA,0xAA OUTI PORTB,0xAA OUTI PORTC,0xAA OUTI PORTD,0xAA ; Выдаем на выходы 10101010, чтобы получить; четкую картину того, что на портах произошли; изменения. После выполнения программы; на выходах микроконтроллера в шахматном порядке; будут либо напряжение питания, либо земля. Что; легко проверяется либо вольтметром, либо простейшим; пробником на светодиоде. RJMP RESET ; Зацикливаем программу.

INCLUDE "m16def.inc" ; это подключается список макроопределений; без него компилятор не будет знать под какой; именно процессор мы собираем программу; если у тебя другой контроллер, то подставь; соответствующий инклюдник. Они находятся в; папке AVR Studio по адресу; "AVR Tools\AvrAssembler\Appnotes\" .MACRO outi LDI R16,@1 OUT @0,R16 .ENDMACRO ; задаем весьма удобный макрос, позволяющий; записать произвольное заданное число в любой; регистров за одну строку кода. .CSEG .ORG 0x0000 RJMP RESET .ORG 0x0030 ; Директива начала кода с адреса 0х0030 ; адрес взят с большим запасом, потому как; у разных AVR разных размеров таблица; прерываний. Так что уж чтобы наверняка! RESET: ; стартовая метка OUTI DDRA,0xFF OUTI DDRB,0xFF OUTI DDRC,0xFF OUTI DDRD,0xFF ; Конфигурируем направления портов на выход; Если данный контроллер не имет, например, порта; С, то эту строчку надо закомментировать. OUTI PORTA,0xAA OUTI PORTB,0xAA OUTI PORTC,0xAA OUTI PORTD,0xAA ; Выдаем на выходы 10101010, чтобы получить; четкую картину того, что на портах произошли; изменения. После выполнения программы; на выходах микроконтроллера в шахматном порядке; будут либо напряжение питания, либо земля. Что; легко проверяется либо вольтметром, либо простейшим; пробником на светодиоде. RJMP RESET ; Зацикливаем программу.

Далее жми на кнопку компиляции (или F7 ) и лезь в папку своего проекта. Там тебя уже должен поджидать ****.hex файл с прошивкой.
Запускай UniProf.exe , жми на кнопочку с открытой папкой и надписью HEX . Выбирай свой свежескомпиленный проект и жми ок.
Вторым окном UniProf попросит тебя ввести данные EEPROM , у нас EEPROM не используется, поэтому нажимай отмену .
Все, теперь можно прошивать. Жми на красную стрелку с надписью Prog и жди. По окончании можешь нажать чтение и поглядеть что записалось в твой контроллер — должно показать то же самое, что и было уже загружено в окно.

Теперь тебе остается подать питание на свой микроконтроллер и посмотреть что появилось на портах. Увидел «гребенку» из высоких и низких уровней напряжения? Отлично! Ты прошил свой первый в жизни контроллер! Теперь ты можешь с головой занырнуть в изучение микроконтроллеров AVR.

Если не заработало, то вот возможные грабли и пути решения.

  • Современные компьютеры, с гигагерцовыми процессорами, новомодными Вистами и Семерками очень плохо дружат с этим программатором. Мало того, что у вас может банально не обнаружиться COM порта, а если и будет так еще не факт что все заработает как надо. Рекомендую собрать себе для радиотехнических опытов из подручного хлама что то вроде PIII 800/Windows’98. Бесплатно нарыть такое чудо проблем не составит и сжечь не жалко, если что не так
  • Данная схема не работает через переходники USB-COM или работает, но ОЧЕНЬ медленно. Скажем прошивка одного микроконтроллера может длиться часа полтора.
  • Питание, на первый раз, лучше всего брать с блока компа . Меньше вероятность что либо сжечь или ошибиться
  • Проверяте схему по 3-4 раза! Т.к., судя по комментам, большая часть проблем из-за кривого монтажа.
  • Перед запуском программы в МК НУЖНО ОТКЛЮЧИТЬ ПРОГРАММАТОР и подать на вход RESET +5 вольт через резистор в 1..10кОм. С подключенным программатором ничего работать не будет, т.к. он прижимает RESET и не дает кристаллу стартовать.
  • Если UniProf не определяет МК, возможно у вас слишком быстрый компьютер. Для компенсации этого «недостатка» нужно включить галочку «Тормоз» Она показывается если отключить снятием галки EEPROM панель отображения данных EEPROM.
  • Если галка Тормоз не помогла, то пробуйте на другом компе. Т.к. тут СОМ порт обрабатывается в нештатном режиме, а значит не факт, что ваш СОМ порт поймет все правильно.
  • На худой конец, если ничего не помогает, попробуйте программатор из 5 проводков или другую прошивающую программу, например avrdude. Провода делайте как можно короче! 10-15 сантиметров это МАКСИМУМ!
  • Читайте комменты к записи . Там многие косяки уже были разобраны. Возможно и ваш окажется среди них.

Дополнение от Outsider :
1. Если сзади у компа нет разъема COM-порта, то это не на 100% означает, что такого порта нет на материнской плате в принципе. Пока еще на матерях встречаются разъемчики с 9 штырьками в два ряда — подробнее нужно смотреть документацию к материнской плате. Я на своей ASUS P5K SE нашел и успешно заюзал.

2. Да, +5 и GND это не земля и контакт из COM-порта, а именно внешнее питание. Проще всего его добыть в компе — +5 есть в красном проводе на любом из разъемов, питающих жесткие диски. А GND — на корпусе самого компа. Или на черном проводе того же разъема.

3. Если с UniProf что-то не срастается, то можно попробовать avrdude. Чтобы это сделать, нужно прописать в avrdude.conf следующее:

programmer
id = «nikolaew»;
desc = «serial port banging, reset=dtr sck=rts mosi=txd miso=cts»;
type = serbb;
reset = 4;
sck = 7;
mosi = 3;
miso = 8;
;

А затем запустить avrdude со следующими параметрами:

avrdude -n -c nikolaew -P com1 -p m16

Если все в порядке, то программа скажет:
avrdude: AVR device initialized and ready to accept instructions

Дополнение от Riko
Эксприменатально было выяснено, что для правильной работы этого программатора напряжение питания МК должно быть не ниже 5 вольт (но не выше 5.5!!!). То есть если МК подключен к трем пальчиковым батарейкам, то вы обламываетесь, так как там 4.5 вольта! Запитывайте от компа!!!

Дополнение от SLY_DEr
Не работало. Сменил резисторы с 3к (не было на 1к) на 460ом’ные — заработало, но с ошибками.
Решил чисто ради спортивного интереса снизить скорость ком-порта в диспечере устроиств и о, чудо, все заработало как надо. Скорость порта снизил с 9600к до 4800к и плюс убавил буфер приема и передачи (там же) до значений 4 и 6 соответственно.

Если что непонятно, то не стесняйся спрашивать у меня в комментах.

З.Ы.
Если не получается ну никак, то может быть ваша материнска плата не поддерживает столь нестандартное обращение с COM портом и стоит попробовать другие программаторы? Например, или . Они хоть и сложней, но зато работают более корректно, без извратов.


Прошивка микроконтроллера - это запись в его постоянную память заданной программы, которая представляет собой код в шеснадцатеричной системе счисления (файл с расширением hex). Прошивка происходит с помощью специального устройства - программатора. Они отличаются по способу подключения к персональному компьютеру, например через USB, LTP,COM интерфейсы.

Микроконтроллеров AVR для программирования имеют пять контактов: MOSI - предназначен для приема данных; MOSO - для вывода данных; SCK - вывод синхроимпульсов; RESET просто сброс и общий провод.


Подсоединим эти пять контактов через токоограничивающие резисторы к параллельному LPT порту компьютера и получим самый простой LPT программатор микроконтроллеров семейства AVR.

При сборке схемы нужно чтобы кабель был экранированный, особенно хорош для этих целей старый интерфейсный кабель от принтера. Если использовать обычный кабель, то его длина должна быть как можно короче, и то иногда возникают ошибки при программировании. Но главный недостаток этой схемы тот, что при не качественном монтаже или ошибки подключения можно вывести из строя LPT порт компьютера

Схема USB программатора для микроконтроллеров AVR, выполнена на микроконтроллере Atmega8. Схема очень надежная и имеет одну очень важную особенность, позволяющую восстанавливать микроконтроллеры с ошибочно установленными фьюзами.


Для прошивки микроконтроллера Atmega8 программатора необходимо использовать любую из рассмотренных схем выше для LPT.

Печатную плату можно изготовить своими руками по популярной среди радиолюбителей , а чертеж печатной платы в формате уже имеется в архиве с прошивками и драйверами.

В идеале у нас должен получится такой USB программатор


Остается лишь записать программу в память микроконтроллера, для этого лучше всего использовать утилиты Uniprof и Code Vision AVR.

Программа предназначенная для интегрированной среды разработки программного обеспечения под AVR микроконтроллеры. Основными особенностями CodeVisionAVR является то, что он легкий и очень понятный для самостоятельного изучения, а также поддерживает все существующие микроконтроллеры AVR.

Если вы решили использовать программу Uniprof необходимо задать следующие фьюзы.


По окончанию прошивки микроконтроллера Atmega8, переключаем тумблер SA2 в НОРМ, и подключаем программатор к USB . Компьютер должен найти устройство. После этого обязательно устанавливаем драйвер из архива. По завершению установки драйвера для программатора, он полностью готов к работе.

Программатор способен работать со следующими оболочками AVR Prog, AVR Studio, ChipBlasterAVR и, одна из самых удобных, Code Vision AVR.

Похожие статьи