Сайт о телевидении

Сайт о телевидении

» » Программаторы для AVR микроконтроллеров (USB, COM, LPT). Делаем LPT программатор для AVR микроконтроллеров

Программаторы для AVR микроконтроллеров (USB, COM, LPT). Делаем LPT программатор для AVR микроконтроллеров

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

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

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

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

Схема в формате sPlan 6.0 и разводка платы в формате Sprint Layout 4.0 под ЛУТ вы можете скачать ниже.

Для начала работы с микроконтроллерами AVR, необходимо обзавестись средствами внутрисхемного программирования. На начальном этапе вполне подойдет несложный адаптер STK 200/300. В приведенной схеме присутствуют перемычки для определения наличия как адаптера STK200 (выводы 2-12 разъема X1), так и STK300 (выводы 3-11). Для изготовления адаптера потребуется разъем DB25М с пластиковым корпусом, десятижильный плоский кабель, разъем IDC-10, стеклотекстолит и детали. Принципиальная схема LPT программатора AVR показана на рисунке.

Детали устройства монтируются на односторонней печатной плате, которая изготавливается по ЛУТ технологии. После монтажа планарных элементов можно припаивать микросхему 74HC244. С помощью многожильного или одножильного монтажного провода небольшого сечения припаиваем перемычки в соответствии со схемой .

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

Не смотря на то, что длина кабеля не должна быть более полуметра, для обеспечения надежной работы адаптера, иногда использовали адаптер даже с двух метровым кабелем без всяких проблем. Надеюсь данная схема окажется полезной для тех, кто решится начать свою работу с микроконтроллерами AVR со сборки адаптера STK200/300. Схему испытал: serh7000.

Самый простой вариант программатора для 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 портом и стоит попробовать другие программаторы? Например, или . Они хоть и сложней, но зато работают более корректно, без извратов.

Имеющиеся схемы программаторов можно разделить на две категории: подключаемые к 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-порту.

Первым шагом по освоению микроконтроллера для каждого наверняка является сборка программатора. Купить программатор тоже можно, но за совсем неразумные деньги, как по мне. Рассмотрим работоспособный программатор для AVR’ок, которым я пользуюсь вот уже 4-й год. В свое время показал отец, программа мне очень понравилась, и было решено делать под нее программатор. Порывшись на сайте программы, обнаружил простую схему программатора (COM порты я не рассматриваю по причине легкости их горения от статики):


Ее повторение не займет более часа, но гарантирует целостность вашего LPT порта и совместную работу с Pony Prog 2000 . Микросхема – буфер. Резистор R1 – 100k, конденсатор C1 – 0.1мкФ. Диод D1 – любой кремниевый. LPT разъем типа «папа». Теперь разберемся с ISP разъемом, который будет использоваться для программирования. Выводы MISO , MOSI , SCK , RESET – управляющие, вывод LED – к нему подключается светодиод, который сигнализирует чтение/запись прошивки в микроконтроллер, VDD и GND соответственно +5В и земля.

Для подсоединения микроконтроллера удобно использовать шлейф на 10 проводов и соответствующий IDC , но это дело вкуса и каждый сам решает, как ему нравиться, главное не делать его слишком длинным, во избежание наводок. У меня получилось вот так:



Для тех, у кого по тем или иным причинам нету LPT порта и лень бегать к соседу зашить прошивку могу посоветовать толковый USB программатор (сайт проекта prottoss.com). Достаточно просто повторить схему и правильно прошить управляющий контроллер (для этого, как ни крути понадобиться LPT или COM порт). Вот такой USB программатор собрал себе:


Перейдем к программной части. В начале говорилось, что программировать мы будет с помощью Pony Prog 2000 .

Первое включение и калибровка:
При первом использовании программатора не забываем корректно его настроить: Setup->Interface setup, в появившемся окне выбирай LPT порт, к которому подключен программатор, выбираем AVR ISP API в выпадающем списке, а флажки Polarity of control lines не трогаем, оставляем пустыми. Далее калибруем все это дело Setup->Calibration. Все, теперь мы можем с помощью нашей макетной платы программировать AVR"ки.

Выбор среды для написания программ:
Теперь осталось выбрать, в какой среде писать программы и на каком языке. Рекомендую писать на С, если не критичен размер и скорость выполнения программы.

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

Почти успех =) => =(

Спаял вроде все как на схеме)
Тоесть не вроде а так и есть)
Только вместо D1 поставил ИК диод незнаю скажется ли как то другово под рукой не было)

Первая проблема когда пытался прошить с настройкой AVR ISP API (LPT2 другово немог выбрать)
выбивало 16 ошибку, типа нет порта

После того как поменял настройки на AVR ISP I/O LPT1 выбило ошибку -24 типа я незнаком с вашим девайсом)
И пытается прошивать. . . пока без результатно(((

подскажите в чем проблема?
Слышал вроже нужно менять какие то настройке в биос?
так вот какие?7?

поздравьте с приобретением!

купил нечто миниатюрное, на usb, без корпуса и без всяких bells&whistles, в инструкции сказано что это аналог stk500, может определяться как avr910, но у меня определился как avr doper.
пока никуда не подключал - при попытке чтения фьюзов программа пишет programmer is not responding.
подозреваю, что так и должно быть.
теперь собственно вопрос. на самой плате есть разъемы на 6 и на 10 штырьков, но кабель - только на 10. для прошивки микроконтроллера мне надо только ножки к штырькам mosi, vcc, rst, miso и ground подключить? остальные могут пины микроконтроллера могут висеть свободными?

Для программирования МК

Для программирования МК требуется подключить к программатору MOSI, MISO, SCK, RESET и подать питание. Остальные можно не трогать. Смотри доку на программатор, какие из тех пинов нужно вывести.

тыкс

он отказывался у меня работать как avr910, как stk500, как stk500v1, зато прочитал фьюзы как stk2, и прошил флешку за пару секунд. попробую дособирать свой дивайс и запустить его))
микруха прошита!

первый раз, первый программатор, боюсь что-либо спалить)

Доброго времени суток всем!
Подскажите пожалуйста, а Выводы MISO, MOSI, SCK, RESET – управляющие, нужно напрямую подсоединять к МК или как здесь

Я имею ввиду через резисторы выводы MISO, MOSI, SCK, RESET подтягивать к питанию и земле надо?
Дело в том, что у меня мега16, там вывод RESET инверсный, сброс по нулю будет по идее, мне R3 на землю бросить?


Спасибо если кто откликнется!
p.s. Диплом с МК попался, а я не шарю:) Хочу разобраться, но тонкостей очень много...