Site Loader

Программатор Громова | Практическая электроника

Первый вопрос, который вы хотите задать в лоб – что же вообще такое “программатор”? Слово “программатор” образуется как ни странно, от слова “программа”. А что такое программа? Если вспомнить, что такое телепрограмма и зачем она  была нужна (кстати, сейчас до сих пор продается в киосках), то стает понятно, что программа телепередач – это расписание по времени этих самых телепередач. Значит программой можно назвать какие-то действия или события, которые будут выполняться одно за другим во времени, когда мы этого захотим или не захотим.  Следовательно, программатор – это всего-навсего какое-то устройство, которые позволяет нам записывать либо читать программу. Изменить программу уже может только сам программист 😉

СМ 

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

программатора. Как уже было написано в предыдущих статьях, микроконтроллер, до тех пор, пока мы не “залили” в него прошивку, является просто бесполезным куском кремния. И тогда начинающий радиолюбитель ищет информацию в интернете о сборке простого, но эффективного программатора, который помог бы ему взять быстрый старт в этом нелегком деле.

Программатор Громова

Я не ошибусь, если скажу, что 80% новичков, если у них на компьютере есть в наличии СОМ порт, собирают в качестве первого программатора Программатор Громова. Эта схема, при своей простоте и умелом обращении, настоящий шедевр). Действительно, ведь для того, чтобы собрать своими руками программатор, подключаемый к USB порту и имеющий в своем составе микроконтроллер AVR, который требуется предварительно запрограммировать, нужен опять таки программатор. А где взять новичку программатор, пусть и для подобной разовой прошивки ? Получается парадокс курицы и яйца), чтобы собрать USB программатор, нам необходимо сначала запрограммировать микроконтроллер программатора))).

Итак, давайте разберем, что же такое вообще прошивание микроконтроллера (МК) с помощью программатора, и как оно осуществляется? Для того, чтобы прошить МК, нам потребуется связка из самого программатора, устройства, спаянного на печатной плате, и программа, называемая оболочкой, работающая с этим устройством.

Программатор Громова

Под каждый тип программатора чаще всего требуется своя программная оболочка. Для сборки программатора Громова не требуется программировать микроконтроллер. В данном программаторе он отсутствует. Этот программатор работает с двумя широко распространенными оболочками для прошивания:

PonyProg и Uniprof.  У нас будут посвящены отдельные обзоры на эти программки. Данный программатор подключается к СОМ порту.  Единственным препятствием для его сборки может стать физическое отсутствие данного разъема на материнской плате вашего системного блока. Почему именно системного блока? Потому что ноутбуки, а также современные модели материнских плат 2010 – 2011 года выпуска и выше часто имеют на контактах СОМ порта пониженное напряжение питания. Что это означает? Это означает, что вы можете собрать данный программатор, а он у вас не заработает. Но с компьютерами  2007 – 2008 года выпуска и старше, за исключением ноутбуков, данный программатор должен гарантированно работать.  Подключение через переходники USB – COM не спасают в этом случае, так как при этом наблюдается в лучшем случае, сильное снижение скорости, в худшем, программатор вообще отказывается работать.

Давайте рассмотрим принципиальную схему программатора:

Программатор Громова

Что же мы видим на этой схеме ? Разъем СОМ порта, по другому называемый DB9, 7 резисторов одинакового номинала сопротивлением в 1 кОм и мощностью 0.25 Ватт и 3 импульсных диода. Из диодов подойдут, либо отечественные, КД522, КД510, либо импортные 1N4148.

Давайте разберем, как выглядят данные радиодетали.

На фото ниже представлен разъем DB9:

Программатор Громова

Как мы видим, пины (выводы) этого разъема обозначены цифрами на нем. Если будут какие-то затруднения с определением какой штырек соответствует какому отверстию разъема, рекомендую вставить проволочку в отверстие пина разъема, перевести мультиметр в режим звуковой прозвонки и прикоснувшись одновременно щупами мультиметра к проволочке по очереди к каждому из штырьков на разъеме, вызвонить соответствие штырьков отверстиям. Это может потребоваться в случае, если вы подключаете разъем проводками к плате. Если разъем будет впаян непосредственно в плату, то эти действия не требуются.

У кого на панели разъемов материнской платы, находящейся в задней части компьютера, нет COM разъема, можно купить планки с таким разъемом. Но нужно убедиться что производители распаяли контроллер СОМ порта на материнской плате, и предусмотрели подключение шлейфа данной планки, непосредственно к плате. Иначе такой вариант вам не поможет. В качестве альтернативного варианта, могу предложить приобрести контроллер СОМ порта, размещенный на специальной плате расширения, которую устанавливают в PCI слот ПК

Программатор Громова

Также при желании, если вы захотите, чтобы кабель, подключаемый к СОМ порту, у вас отключался от программатора, можно открутив винты крепления, снять разъем с планки, и закрепить его в корпусе программатора. Но будьте внимательны, и после покупки прозвоните все жилы, на соответствие номерам, с обоих концов кабеля, потому что часто в продаже встречаются похожие внешне кабеля, имеющие перекрещенные жилы. Кабель для подключения к данному разъему, должен быть обязательно полной распайки, DB9F – DB9F, прямой, не перекрещенный, с другими кабелями разъем работать не будет.

Программатор Громова

Если же возникают проблемы с приобретением данного кабеля, можно взять и перекрещенный кабель или удлинитель 9M-9F, но в таком случае может потребоваться обрезать разъем с другого конца, и вызвонив жилки по пинам разъема подпаяться непосредственно к плате программатора. У меня, кстати, был как раз такой кабель – удлинитель, и мне пришлось обрезать разъем со второго конца. Не покупайте кабеля для прошивки телефонов через СОМ порт, они не годятся для наших целей, так как там неполная распайка жил.

Идем дальше.

Диоды берем КД522, КД510 или 1N4148. Вот так выглядит диод КД522

Программатор Громова

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

Ну с резисторами, я думаю, проблем не возникнет. Идете в радиомагазин и говорите продавцу: “Мне нужны резисторы 1 кОм 0.25 Ватт”.  Желательно взять импортные резисторы,  так как у отечественных МЛТ идет большее отклонение от номинала.

Если вы владеете методом ЛУТ, то для вас не составит труда собрать программатор, по этой печатной плате. Ниже приведен скрин платы из программы Sprint Layout:

Программатор Громова

Если же вы до сих пор не освоили метод ЛУТ, тогда вам больше подойдет следующая плата, рисунок которой можно легко нарисовать маркером для печатных плат прямо на текстолите. Оба варианта печатных плат, вы сможете скачать в общем архиве, в конце статьи. Не забудьте зачистить и обезжирить плату перед нанесением рисунка. Выводы деталей на ней расположены не близко, и проблем при пайке не возникнет даже у новичков

Программатор Громова

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

У меня был собран пять лет назад данный программатор на плате, сделанной от маркера.  Так выглядела его печатная плата после лужения на этапе сборки в корпусе:

Программатор Громова

Извините за синюю изоленту)), тогда еще, 5 лет назад,  термоусадочные трубки были в диковинку.

Разъем кабеля программатора с другого конца был обрезан, и проводки кабеля были впаяны непосредственно в плату. Сам кабель был закреплен металлическим хомутом. На фото видно, что кабель толстый, и если бы был не закреплен, при изгибании мог нарушиться контакт проводков, на плате программатора

Программатор Громова

Для подключения к микроконтроллеру устанавливаемому для прошивания на беспаечную макетную плату, я использовал цветные гибкие проводки. Соединенные с проводками такого же цвета, взятыми из жилок витой пары. Это сделано для того, чтобы с одной стороны жилки не переломились при эксплуатации, а с другой было обеспечено легкое подключение к макетной плате. Длина данных проводков должна быть максимум 20 – 25 См, во избежание ошибок от наводок, при программировании.

Не используйте обычные неэкранированные провода, вместо СОМ кабеля! Замучаетесь с ошибками при прошивке.

Программируемый микроконтроллер нуждается во внешнем питании +5 Вольт, подаваемом на программатор. Для этой цели можно собрать стабилизатор на микросхеме 7805, с питанием от внешнего блока питания, либо поступить проще и воспользоваться кабелем и зарядным устройством с выходом USB, подпаяв жилки кабеля USB прямо к печатной плате.

Для справки: питание и земля, в разъеме USB идут по краям. Вот распиновка разъема USB:

Программатор ГромоваПрограмматор Громова

Теоретически можно, если вы достаточно аккуратный человек, запитаться и от USB порта компьютера, подключив к нему данный кабель, но помните, вы делаете это на свой страх и риск ! Лучше найти один раз деньги и приобрести USВ зарядное устройство. Не используйте отличающиеся от USB,  нестабилизированные зарядные устройства от сотовых телефонов и другой техники, вы рискуете испортить микроконтроллер.

При запитывании от USB порта компьютера, в случае замыкания жилок программатора +5 вольт (VCC) и земли (GND), вы рискуете сжечь южный мост материнской платы компьютера, ремонт такой материнской платы будет нецелесообразен. Я пользовался обоими вариантами для подачи питания, и через стабилизатор, и через кабель от зарядного USB. Еще один нюанс, после программирования микроконтроллера, чтобы микроконтроллер запустился, необходимо разорвать цепь RESET.

Это можно сделать просто выткнув проводок соединенный с пином RESET программатора. И тогда программа, зашитая в микроконтроллер начнет выполняться. Я решил сделать более удобное решение и поставил малогабаритный клавишный выключатель на разрыв цепи RESET.

Программатор Громова

Другими словами при его отключении, ток в этой цепи больше не течет и микроконтроллер начинает работу. Заместо клавишного выключателя можно воспользоваться любой малогабаритной кнопкой с фиксацией, либо поставить тумблер. Кому что подскажет фантазия 😉

Наверняка вы уже обратили внимание, что на схеме программатора Громова, есть какие-то незнакомые слова, а в частности VCC, GND, MISO, MOSI, SCK и  RESET. Разберем,  что же значат эти обозначения на примере микроконтроллера Attiny 2313.

Программатор Громова

В данном случае изображена очень распространенная и недорогая микросхема:  микроконтроллер AVR Tiny (он же Аttiny) 2313. Ножки микросхемы, как мы видим, имеют свой номер. Нумерация идет против часовой стрелки, от ключа в виде точки, расположенной в левом верхнем углу корпуса микроконтроллера. Ниже на рисунке пример того, как идет нумерация на микросхемах в корпусе DIP:

Программатор Громова

Программатор Громова

В первую очередь нас интересуют перечисленные выше шесть ножек. Назначения всех остальных мы вкратце коснемся в конце статьи.

Итак, расшифровываем:

VCC. На эту ногу мы подаем напряжение питания микросхемы. Стандартом является 5 Вольт. Допустимо отклонение в большую сторону, до 5.5 Вольт. Напряжение свыше 6 Вольт, может привести к порче микросхемы. Отклонение в меньшую сторону более допустимо. Есть версии микроконтроллеров Tiny 2313V, которые могут работать даже от двух пальчиковых батареек или аккумуляторов, или от напряжения в 2.4 Вольта.

GND. Ну это всем знакомая и известная “земля”, она же  ”масса”, и она же минус питания. Данный контакт является общим для всех устройств, которые имеют подключение друг к другу. Если вы соединяете, какие-либо блоки устройства между собой, их земли следует объединить. В данном случае, земля микроконтроллера, объединяется с землей программатора.

MISO. Сокращение от Master – In – Slave – Out. По этой линии передаются данные от микроконтроллера к программатору.

MOSI. Сокращение от Master – Out – Slave – In.  По этой линии тоже передаются данные от программатора к микроконтроллеру.

SCK. На этой линии формируется тактовый сигнал.

RESET. Данный вывод используется для сброса микроконтроллера после стирания одиночным импульсом.  Если RESET будет отключен, путем ошибочного выставления определенного фьюза, (о выставлении этого, и других фьюзов мы поговорим в следующих статьях) мы не сможем стереть и перепрошить микроконтроллер, через интерфейс SPI.

Достаточно подсоединить эти перечисленные 6 пинов программатора, к 6 ножкам микроконтроллера, и мы сможем прошить МК.

Рассмотрим остальные ножки МК:

У микроконтроллера Tiny2313 3 порта: А (А0-А2, 3 ножки), B (В0-В7, 8 ножек) D (D0-D6, 7 ножек), всего насчитывается 18 используемых в качестве ножек портов ввода – вывода. Каждую из этих ножек можно сконфигурировать отдельно на ввод и на вывод. Не являются ножками портов, только земля (GND) и питание (VCC).

Ниже рассмотрено дополнительное назначение некоторых ножек  МК:

OC1A И OC1B.  Ножки для формирования ШИМ (Широтно – импульсная модуляция) сигнала, таймер 1.

OC0A и OC0B.  Ножки для формирования ШИМ сигнала, таймер 0.

AIN0  и AIN1. Ножки для подачи аналогового сигнала на микроконтроллер.

XTAL1 и XTAL2. Ножки для подключения кварцевого резонатора, для тактирования от него.

RXD и TXD. Линии подключения МК по интерфейсу UART.

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

Читаем далее: Как шить с помощью программатора Громова

Программатор Громова cделай сам (DIY)

При желании работать с контроллерами, нам, как ни крути, придется обзавестись программатором. В данной статье рассмотрен простейший ISP программатор для микроконтроллеров AVR, работающий с удобной программкой для прошивки контроллеров UniProf.

Представляем вашему вниманию вариант нашей разводки программатора под смд компоненты.

 

На сайте разработчика можно увидеть принципиальную схему программатора.


 

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

три диода 1N4148

семь резисторов 1 кОм (1206)

один резистор на 1 кОм (1206)

три резистора 0 кОм (1206)

• разъем BD-9 (мама)

• светодиод 3мм

• гребенка 2.54 

• один ISP разъем (10 пин)


 

Распайку платы настоятельно рекомендую начинать с смд комплектующих.

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

 

Далее монтируем оставшиеся детали. 

При отмывке флюса стерлись черные плоски на диодах. Смотрим на принципиальную схему и монтируем в верном направлении.


 

Подключение программатора к микроконтроллеру

На программаторе установлен 10 пиновый разъем ISP

Назначение контактов ISP разъема:

1 — MOSI (выход данных для последовательного программирования)
2 — VCC +5V (Выход +5В, для питания программируемой платы от шины USB током до *200мА !!!)
3 — NC (Не подключен)
4 — GROUND (Общий или минус питания)
5 – RESET (Подключается к выводу RESET микроконтроллера)
6 — GROUND (Общий или минус питания)
7 — SCK (Выход тактирования данных)
8 — GROUND (Общий или минус питания) 
9 — MISO (Вход данных для последовательного программирования)
10 — GROUND (Общий или минус питания)


 

Как уже было сказано ранее, программатор Громова поддерживает микроконтроллеры AVR с режимом последовательного программирования ISP ( In System Programming ), это контроллеры у которых есть порт SPI ( Serial Peripheral Interface )

Открываем даташит на интересующий нас контроллер, для примера возьму любимый камушек ATmega8. Ищем раздел Pin configurations, в нем смотрим какими ногами представлен порт SPI

Как мы видим, этими ногами являются выводы контроллера под номерами 1, 7, 8, 17, 18, 19, 20, 22, их и нужно подключить к соответствующим выводам программатора.

В случае если в контроллер уже была залита программа и в ней были выставлены фьюз биты на работу от внешнего кварца, то к ножкам XTAIL1 и XTAIL2 следует следует припаять кварц нужного номинала, и пустить через неполярные конденсаторы емкостью 18-22 пикофарада на землю.

Если программатор не выдает линию питания +5V, а на наш программатор её не выдает т.к. COM-порт её не имеет, то питать контроллер надо от внешнего источника. На плате программатора выведены 2 штырька для подачи питания через них. Для таких целей проще раз и навсегда обжать себе вот такой кабелёк:

 

На черных коннекторах остаются маленькие участки с открытым металлом, во избежание КЗ настоятельно рекомендую изолировать каждый коннектор термоусадочной трубкой.


 

Следует отметить что программатор поддерживает еще и консольную программку AVRdude.

Пример загрузки прошивки в контроллер можно посмотреть на примере заливки Arduino Bootloader’а здесь.

Хорошие статьи на данную тематику можно найти на сайтах http://easyelectronics.ru и http://www.getchip.net. 

Полный разбор программы UniProf можно так же найти на сайте http://www.getchip.net


 

В архиве лежит шаблон под ЛУТ и список деталей в формате Word

Открываем изображение => Печать => Во всю страницу


 

Для облегчения распайки smd компонентов с обратной стороны платы, где нет маркировки, приведу картинку. 

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Программатор Громова. Прошивка контроллера.

Всем привет. Сегодня у меня для вас новая статья, посвященная одному из самых простых и популярных программаторов AVRок — программаторе Громова — так его называют в сети.

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

Запрограммировать контроллер AVR на сегодня возможно двумя способами:

1) С помощью высоковольтного параллельного программатора. Это скорее промышленный вариант, так как в этом случае корпус контроллера усаживается в специальную панельку и подав высокое напряжение (большее напряжения питания) зашивается заранее подготовленная программа. После чего контроллер запаивается в плату по месту назначения. Здесь есть ощутимый плюс —  полный контроль над всем нутром контроллера. А процесс зашивки моментальный.

Но если выяснится, что зашитая программа имеет непростительный баг? И что же делать — контроллер ведь уже запаян? Снова выпаивать?

Для радиолюбительской практики такой вариант не подходит, хотя иметь в загашнике высоковольтный программатор будет полезно. В одной  из следующих статей кстати будет очень полезная информация так что [urlspan]не пропустите[/urlspan].

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 —это тот самый софт, с помощью которого наш программатор будет общаться с компьютером. Эту программу написал  автор по фамилии Николаев за что целая армия радиолюбителей говорит ему — СПАСИБО. Кстати саму программу можно скачать с [urlspan]сайта автора[/urlspan] или [urlspan]у меня[/urlspan].

Выключаем наш компьютер и подключаем программатор разъемом 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]

Делаем COM программатор для AVR микроконтроллеров. — GetChip.net

Еще одним несложным, в плане изготовления, является COM программатор. При условии использования альтернативного режима COM порта Bitbang, отпадает необходимость в преобразовании интерфейса RS232 COM порта в SPI, необходимый для программирования. Остается только привести уровни сигналов COM порта (-12В, +12В) к необходимым (0, +5В). Это и делает
схема COM программатора для AVR микроконтроллеров:

Данная схема программатора достаточно распространена и известна как программатор Громова. Название пошло от автора программы Algorithm Builder Геннадия Громова, который и предложил такую схему.

Чтобы собрать программатор Громова нам нужно следующее:

Диоды КД522, КД510, 1N4148 или им подобные. Резисторы можно использовать любые, какие найдете. В качестве шлейфа можно использовать IDE шлейф. При подключении шлейфа, для более устойчивой работы программатора, каждый «сигнальный» провод должен чередоваться с «земляным» проводом. Это позволит уменьшить уровень помех наводимых в линиях и за счет этого увеличить длину программирующего провода. Длина шлейфа должна быть в пределах 50 см. Еще нужен разъем для подключения к программируемому устройству.
Для внутрисхемного программирования Atmel рекомендует стандартные разъемы:


Если Вы планируете серьезно заняться микроконтроллерами, сделайте разъемы стандартными. Для разового программирования устройства я рекомендую использовать разъемы BLS «мамы» на программаторе (такими разъемами к материнской плате подключаются кнопки и светодиоды корпуса компа — именно их я и взял) и штырьки PLS «папы» на плате. Это позволяет максимально упростить разводку платы устройства, так как штырьки для программатора устанавливаются в непосредственной близости возле ножек микроконтроллера. Ножки MOSI, MISO, SCK у микроконтроллеров AVR всегда расположены вместе, поэтому для них можно применить строенный разъем. Отдельно делаем подключение для «земли»-GND и «сброса»-Reset.

Собрать COM программатор не составит труда:

Я сознательно не даю печатной платы под этот программатор, так как схема проста и возня с разводкой и травлением платы просто себя не оправдывает.

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

Общие рекомендации:

— Так как режим Bitbang нестандартный для COM порта компьютера, то возможны сбои в работе (хотя у меня такого не было). Особенно это касается ноутбуков. Как вариант решения этой проблемы можно рекомендовать «поиграться» настройками COM порта (скорость, биты данных, варианты управления потоком, величины буфера …).
— Отдельный разъем для «земли» желательно подключить первым, чтобы уравнять потенциалы «земли» программируемого устройства и компьютера. Для тех, кто не знает, если у Вас компьютер включен в обычную розетку, без заземляющего контакта, то в виду особенности фильтра блока питания компьютера, на корпусе компьютера всегда присутствует потенциал в 110В.

Заключение:

— COM программатор Громова простой и надежный. Я не перестал пользоваться им даже собрав USB программатор (если какой либо микроконтроллер перестает программироваться USB программатором я обязательно перепроверю его на программаторе Громова).
— Так как программатор Громова собран на пассивных элементах он не требует для себя питания. Мало того, из-за паразитного питания, микроконтроллер можно запрограммировать вообще не подключая к нему источника питания! Хотя так программировать я не рекомендую, но сам факт интересен.
— Для пользователей Algorithm Builder есть приятный бонус! Этот программатор можно использовать для внутрисхемной отладки кристалла (программный JTAG).

Ссылки:
Сайт Геннадия Громова, автора Algorithm Builder

(Visited 97 988 times, 39 visits today)

Радиосхемы. — Программатор Громова

материалы в категории

Программатор Громова

Несложный в плане изготовления  COM программатор. При условии использования альтернативного режима COM порта Bitbang, отпадает необходимость в преобразовании интерфейса RS232 COM порта в SPI, необходимый для программирования. Остается только привести уровни сигналов COM порта (-12В, +12В) к необходимым (0, +5В).

схема COM программатора для AVR микроконтроллеров


Данная схема программатора достаточно распространена и известна как программатор Громова. Название пошло от автора программы Algorithm Builder Геннадия Громова, который и предложил такую схему.

Схема несложная, для ее сборки потребуется всего-лишь несколько деталей:

Диоды КД522, КД510, 1N4148 или им подобные. Резисторы можно использовать любые, какие найдете. В качестве шлейфа можно использовать IDE шлейф. При подключении шлейфа, для более устойчивой работы программатора, каждый «сигнальный» провод должен чередоваться с «земляным» проводом. Это позволит уменьшить уровень помех наводимых в линиях и за счет этого увеличить длину программирующего провода. Длина шлейфа должна быть в пределах 50 см. Еще нужен разъем для подключения к программируемому устройству.

 
Для внутрисхемного программирования Atmel рекомендует стандартные разъемы:

Если Вы планируете серьезно заняться микроконтроллерами, сделайте разъемы стандартными. Для разового программирования устройства можно использовать разъемы BLS «мамы» на программаторе (такими разъемами к материнской плате подключаются кнопки и светодиоды корпуса компа) и штырьки PLS «папы» на плате.
Это позволяет максимально упростить разводку платы устройства, так как штырьки для программатора устанавливаются в непосредственной близости возле ножек микроконтроллера. Ножки MOSI, MISO, SCK у микроконтроллеров AVR всегда расположены вместе, поэтому для них можно применить строенный разъем. Отдельно делаем подключение для «земли»-GND и «сброса»-Reset.

Сборка программатора Громов в деталях


Я сознательно не даю печатной платы под этот программатор, так как схема проста и возня с разводкой и травлением платы просто себя не оправдывает.

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

Общие рекомендации:

— Так как режим Bitbang нестандартный для COM порта компьютера, то возможны сбои в работе (хотя у меня такого не было). Особенно это касается ноутбуков. Как вариант решения этой проблемы можно рекомендовать «поиграться» настройками COM порта (скорость, биты данных, варианты управления потоком, величины буфера …).
– Отдельный разъем для «земли» желательно подключить первым, чтобы уравнять потенциалы «земли» программируемого устройства и компьютера. Для тех, кто не знает, если у Вас компьютер включен в обычную розетку, без заземляющего контакта, то в виду особенности фильтра блока питания компьютера, на корпусе компьютера всегда присутствует потенциал в 110В.

Заключение:

COM программатор Громова простой и надежный. Я не перестал пользоваться им даже собрав USB программатор (если какой либо микроконтроллер перестает программироваться USB программатором я обязательно перепроверю его на программаторе Громова).
– Так как программатор Громова собран на пассивных элементах он не требует для себя питания. Мало того, из-за паразитного питания, микроконтроллер можно запрограммировать вообще не подключая к нему источника питания! Хотя так программировать я не рекомендую, но сам факт интересен.
– Для пользователей Algorithm Builder есть приятный бонус! Этот программатор можно использовать для внутрисхемной отладки кристалла (программный JTAG).

Источник: http://easymcu.ru

Программа Uniprof для программатора Громова

Программа Uniprof нужна для того, чтобы мы могли воспользоваться программатором Громова.

В предыдущей статье мы с вами рассмотрели, что такое программатор и как собрать программатор Громова, подключаемый к СОМ порту, а также как подключить программатор к прошиваемому микроконтроллеру. Так как программатор подключается к компьютеру, то мы должны после подключения программатора к ПК запустить на компьютере специальный софт, называемый программой – оболочкой, для того чтобы мы могли прошить микроконтроллер. С программатором Громова работают две широко распространенные оболочки: Uniprof и  Ponyprog, кто – то выбирает первую, кто-то вторую, я же предпочитаю работать с Uniprof. В этой статье мы как раз и рассмотрим, как работать в программе Uniprof. Оболочке Ponyprog, будет посвящен один из наших дальнейших обзоров.

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

После того, как мы распакуем архив с программой и откроем папку, мы увидим такой список файлов:

Программа Uniprof для программатора Громова

Рассмотрим, какие из них будут нам интересны. Это в первую очередь файл, в виде микросхемы с малиновой стрелкой. Именно он запускает программу оболочку.

Перед тем как начать разбирать интерфейс программы, хочу сказать, что создатели программы позаботились о том, чтобы облегчить нам работу с оболочкой настолько, насколько это вообще возможно. Они выпустили файл справки. Этот файл находится в общей папке и выглядит в виде страницы с желтым знаком вопроса. Те, кто много работают за компьютером, знают, что так выглядят Help файлы Windows. Что же мы увидим когда откроем его ? А увидим мы следующее:

Программа Uniprof для программатора Громова

Итак, перейдем к разбору интерфейса нашей оболочки. Такое окно мы видим после запуска программы:

Программа Uniprof для программатора Громова

На экране появилось сообщение: “МК не откликнулся. Проверьте порт и подключение.“ Так и должно быть. В данный момент программатор и МК у нас не подключены. Сразу хочу сказать, что программа работает не только с программаторами, работающими через СОМ порт, но и через LPT. Так вот, собирать программатор 6 проводков для прошивания через LPT порт я вам категорически не рекомендую. Если уж очень приспичит собрать программатор 6 проводков для разовой прошивки, используйте панельку под микросхему и подпаяйтесь непосредственно к её выводам. Дело в том, что СОМ порт намного более устойчив к замыканиям и перегрузкам, нежели LPT порт. С LPT-портом достаточно одного замыкания и вы можете безвозвратно его выжечь.

Вернемся к нашей оболочке, в правом нижнем углу мы видим, что программа работает аж с пятью СОМ портами и одним LPT портом. Путем выставления нужной галочки, мы должны выбрать наш СОМ порт

Программа Uniprof для программатора Громова

Что делать если вы не знаете к какому по счету СОМ порту у вас подключен программатор ? В таком случае открываете программу, изменяете СОМ порт на следующий по списку и выходите из нее. Обычно используются СОМ порты под номерами 1 и 2.

Разбираем дальше. В верхней части окна программы, мы видим надпись синим цветом “unknown”

Программа Uniprof для программатора Громова

После того как МК определится в программе, здесь будет показана модель нашего микроконтроллера и объем его памяти, например, Tiny 2313, 2k  bytes.

Если нам помимо FLASH памяти требуется прошить еще и EEPROM, ставим на ней галочку так, как это сделано на рисунке ниже:

Программа Uniprof для программатора Громова

После нажатия на иконку READ, мы загрузим прошивку из памяти МК  в буфер обмена программы. После этого у нас появятся какие – то значения в ячейках таблиц:

Программа Uniprof для программатора Громова

Это означает, что в буфер программы загружена прошивка. То же самое мы видим при записи прошивки в буфер обмена программы с жесткого диска. Другими словами буфер обмена – это то место, куда мы помещаем прошивку перед прошиванием или сохранением.

Бывают случаи, когда подключенный к программатору МК по каким-то причинам не определялся программой самостоятельно. В таком случае кликните в появившемся меню по нужной вам модели МК и проблема решена. Также в рабочем окне программы мы можем путем выставления галочки выбрать формат файла прошивки: привычный нам HEX, или двоичный BIN

Программа Uniprof для программатора Громова

Сразу скажу, если вы скачали прошивку в формате BIN, а вам требуется HEX (или наоборот), вы без труда сможете перегнать прошивку из одного формата в другой, с помощью специальных программ конвертеров, которые можно скачать на просторах интернета.

Остановлюсь на одном важном нюансе, без которого нормально работать с программой вообще невозможно. Частота процессоров современных ПК очень высока. Для работы программатора требуется значительно меньшая скорость. Что делать в таком случае, если у вас мощный современный компьютер, а работать с программатором как-то нужно? Все просто, создатели программы позаботились об этом и поставили в программе специальную опцию замедления для обеспечения стабильной работы, путем установки галочки “тОРОмоз”

Программа Uniprof для программатора Громова

Почему именно “тОРОмоз”, а не тормоз ?

А потому, что у создателей оболочки с чувством юмора все в порядке. В чем тут дело вы поймете, когда попробуете с помощью этого программатора, прошить например МК Mega 32. У этого МК очень большой объем памяти и прошивание занимает порядка двадцати минут и до получаса, тогда как USB программатор USBASP шьет такой же объем памяти за 30 – 60 секунд. Но тут есть один нюанс. Если вы что-то напутали с временем запуска тактового генератора МК или совершили подобную не критическую ошибку, то USB программатор может отказываться видеть МК. А программатор Громова после выставления типа МК вручную все сделает как надо. Он меня выручал в аналогичных ситуациях уже как минимум два раза. Не пытайтесь прошивать МК без использования галочки “торомоз”.  Прошивка обязательно запишется с ошибками. Особенно это опасно при выставлении фьюзов.

И вот мы наконец добрались до главного пункта этой статьи.  Что же нужно нажимать и в какой последовательности, для того, чтобы просто прошить МК?

Итак, сперва мы нажимаем  иконку, с рисунком папки “HEX”, и загружаем прошивку в буфер программы. Затем мы нажимаем “PROG” для того, чтобы прошить наш микроконтроллер. После этого мы нажимаем иконку “TEST”, или верификация, сверяем прошивку в памяти микроконтроллера, с прошивкой в буфере обмена программы. Это необходимо сделать для того, чтобы убедиться, что программа у нас записалась без ошибок. Если нам требуется скачать прошивку, ранее записанную в МК, мы нажимаем иконку “READ”, и считываем прошивку в буфер обмена.

Программа Uniprof для программатора Громова

Если же нам требуется сохранить эту прошивку на компьютере, мы должны нажать иконку “HEX” с изображением дискеты. Если у нас в памяти МК была ранее записана прошивка, мы стираем старую прошивку перед записью новой, путем нажатия на иконку “ERASE”.

И наконец, последняя, самая сложная часть, иконка “FUSE”, или выставление фьюзов. После того как мы прошили МК, мы должны выставить фьюзы, фьюз – биты, биты конфигурации. Все эти названия синонимы и означают одно и тоже. Разберем, что же мы видим после нажатия на кнопку “FUSE”:

Программа Uniprof для программатора Громова

Мы видим четыре окна без выставленных галочек. Не спешите здесь ничего нажимать, или рискуете залочить (заблокировать) МК! Будьте предельно внимательны или вам придется идти в магазин за новым микроконтроллером. Если, конечно, у вас нет для лечения МК сложного в сборке параллельного программатора, ну или не менее сложного реаниматора МК. Для начала нам требуется нажать во всех четырех окнах на кнопки “READ”, то есть считать все четыре байта конфигурации. А их именно четыре, в каждом по восемь битов. Это слева направо LOCK (защитный байт), или байт с помощью выставления LOCK битов которого, мы защищаем прошивку от копирования. Дальше идут LOW  (младший байт), HIGH (старший байт), EXT (дополнительный байт).

Еще один важный нюанс! Так уж повелось, что в МК AVR применяют и прямое, и инверсное выставление битов, в разных программах оболочках. Например, в Ponyprog мы должны при выставлении фьюзов выставить галочки там, где в Uniprof их нет, и наоборот. Как же не запутаться,? Ведь часто в статье, по которой мы собираем устройство, не указано, какое используется, прямое или инверсное представление битов. Ориентироваться нужно всегда по биту Spien. Он всегда запрограммирован, если мы имеем доступ к МК с помощью данных программаторов. Следовательно, если на нем стоит галочка, то и на других фьюзах, где должны стоять галочки, мы их ставим. Если же не стоит, то наоборот, убираем со всех фьюзов, где она не должна стоять. У нас будет посвящена разбору фьюз битов, отдельная подробная статья.

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

Программа Uniprof для программатора Громова

Никогда не изменяйте их, если вы прошиваете МК программатором Громова или программатором USBASP, или другим программатором, подключаемым по SPI интерфейсу.

Кто не понял, что да как,  вот небольшой видос, поясняющий, как прошить МК:

Простейший программатор для ATmega8 | Полезное своими руками

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

Я впервые столкнулся с микроконтроллерами, когда собирал свой первый импульсный металлоискатель Клон. Вот тогда-то и выяснилось, что контроллер без прошивки — это просто кусок пластмассы с ножками.

А чтобы залить нужную прошивку в АТМЕГу, никак не обойтись без программатора. Далее мы рассмотрим две самые простые и проверенные временем схемы программаторов.

Схема первая

С помощью этого программатора можно прошивать практически любой AVR-контроллер от ATMEL, надо только свериться с распиновкой микросхемы.

СОМ-разъем на схеме — это «мама».

На всякий случай привожу разводку печатной платы для атмеги8 (скачать), хотя такую примитивную схему проще нарисовать от руки. Плату перед печатью нужно отзеркалить.

Файл печатной платы открывать с помощью популярной программы Sprint Layout (если она у вас еще не установлена, то качайте 5-ую версию или лучше сразу 6-ую).

Как понятно из схемы, для сборки программатора потребуется ничтожно малое количество деталек:

Вместо КТ315 я воткнул SMD-транзистор BFR93A, которые у меня остались после сборки микромощных радиомикрофонов.

А вот весь программатор в сборе:

Питание (+5В) я решил брать с USB-порта.

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

Если же ваша микросхема б/у-шная, то без внешнего кварца она может и не запуститься. Тогда лучше ставьте кварц на 4 МГц, а конденсаторы лучше на 33 пФ.

Как видите, я кварц с конденсаторами не ставил, но на всякий случай предусмотрел под них места на плате.

Заливать прошивку лучше всего с помощью программы PonyProg (скачать).

Прошивка с помощью PonyProg

Заходим в меню Setup -> Calibration -> Yes. Должно появиться окошко «Calibration OK».

Далее Setup -> Interface Setup. Выбираем «SI Prog API» и нужный порт, внизу нажимаем «Probe», должно появиться окно «Test OK». Далее выбираем микроконтроллер «Device -> AVR micro ATmega8».

Теперь втыкаем микроконтроллер в панельку программатора, и подаем питание 5 вольт (можно, например, от отдельного источника питания или порта ЮСБ). Затем жмем Command -> Read All.

После чтения появляется окно «Read successful». Если все ок, то выбираем файл с нужной прошивкой для заливки: File -> Open Device File. Жмем «Открыть».

Теперь жмем Command -> Security and Configuration Bits и выставляем фьюзы, какие нужно.

Тщательно все проверяем и жмем «OK». Далее нажимаем Command -> Write All -> Yes. Идет прошивка и проверка. По окончании проверки появляется окно «Write Successful».

Вот и все, МК прошит и готов к использованию!

Имейте в виду, что при прошивке с помощью других программ (не PonyProg) биты могут быть инверсными! Тогда их надо выставлять с точностью до наоборот. Определить это можно, считав фьюзы и посмотрев на галку «SPIEN».

Схема вторая

Еще одна версия программатора, с помощью которого можно залить прошивку в микроконтроллер АТМЕГа (так называемый программатор Геннадия Громова). Схема состоит всего из 10 детатей:Диоды можно взять любые импульсные (например, наши КД510, КД522). Разъем — «мама». Питание на МК (+5В) нужно подавать отдельно, например, от того же компьютера с выхода USB.

Все это можно собрать навесным монтажом прямо на разъеме, но если вы крутой паяльник и знаете, что такое smd-монтаж, то можете сделать красиво:

Программировать только программой Uniprof. Тут хорошее описание программы: http://www.getchip.net/posts/025-uniprof-universalnyjj-programmator-dlya-avr/

Алгоритм прошивки с помощью программатора Громова

Программатор с установленной микросхемой подключаем к СОМ-порту компьютера, затем запускаем Uniprof, затем подаем питание на микроконтроллер. И первым делом проверяем, читаются ли фьюз-биты.

Если все ок, выбираем файл с нужной прошивкой и жмем запись.

Будьте предельно внимательны и осторожны, потому что если глюканет при записи фьюзов, то МК либо на выброс, либо паять схему доктора (а она сложная). Если поменяете бит SPIEN на противоположный — результат будет тот же (к доктору).

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *