Программатор Громова — пожалуй лучший COM программатор AVR контроллеров.
Всем привет. Сегодня у меня для вас новая статья, посвященная одному из самых простых и популярных программаторов AVRок — программаторе Громова — так его называют в сети.
Данную статью о программаторе, я планировал еще давно, но все было как-то не до нее . Но вот сейчас и приступим.
Запрограммировать контроллер AVR на сегодня возможно двумя способами:
1) С помощью высоковольтного параллельного программатора. Это скорее промышленный вариант, так как в этом случае корпус контроллера усаживается в специальную панельку и подав высокое напряжение (большее напряжения питания) зашивается заранее подготовленная программа. После чего контроллер запаивается в плату по месту назначения. Здесь есть ощутимый плюс — полный контроль над всем нутром контроллера. А процесс зашивки моментальный.
Но если выяснится, что зашитая программа имеет непростительный баг? И что же делать — контроллер ведь уже запаян? Снова выпаивать?
Для радиолюбительской практики такой вариант не подходит, хотя иметь в загашнике высоковольтный программатор будет полезно. В одной из следующих статей кстати будет очень полезная информация так что не пропустите.
2) Мы пойдем по другому пути — и к нашим услугам внутрисхемный программатор. При этом способе контроллер устанавливается сразу в схему без каких-либо промежуточных действий. В этом случае программа зашивается внутрисхемно. Что же это значит?
Все просто, при разработке какого-либо девайса мы заранее предусматриваем программирующий разъем. Программирующий разъем устанавливаем прямо на плату нашего устройства. В своей отладочной плате я именно так и поступил, там имеется разъем, причем разъем может быть любым, но под это дело есть некий стандарт. Обычно используется десятиштырьковый разъем PLS, похожий на те, что сидят на материнских платах компьютеров.
Так вот на этот разъем с контроллера выводится 5 сигналов: mosi, miso, sck, reset, GND. Через эти контакты и будет зашиваться программа. Причем делать это можно многократно — ведь выпаивать нам ничего не придется. Единственное что должно быть сделано так это то, что контроллер должен быть запитан и запущен. Впрочем питание можно подать и с программирующего разъема. Тогда у нас будет уже не пять сигналов а шесть, но это совсем не сложно. Только здесь есть небольшая особенность — нужно быть внимательным при простановке фьюзов (FUSE) перед зашивкой программы. Если при высоковольтном программировании неправильно зашитый фьюз бит легко правится, то при внутрисхемном программировании будет сложно что-либо исправить.
Небольшое отступление.
Фьюзы или фьюз биты — это биты конфигурации контроллера. Их нельзя выставить из тела программы. Фьюз биты обычно проставляются перед зашивкой программы — с помощью программатора и программы-прошивальщика.
С помощью фьюз битов можно изменить способ тактирования контроллера. Так вот, если в своей схеме контроллер тактируется от своего внутреннего генератора, а вы в фьюзах выставили способ тактирования от кварца, то схема работать не будет. Контроллер не запустится, а значит что -либо изменить не удастся. Но это дело поправимое. Нужно лишь подпаять нужный кварц и пару конденсаторов тогда все заработает и программу можно дальше править и перешивать.
Но есть фьюз бит, выставив который мы теряем возможность внутрисхемного программирования — нужен параллельный программатор. Так что будьте внимательны и прежде чем зашить фьюз биты хорошенько читайте даташит.
Разновидностей внутрисхемных программаторов на сегодня очень и очень много и выбрать приемлемый вариант бывает не просто. Все программаторы делятся по способу подключения к компьютеру, мне известны три : через LPT, COM, USB.
Программатор работающий через порт lpt я заранее не советую, так как его очень просто пожечь, и сколько схемных решений мне не советовали, я этот вариант отбросил сразу же. Кстати да, и самого порта lpt в моей рабочей машинке не было. Вот так-то.
В наше время когда порты com и lpt уходят в небытие, единственно рабочий вариант остается USB. Но тут есть ряд проблем. Как правило схемы программаторов, работающих от USB имеют в своем составе микроконтроллер, который естественно нужно прошить, а для прошивки нужен программатор. Вот такой вот замкнутый круг. Хотя в последнее время на просторах интернета появилась схема usb программатора, которая не требует прошивки. Схема простая, но я с ней плотно не разбирался поэтому говорить о ней я не буду — если очень интересно найдете сами.
Мы пойдем по более сложному пути — займемся изготовление программатора Громова. Этот программатор работает через com порт, который в отличие от lpt, редко но все еще встречается в современных компьютерах. И кстати если на задней стенке своего компьютера вы его не обнаружили, это еще не значит что его нет, так на многих материнских платах он может присутствовать в виде pls штырьков, нужно почитать документацию к материнской плате.
Схема.
Схема самого программатора на удивление простая и мне очень жаль, что я не встречал ее раньше.
Ее можно собрать даже навесным монтажом на коленке, но на плате все-таки будет смотреться солиднее. Для этого программатора нам потребуется семь резисторов по килоому каждый и три маломощных диода. Как известно напряжение с com-порта в пределах 12 В, а контроллер работает с 5-ти вольтовым напряжением. Так вот схема из диодов и резисторов послужит нам для согласования уровней. Резисторный делитель из 12 вольт дает нам 6 вольт, а остаток из одного вольта высаживается на диоде — получаем 5 вольт и это то что нам и нужно.
Схему я нарисовал в программе Eagle CAD, затем путем нескольких незамысловатых движений мышкой родилась вот такая платка.
Файлы проекта можете скачать по [urlspan]этой ссылке[/urlspan].
Рисунок ее был распечатан на лазерном принтере и подвержен зверской технологии ЛУТ. После всех манипуляций мне оставалось только напаять деталей и выставить сие творение на ваш суд. 🙂
Входы и выходы.
На плате слева расположены монтажные отверстия для подключения разъема DB-9F (мама) известного как разъема COM-порта. с нашей платой он будет соединен посредством проводов. На схеме для этого обозначены отверстия: DB9/2, DB9/3, DB9/4, DB9/5, DB9/7, DB9/8. На схеме контакты подписаны — не промахнетесь 🙂 Хочу добавить, что провод желательно брать не длиннее 25 см. При более длинном проводе возможны помехи, а в результате ошибки при зашивке программы.
В моем варианте питание будет подаваться от компьютера, поэтому для удобства я вывел контакты
питания PinGND и Pin+5. Затем они будут соединены с питающим разъемом, в принципе под это дело можно применить и отдельный блок питания с напряжением +5 В — проблемы не будет.
Для себя я припас вот такой разъемчик от старого компьютера. Подпаиваем +5 В к крайнему красному проводу, а земля подпаивается к черному. остальное можно выкусить чтобы не мешалось.
С правой стороны расположены контакты для подпайки десятиконтактного программирущего IDC разъема. У меня он выглядит так. Здесь он идет в связке с разъемом DB-9M (папа).
К плате программатора вся эта конструкция подключается через разъем DB-9F.
Теперь можно откинуться на спинку стула и отдохнуть, ведь можно сказать с задачей мы справились — собрали программатор Громова. Но долго расслабляться нельзя, ведь впереди нас ждут испытания нашего творения. Поэтому чтобы не устроить сюрприз своему компьютеру советую все хорошенько прозвонить мультиметром и проверить монтаж и только после этого переходить к испытанию нашего девайса.
Итак программатор у нас собран и лежит на столе в ожидании. Для того, чтобы воплотить в жизнь все то что мы задумали нам нужен управляющий софт — Программа Uniprof.
Программа Uniprof —это тот самый софт, с помощью которого наш программатор будет общаться с компьютером. Эту программу написал автор по фамилии Николаев за что целая армия радиолюбителей говорит ему — СПАСИБО. Кстати саму программу можно скачать с сайта автора или у меня.
Выключаем наш компьютер и подключаем программатор разъемом DB-9F к COM-порту компьютера. Разъем питания я подключил к блоку питания родного компьютера. На этом этапе желательно подключить плату нашего программируемого пациента — плату с контроллером. Я подключил опытную плату с контроллером Attiny 45. Ну что, теперь минута молчания иии . . . жмем кнопку POWER системного блока компьютера. Ждем когда загрузится наше операционная система.
Запускаем Uniprof. При запуске он у немного ругнулся, выдав окошко со знакомым ERROR, говорит что у меня что-то неладное с LPT. . . хех, глуповато конечно но простим его на сей раз, ткнув по крестику.
На следующим этапе окошко программы все-таки открылось, но появилось сообщение о том, что контроллер не откликнулся. Но мы не паникуем.
Ведь программа совсем не в курсе к какому именно порту подрублен наш контроллер. Тут на выбор кроме ранее упомянутого LPT порта, есть еще набор с COM1 по COM5.Так что простым перебором добиваемся полного опознания нашего контроллера.
Контроллер определился, теперь нам нужно выполнить чтение — нажимаем на READ.
Если контроллер чистый, то в окне программы должны получиться прочерки, но в моем случае получилось иначе — прочерки чередовались с различными шестнадцатиричными числами. Возможно проблема была в длинном проводе, соединяющего программатор с компьютером или с высокой производительностью компьютера. Но в любом случае это вылечилось установкой галочки «ТОРМОЗ» . Время выполнения чтения оказалось несколько более длительным, но зато результат стал лучше.
Вот подходит время таки записать программный HEX файл в наш контроллер, но нужно также не забыть установить правильные фьюз биты. Доступ к ним открывается нажатием кнопки с надписью FUSE.
Выставляем все правильно, предварительно проштудировав даташит на нужный контроллер. Важный совет, выполните чтение фьюзов и убедитесь что фьюз бит SPIEN не установлен, так как установка этого фьюза не позволит вам в дальнейшем применять для этого контроллера наш программатор Громова.
Далее кликаем по кнопке с открытой желтой папкой под названием HEX и выбираем наш HEX. 🙂 Текст программы должен отразиться в окошке Uniprof. Ну что же, теперь остается только нажать на кнопку с красной стрелочкой с названием Prog и дело в шляпе.
Как видите запрограммировать контроллер с помощью данной программы совсем не сложно. Чтобы более полно ознакомиться с ней рекомендую почитать справку, там вы найдет ответы на возникшие вопросы.
Вот кстати почитайте об охранной GSM сигнализации, которую я спаял и запрограммировал. Чтобы ее сделать мне как раз и пригодился программатор.
Дорогие друзья, совершенно недавно появился очень удобный способ подписки, через сервис Email рассылок. Так что вы можете оставить свой email и получать новые статьи и материалы себе на почту. Кроме того каждый подписавшийся получает подарок, который пригодится каждому радиолюбителю, так люди подписываются и получают приятные бонусы, добро пожаловать.
Ну что же, думаю статья окажется для вас полезной и поможет сделать еще один шаг на пути освоения микроконтроллеров. На этом у меня все, желаю вам успехов и главное хорошего настроения!
С уважением, Владимир Васильев.
В качестве дополнения предлагаю посмотреть видеоролик на тему программирования контроллеров AVR. Чтобы не пропустить следующие статьи советую подписаться по [urlspan]RSS[/urlspan] или по [urlspan]электронной почте.[/urlspan]
Лучший способ сказать СПАСИБО автору это отправить донат!
здравствуйте. вроде бы всё нормально. СОМ1 увидел.
После чтения,(с тормозом) заместо прочерков,нули.
прошивку и фьюзы ставлю, и вот такая выходит ошибка когда нажимаю записать :
(Ош записи,@=0000,надо 3В,есть 00.повтор?)