Персональный компьютер вместо паяльника
О программировании МК
– Чтобы найти дорогу в Лондон, надо уметь говорить по‑английски. По‑моему, дело это очень трудное.
А.Дюма. Три мушкетера
Внедрение любой новой технологии требует начальных затрат. Не составляет исключения и микропроцессорная технология. В данном случае прямые затраты будут состоять в том, что вам, во‑первых, придется приобрести программатор, во‑вторых, компьютер – если по какой‑то непостижимой случайности у вас его до сих пор нет. Затраты эти могут быть сведены к минимуму – программатор лучше приобрести специализированный, а он стоит на порядок меньше универсального, а компьютер для наших целей сгодится совершенно любой, лишь бы он был из семейства PC, т. е. умел бы работать с Windows (хотя есть программаторы, которые работают и с DOS, и, разумеется, с Linux). Большинство современных программаторов общаются с компьютером через универсальный порт USB (создавая через него виртуальный СОМ‑порт), так что в этом отношении проблем не ожидается.
Железо
Раз уж мы начали с потребного «железа», то закончим эту тему, а потом перейдем к собственно программированию. Программатор, о котором идет речь, называется ISP‑программатором (In System Programming , т. е. программирование осуществляется прямо в устройстве пользователя). В Интернете можно найти множество предложений самодельных программаторов такого рода (ибо интерфейс программирования AVR не составляет секрета), но их функциональность и удобство пользования часто оставляют желать лучшего[30]. Поэтому предпочтительно покупать фирменный – так, очень удобные выпускает фирма Argussoft (AS‑2/3/4).
Для того чтобы работать с ISP‑программатором, естественно, его надо куда‑то подключить. Для этого на программируемой плате специально устанавливают программирующий разъем. ISP‑программаторы используют один и тот же тип разъема – игольчатый PLD (PL double , т. е. двухрядный), который хорошо знаком всем, кто когда‑нибудь подсоединял жесткий диск с IDE‑интерфейсом к материнской плате. Естественно, для ISP‑программаторов требуется гораздо меньше контактов, чем для жесткого диска. Минимальное их количество равно 6 (именно столько их у программатора, рекомендуемого самой фирмой Atmel , такой же разъем предусмотрен на всех платах Arduino ) – это выводы SPI‑интерфейса программирования: MOSI, MISO и SLK, а также Reset и два вывода питания +5 В и «земля» (ISP‑программаторы обычно питаются от программируемой схемы). Указанные выводы SPI‑интерфейса присоединяются к одноименным выводам кристалла, которые есть у всех МК AVR, имеющих возможность SPI‑программирования.
Хлопоты по приобретению программатора можно дополнительно минимизировать, если воспользоваться платформой Arduino , в которую программатор попросту встроен, как неотъемлемая часть. Но эти возможности, о которых мы расскажем в последующих главах, по умолчанию предполагают наличие фирменных плат Arduino (или какой‑либо из ее клонов). Здесь нам важно, что необязательно пользоваться аппаратными средствами собственно Arduino и приобретать платы этой платформы, в которых заведомо имеется много лишнего. Программное обеспечение Arduino IDE включает утилиту AVRDUDE, позволяющую программировать МК AVR напрямую, не пользуясь ни средой Arduino , ни заранее встроенным в контроллер загрузчиком. Информацию о том, как обращаться с AVRDUDE, можно найти на множестве ресурсов в Сети[31]. Эта утилита и связанные с ней программные средства (вроде WinAVR), в частности, позволяют применять простейший самодельный программатор, подключаемый к порту LPT.
Упомянутые фирменные программаторы от Argussoft имеют больше контактов: между сигнальными линиями проложены дополнительные линии «земли» и всего контактов получается 10[32]. Разводка этого разъема показана на рис. 19.2 далее.
Отметьте, что каждый сигнальный вывод «подтянут» к питанию внешним резистором – так надежнее. При отсчете выводов имейте в виду, что нумерация контактов PLD‑разъемов отличается от обычной и делается не в обход, как у микросхем, а следующим образом: если глядеть на «папу» сверху (т. е. со стороны подсоединения проводов), то вывод номер 1 , как и положено, находится слева внизу, вывод 2 – над ним, вывод 3 – следующий за первым в нижнем ряду и т. д., т. е. нижний ряд – это все нечетные, а верхний – все четные контакты. Это сделано потому, что разъемы PL могут иметь не строго фиксированное количество контактов, но при любом их количестве имеющиеся контакты будут нумероваться одинаково.
Если не поняли, то поглядите на разводку любого PLD‑разъема на материнской плате компьютера, которая обычно приведена прямо на ней (а также, как правило, имеется в руководстве).
* * *
Подробности
Так как игольчатые разъемы типа PLD и IDC с шагом 2,54 мм встречаются в практике изготовления микроэлектронных устройств довольно часто, то стоит разобраться в их маркировке. Начнем с того, что наименование IDC в случае штыревых разъемов для установки на плату относится к разъемам в кожухе с ключом (именно такие используются для подсоединения жесткого диска в ПК). Бескорпусные подобные разъемы носят название PLD для двухрядных (или PLS для однорядных) типов и более удобны в радиолюбительской практике, т. к. длинные разъемы легко отломать в нужном месте, чтобы обеспечить необходимое количество выводов (правда, при этом лучше все же обозначать на плате первый вывод, чтобы не перепутать ориентацию при включении).
Разметка на плате для обоих типов разъемов (и с кожухом и без) одинакова, поскольку все равно приходится учитывать место, которое займет кабельная розетка при ее подсоединении, и мы в этой книге вперемешку упоминаем IDС и PLD. Разумеется, розетка, которая используется для установки на плоский кабель, может иметь только фиксированное число контактов (из ряда 6, 10, 14, 16, 20, 22, 24, 26, 30, 34, 36, 40, 44, 50, 60…), что нужно учитывать при проектировании.
Цифра после обозначения разъема (IDC‑10 или PLD‑10) – это количество контактов разъема, а следующая буква символизирует его конфигурацию: М (male , «папа») для штыревой части и F (female , «мама») для гнездовой. Далее может следовать еще одна буква, которая обозначает ориентацию: S для прямых выводов (разъем перпендикулярен плате),R для повернутых под углом 90° (разъем параллелен плате). Таким образом, приведенное далее на схеме рис. 19.2 обозначение IDC‑10MS означает штыревой («папа») разъем в кожухе с ключом и с 10‑ю прямыми выводами. Соответствующая этому разъему кабельная часть обозначится, как IDC‑10F. Бескорпусные PLD‑разъемы бывают, естественно, только штыревые, потому для них буквы М и F не указываются (а повернутые под углом 90° дополняются буквой R ).
* * *
Вопрос, который при этом немедленно возникает: не жирно ли занимать как минимум три вывода портов (обычно это порт В контроллера) альтернативными функциями? Отвечаю: в большинстве случаев такие выводы можно использовать как обычные порты, программатору это не помешает. Единственная ситуация, в которой возникает конфликт между программатором и схемой, это если выводы MOSI, MISO и SLK используются как входные линии и подсоединены к активным выходам других микросхем, к коллектору открытого транзистора или к конденсатору большой емкости. Поэтому в схеме эти контакты лучше использовать в качестве выходных линий, а если хватает других портов – вообще оставить их только для программирования. На платах Arduino, где контакты штатного SPI‑порта совпадают с портом программирования, они выведены, как обычные линии (выводы D11, D12 и D13[33]), и в случае их использования для программирования к ним тоже не рекомендуется подключать низкоомную нагрузку. Естественно, при работе схемы программатор лучше отключать вовсе, только учтите, что по окончании цикла программирования в любом случае схема заработает сразу с начала, как после включения питания.
Все эти проблемы несущественны, если работать с универсальным программатором, где используется параллельное программирование. Тогда при программировании МК приходится вставлять в специальную колодку на корпусе программатора, а в схеме, естественно, для него тогда должна быть предусмотрена установка на панельку. Преимущество универсальных программаторов в том, что можно легко переходить с одного семейства процессоров на другое, причем, независимо от типа корпуса, а также программировать любые микросхемы памяти. Не нужен также и программирующий разъем на плате и связанные с ним резисторы. Но в процессе отладки сложной программы пользоваться универсальным программатором крайне неудобно – МК все время приходится вынимать и вставлять, что сильно замедляет процесс, к тому же есть риск повредить выводы. Поэтому универсальный программатор следует рекомендовать в случаях, когда программа уже более‑менее отлажена, например, при тиражировании конструкции.
Софт
Если мы имеем какой‑то программатор с прилагающимся к нему софтом, то, в сущности, нам нужна еще только одна специальная программа – ассемблер (assembler значит «сборщик»). Его можно бесплатно скачать с сайта Atmel в составе AVR Studio (папка avrassembler ), файл носит название avrasm2.exe . Практически все существующие ассемблеры запускаются из командной строки (хотя могут быть и упакованы в оболочку с графическим интерфейсом). В качестве параметров для компилятора Avrasm2 указывается имя файла с исходным текстом программы и имена выходных файлов, главным из которых является файл с расширением hex . Чтобы каждый раз не вводить длинную командную строку, пишется соответствующий bat ‑файл.
* * *
Подробности
Предположим, у вас файлavrasm2.exe находится в созданной вами папке c.\avrtools . Запустите Блокнот и введите следующий текст (соответственно измените путь, если папка другая):
Дата добавления: 2016-05-11; просмотров: 997;