Подключение микроконтроллера. Ликбез. Подключение светодиодов к микроконтроллеру AVR Чтение PDF документов в Linux

Способы тактирования

Каноническим способом тактирования МК является подключение кварцевого резонатора к соответствующим выводам (рис. 18.11, а). Емкость конденсато­ров С1 и С2 в типовом случае должна составлять 22-36 пФ (о включении кварцев см. главу 15). В большинстве моделей Tiny и Mega имеется специ­альный конфигурационный бит скрот, который позволяет регулировать по­требление. При установленном в единицу (незапрограммированном) этом бите размах колебаний уменьшается, однако при этом сужается возможный диапазон частот и общая помехоустойчивость, поэтому использовать этот режим не рекомендуется (см. далее). Может быть также использован низко­частотный кварцевый резонатор (например, «часовой» 32 768 Гц), при этом конденсаторы С1 и С2 можно не устанавливать, так как при установке скрот в значение О подключаются имеющиеся в составе МК внутренние конденса­торы 36 пФ.

Вместо кварцевого может быть использован керамический резонатор. Автору этих строк удавалось запускать МК на нестандартных частотах, используя вместо кварца в том же подключении миниатюрную индуктивность (при ее значении в 4,7 мкГ и емкостях конденсаторов 91 пФ частота получается око­ло 10 МГц).

Рис. 18.11. Способы тактирования МК AVR с использованием: а - кварцевого резонатора; б - внешнего генератора; в - RC-цепочки

Естественно, тактировать МК можно и от внешнего генератора (рис. 18.11, б). Особенно это удобно, когда требуется либо синхронизировать МК с внешними компонентами, либо иметь очень точную частоту тактирова­ния при использовании соответствующих генераторов (например, серии SG-8002 фирмы Epson).

Наоборот, когда точность не требуется, можно использовать внешнюю ЛС-цепочку (рис. 18.11, в). В этой схеме емкость С1 должна быть не менее 22 пФ, а резистор R1 выбирается из диапазона 3,3-ЮОкОм. Частота при этом определяется по формуле F= 2/3 RC, CI можно не устанавливать вооб­ще, если записать логический ноль в конфигурационную ячейку скрот, под­ключив тем самым внутренний конденсатор 36 пФ.

Наконец, можно обойтись вообще без каких-то внешних компонентов - ис­пользовать встроенный /гС-генератор, который может работать на четырех частотах, приблизительно равных 1, 2, 4 и 8 МГц. Эту возможность наиболее целесообразно использовать в младших моде.(1ях Tiny, выпускающихся в 8-контактном корпусе- тогда выводы, предназначенные для подключения резонатора или внешнего генератора, можно использовать для других целей, как обычные порты ввода-вывода. Семейство Classic встроенного RC-генератора не имело.

По умолчанию МК семейств Tiny и Mega установлены в состояние для рабо­ты со встроенным генератором на частоте 1 МГц (cksel = oooi), поэтому для работы в других режимах нужно соответствующим образом установить конфигурационные ячейки cksel (см. табл. 18.1). Как это осуществить на практике, будет рассказано в главе 19, Рекомендуемое значение этих ячеек для обычных резонаторов от 1 МГц и более - все единицы в ячейках cksel, и ноль в скрот.

Подробности

При установке ячеек следует учитывать, что состояние cksel = оооо (зер­кальное по отношению к наиболее часто употребляемому значению для квар­цевого резонатора iiii) переводит МК в режим тактирования от внешнего ге­нератора, и в этом состоянии его нельзя даже запрограммировать без подачи внешней частоты. Также если вы попытаетесь установить режим с низкочас­тотным резонатором, то от вьюокочастотного МК уже не запустится, а далеко не все программаторы могут работать при таких низких частотах тактирования. Поэтому при манипуляциях с ячейками, и не только cksel, нужно быть крайне осторожным и хорошо представлять, что именно вы устанавливаете. Подроб­нее об этом говорится в следующей главе.

Таблица 18.1. Установка конфигурационных ячеек CKSEL в зависимости от режимов тактирования

Источник тактирования

Внешняя частота

Встроенный /?С-генератор

Встроенный RC-генератор

Встроенный /?С-генератор

Встроенный RC-генератор

Внешняя RC-цепочка

Внешняя /?С-цепочка

Внешняя RC-цепочка

Внешняя RC-цепочка

Низкочастотный резонатор

Таблица 16.1 (окончание)

Источник тактирования

Керамический резонатор

Керамический резонатор

кварцевый резонатор

Кварцевый резонатор

Параллельные порты ввода/вывода

Портов ввода-вывода (повторим, что их не следует путать ни с регистрами ввода-вывода, ни с последовательными портами МК для обмена информаци­ей с внешними устройствами) в разных моделях может быть от 1 до 7. Номи­нально порты 8-разрядные, в некоторых случаях разрядность ограничена числом выводов корпуса и может быть меньше восьми. Порты обозначаются буквами А, В, С, D и т. д., причем необязательно по порядку: в младших мо­делях могут наличествовать, например, только порты В и D (как»в ATtiny2313) или вообще только один порт В (как в ATtinylх).

Для сокращения числа контактов корпуса в подавляющем большинстве слу­чаев внешние выводы, соответствующие портам, кроме своей основной функции (двунаправленного ввода/вывода) несут также и дополнительную. Отметим, что’ кроме как для вывода Reset, если он может работать в альтер­нативном режиме, никакого специального переключения выводов портов не требуется. Если вы, к примеру, в своей программе инициализируете последо­вательный порт UART, то соответствующие выводы порта (например, в ATmega8335 это выводы порта PDO и PD1) будут работать именно в альтер­нативной функции, как ввод и вывод UART. При этом в промежутках между таким специальным использованием выводов их можно в принципе исполь­зовать, как обычные двунаправленные выводы. На практике приходится применять схемотехнические меры для изоляции функций друг от друга, по­этому злоупотреблять этой возможностью не рекомендуется.

Выводы портов в достаточной степени автономны, и их режим может уста­навливаться независимо друг от друга. По умолчанию при вк;^ючении пита­ния все дополнительные устройства отключены, а порты работают на вход, причем находятся в третьем состоянии с высоким гшпедансом (то есть с вы­соким входным сопротивлением). Работа на выход требует специального указания, для чего в программе нужно установить соответствующий нужно­му выводу бит в регистре направления данных (этот регистр обозначается DDRx, где x - буква, обозначающая конкретный порт, например для порта А это будет ddra). Если бит сброшен (то есть равен логическому нулю), то вы­вод работает на вход (как по умолчанию), если установлен (то есть равен ло­гической единице) - то на выход.

Для установки выхода в состояние единицы нужно отдельно установить со­ответствующий бит в регистре данных порта (обозначается portx), а для ус­тановки в О - сбросить этот бит. Направление работы вывода (вход-выход, регистр DDRx) и его состояние (О-1, portx) путать не следует.

Регистр данных portx фактически есть просто выходной буфер, все, что в него записывается, тут же оказывается на выходе. Но если установить вывод порта на вход (то есть записать в регистр направления ddrx логический ноль), как это сделано по умолчанию, то регистр данных portx будет играть несколько иную роль - установка его разрядов в ноль означает, что вход находится в третьем состоянии с высоким сопротивлением, а установка в единицу подключит к выводу «подтягивающий» (pull-up) резистор сопротив­лением 35-120 кОм.

Заметки на полях

Встроенного pull-up-резистора в большинстве случаев оказывается недоста­точно для надежной работы - из-за наводок МК может сбоить, и лучше уста­навливать дополнительный внешний резистор параллельно этому внутренне­му, с сопротивлением от 1 до 5 кОм (в критичных по отношению к потреблению случаях его величину можно увеличить до 20-30 кОм). Например, если вы подключаете ко входу выносную кнопку с двумя выводами, которая коммути­руется на «землю», или вывод работает на «общую шину» с удаленными (на­ходящимися на другой плате) устройствами, или вывод осуществляет функ­цию внешнего прерывания (см. далее), то такой дополнительный резистор следует подключать обязательно.

Процедура чтения уровня на выводе порта, если он находится в состоянии работы на вход, не совсем тривиальна. Возникает искушение прочесть дан­ные из регистра данных portx, но это ничего не даст - вы прочтете только то, что там записано вами же ранее. А для чтения того, что действительно имеется на входе (непосредственно на выводе микросхемы) предусмотрена другая возможность. Для этого нужно обратиться к некоторому массиву, ко­торый обозначается pinx. Обращение осуществляется так же, как и к отдель­ным битам обычных РВВ (см. главу 19\ но pinx не есть регистр, это просто некий диапазон адресов, чтение по которым предоставляет доступ к инфор­мации из буферных элементов на входе порта. Записывать что-либо по адре­сам piNx, естественно, нельзя.

Прерывания

Как и в ПК, прерывания (interrupts) в микроконтроллерах бывают двух видов. Но если в ПК прерывания делятся на аппаратные (например, от таймера или клавиатуры) и программные (фактически не прерывания, а подпрограммы, записанные в. BIOS- с распространением Windows это понятие почти ис­чезло из программистской практики), то в МК, естественно, все прерыва­ния - аппаратные, а делятся они ria внутренние и внешние. Любое прерыва­ние отдельно, а также вообще возможность их возникновения требуют предварительного специального разрешения.

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

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

Внешних прерываний у МК AVR как минимум два, INTO, INT1 (у большин­ства Mega есть еще третье - ИЧТ2). Внешнее прерывание - событие, кото­рое возникает при появлении сигнала на одном из входов, специально пред­назначенных для этого. Различаются три вида событий, вызывающих прерывание, и их можно устанавливать в программе: это может быть низкий уровень напряжения, а также пюложительный или отрицательный фронт на соответствующем выводе. Любопытно, что прерывания по всем этим собы­тиям выполняются, даже если соответствующий вывод порта сконфигуриро­ван на выход.

Кратко рассмотрим особенности использования этих режимов. Прерывание по низкому уровню (режим установлен по умолчанию, для его инициализа­ции достаточно разрешить соответствующее прерывание) возникает всякий раз, когда на соответствующем входе присутствует низкий уровень. «Всякий раз» - это значит, что действительно всякий, то есть если отрицательный импульс длится какое-то время, то процедура обработки прерывания, закон­чившись, повторится снова и снова, не давая основной программе работать. Поэтому обычная схема использования этого режима внешнего прерыва­ния - сразу же по возникновении его запретить (процедура обработки при этом, раз уж началась, один раз выполнится до конца) и разрешить опять только тогда, когда внешнее воздействие должно уже закончиться (например, если это нажатие кнопки, то его стоит опять разрешить по таймеру через од-ну-две секунды).

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

Подробности

у внимательного читателя возникает законный вопрос - а зачем вообще ну­жен режим внешнего прерывания по уровню? Дело в том, что оно во всех мо­делях выполняется асинхронно - в тот момент, когда низкий уровень появил­ся на выводе МК. Конечно, обнаружение прерывания может произойти только по окончании текущей команды, так что очень короткие импульсы могут и про­пасть. Но прерывания INTO и INT1 в режиме управления по фронту у большин­ства моделей определяются наоборот, только синхронно - в момент перепа­да уровней тактового сигнала контроллера, поэтому их длительность не должна быть короче одного периода тактового сигнала. Но это не самое глав­ное: по большому счету разницы в этих режимах никакой бы не было, если бы не то обстоятельство, что синхронный режим требует непременно наличия этого самого тактового сигнала. Потому асинхронное внешнее прерывание, соответственно, может «разбудить» контроллер, находящийся в одном из ре­жимов глубокого энергосбережения, когда тактовый генератор не работает, а синхронное - нет. И обычные МК, вроде AT90S8515 семейства Classic (но не его mega-аналога!), могут выводиться из глубокого «сна» только внешним пре­рыванием по уровню, которое не всегда удобно использовать. У большинства же моделей семейства Меда (из младших моделей - кроме ATmegaS), имеет­ся еще одно прерывание INT2, которое происходит только по фронтам (по уровню не может), но, в отличие от INTO и INT1, асинхронно. В ATtiny2313 (но не в его «классическом» аналоге!) такое асинхронное прерывание может про­исходить по сигналу с любого из 8 выводов порта В. Это значительно повыша­ет удобство пользования контроллером в режиме энергосбережения.

Таймеры-счетчики

в большинстве МК AVR присутствуют два или три таймера-счетчика, один из которых- 16 разрядный, а остальные- 8-разрядные (в старших моде­лях Mega общее число счетчиков может быть до 6). Все счетчики имеют возможность предварительной загрузки значений и могут работать непо­средственно от тактовой частоты (СК) процессора или от нее же, поделен­ной на 8, 64, 256 или 1024 (в отдельных случаях еще на 16 и 32), а также от внешнего сигнала. В целом устройство таймеров в МК, как мы говорили, похоже на счетчики 561HEU/14 (см. главу 15), только функциональность их значительно расширена.

В архитектуре AVR 8-разрядным счетчикам-таймерам присвоены номера О и 2, а 16-разрядным- 1, 3 и далее. Некоторые 8-разрядные счетчики (обычно Timer 2, если их два) могут работать в асинхронном режиме от отдельного тактового генератора, причем продолжать функционировать даже в случае «спящего» состояния всей остальной части МК, что позволяет использовать их в качестве часов реального времени.

При использовании счетчиков-таймеров, как обычных счетчиков внешних импульсов (причем возможна реакция как по спаду, так и по фронту импуль­са) частота подсчитываемых импульсов не должна превышать половины час­тоты тактового генератора МК (причем при несимметричном внешнем меан­дре инструкция рекомендует еще меньшее значение предельной частоты - 0,4 от тактовой). Это обусловлено тем, что при счете внешних импульсов их фронты обнаруживаются синхронно (в моменты положительного перепада тактового сигнала). Кроме того, стоит учитывать, что задержка обновления содержимого счетчика после прихода внешнего импульса может составлять до 2,5 периода тактовой частоты.

Это довольно сильные ограничения, поэтому, например, использовать МК в качестве универсального частотомера не очень удобно - быстродействую­щие схемы лучше проектировать на соответствующей комбинационной ло­гике или на ПЛИС (программируемых логических интегральных схемах).

При наступлении переполнения счетчика возникает событие, которое может вызывать соответствующее прерывание. 8-разрядный счетчик Timer О в ряде случаев этой функцией и ограничивается. Счетчик Timer 2, если он имеется, может также вызывать прерывание по совпадению подсчитанного значения с некоторой заранее заданной величиной. 16-разрядные счетчики - более «продвинутые» и могут вызывать прерывания по совпадению с двумя незави­симо заданными числами А и В. При этом счетчики могут обнуляться или продолжать счет, а на специальных выводах при этом могут генерироваться импульсы (аппаратно, без участия программы).

Кроме того, 16-разрядные счетчики могут осуществлять «захват» (capture) внешних одиночных импульсов на специальном выводе. При этом может вы­зываться прерывание, а содержимое счетчика помещается в некий регистр. Сам счетчик при этом может обнуляться и начинать счет заново или просто продолжать счет. Такой режим удобно использовать для измерения периода внешнего сигнала или для подсчета неких нерегулярных событий (вроде прохождения частиц в счетчике Гейгера). Немаловажно, что источником та­ких событий может быть также встроенный аналоговый компаратор, который тогда используется, как формирователь импульсов.

Все счетчики-таймеры могут работать в т. н. режимах PWM, то есть в качест­ве 8-, 9-, 10- или 16-битных широтно-импульсных модуляторов (ШИМ), при­чем независимо друг от друга, что позволяет реализовать многоканальный ШИМ. В технической документации этим режимам, в силу их сложности, многовариантности и громоздкости, посвящено много страниц. Простейший вариант использования этих режимов для воспроизведения звука мы кратко рассмотрим в главе 22 в связи с голосовой сигнализацией. Отметим, что син­тез звука - не единственное и даже не самое приоритетное назначение ре­жимов PWM, их также можно использовать для регулирования мощности или тока (например, при зарядке аккумуляторов), управления двигателями, выпрямления сигнала, при цифроаналоговом преобразовании.

Кроме таймеров-счетчиков, во всех без исключения AVR-контроллерах есть сторожевой (Watchdog) таймер. Он предназначен в основном для вывода МК из режима энергосбережения через определенный интервал времени, но мо­жет использоваться и для аварийного перезапуска МК. Например, если рабо­та программы зависит от прихода внешних сигналов, то при их потере (на­пример, из-за обрыва на линии) МК может «повиснуть», а Watchdog-таймер выведет его из этого состояния.

Последовательные порты

Последовательные порты для обмена данными с внешними устройствами - важнейшая составляющая любого МК, без них его «общение» с внешним ми­ром резко ограничено. Последовательными их называют потому, что в них в каждый момент времени передается только один бит (в некоторых случаях возможна одновременная передача и прием, но все равно только по одному биту за раз). Самое главное преимущество последовательных портов перед параллельными (когда одновременно производится обмен целыми байтами или полубайтами-тетрадами) - снижение числа соединений. Но оно не единственное: как ни парадоксально, но последовательные интерфейсы дают значительную фору параллельным на высоких скоростях, когда на скорость передачи начинают влиять задержки в линиях. Последние невозможно сде­лать строго одинаковыми, и это одна из причин того, что последовательные интерфейсы в настоящее время начинают доминировать (типовые приме­ры - USB и FireWire вместо СОМ, LPT и SCSI, или Serial ATA вместо IDE).

В микроконтроллерных устройствах с нашими объемами данных, конечно, скорость передачи нас волнует во вторую очередь, но вот количество соеди­нительных проводов - очень критичный фактор. Поэтому все внешние уст­ройства, с которыми мы будем иметь дело в этой книге, будут иметь после­довательные интерфейсы.

Практически любой последовательный порт можно имитировать программ­но, используя обычные выводы МК. Когда-то так и поступали даже в случае самого популярного из таких noptoB - UART. Однако с тех пор МК обзаве­лись аппаратными последовательными портами, что, впрочем, не означает необходимости их непременного использования. Легкость программной ими­тации последовательных портов - еще одно их достоинство.

Из всех разновидностей портов, которые могут наличествовать в МК AVR, мы особенно обратим внимание на UART- Universal Asynchronous Receiver-Transmitter, «универсальный асинхронный приемопередатчик». UART есть основная часть любого устройства, поддерживающего протокол RS-232, но и не только его (недаром он «универсальный») - например, про­мышленные стандарты RS-485 и RS-422 также реализовываются через UART, так как они отличаются от RS-232 только электрическими параметра­ми и допустимыми скоростями, а не общей логикой построения. В персо­нальных компьютерах есть СОМ-порт, который работает по тому же прото­колу RS-232, и узел UART точно так же является его базовой частью.

Поэтому UART служит основным способом обмена данными МК с компью­тером. Отметим, что отсутствие СОМ-порта в большинстве современных мо­делей ПК не является препятствием: для этого существуют переходники USB-COM, а в настольную модель можно вставить дополнительную карту с СОМ-портами.

Заметки на полях

А почему это для нас так важно? Дело в том, что, соединив макет прибора с компьютером, даже если обмен данными функциональностью прибора и не предусмотрен, программу гораздо проще отлаживать, просто временно встав­ляя в нужных местах программы операции посылки значений задействованных регистров в ПК и принимая их в реальном времени с помощью какой-либо про­граммы- эмулятора терминала. Это намного удобней, чем осваивать гро­моздкую AVR Studio, да еще и в комплекте с какой-нибудь дорогущей отладоч­ной платой. Потому мой совет: сделать себе сразу отладочную плату, содержащую программирующий разъем (см. следующую главу) и преобразо­ватель уровней UART/RS-232 с разъемом для подключения нуль-модемного кабеля (см. главу 21).

О том, как обращаться с UART на практике, рассказывается в главе 21. Кроме UART, почти все МК AVR содержат самый простой из всех последователь­ных портов - SPI (Serial Peripheral Interface, последовательный периферий­ный интерфейс). О принципе устройства SPI упоминалось в главе 16. Его принципиальная простота сыграла отчасти дурную роль: трудно встретить два устройства, где протоколы SPI полностью совпадают, обычно обмен по этому порту сопровождается теми или иными «наворотами». Следует отме­тить, что программирование AVR также осуществляется через SPI, однако в общем случае этот интерфейс и SPI для обмена данными - разные вещи, хотя в большинстве случаев выводы у них одни и те же.

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

Некоторые другие узлы МК семейства AVR (например, АЦП) мы рассмот­рим по ходу изложения конкретных схем - так будет нагляднее. Здесь же мы закончим затянувшееся знакомство с микроконтроллером и перейдем к вопросу о том, как его программировать.

Научимся искать информацию по разным моделям AVR микроконтроллеров, разберемся c чтением PDF документов в операционной системе Linux. Узнаем как подключить микроконтроллер к программатору используя интерфейс ISP при помощи нескольких проводников.

Чтобы правильно подключить микросхему-микроконтроллер к программатору нужно разобраться где у него и какие выводы. Для получения исчерпывающей информации о интересующем нас микроконтроллере качаем на официальном сайте даташит (datasheet ) на интересующий нас чип - Даташиты по микроконтроллерам ATMEL .

На первой страничке даташита приводится подробное описание возможностей микроконтроллера, а далее приведена распиновка микросхем под каждый из типов корпусов. Каждый даташит по AVR чипу содержит массу подробной информации на английском языке, к примеру даташит на микроконтроллер ATmega8 содержит 326 страниц!

Не знаете английского? - старайтесь понемногу изучать, без него сейчас очень трудно в современном мире радиоэлектроники и компьютерной техники, это универсальный международный язык. А пока что, если не знаете что означает какое-то слово или предложение - переведите его через сервис машинных переводов translate.google.com.

Чтение PDF документов в Linux

Как правило, все даташиты на микросхемы поставляются в формате PDF (Portable Document Format) - формат электронных документов для использования на разных платформах, разработан фирмой Adobe Systems.

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

  • Okular - универсальная и мощная программа для просмотра документов, входит в окружение рабочего стола KDE;
  • Qpdfview - простая и легковесная программа для просмотра документов в формате PDF, DjVu и PS;
  • Evince (Document Viewer) - очень быстрый и легковесный просмотрщик документов PostScript (PS), EPS, DJVU, DVI, PDF;
  • Xpdf - высокопроизводительный просмотрщик PDF-файлов.

Какую программу выбрать для просмотра PDF под Linux? - очень хорошо справляются со своими задачами программы Okular и Evince.

Если у вас установлена рабочая среда KDE то скорее всего что программа Okular уже присутствует в системе. Если Okular не установлен то исправить это можно командой:

Sudo apt-get install okular okular-extra-backends

Если же у вас рабочая среда отличная от KDE - GNOME, XFCE, UNITY то более экономичным решением будет установить Evince, поскольку установка в данных средах программы Okular потребует некоторые компоненты от рабочей среды KDE.

Рис. 1. Универсальный просмотрщик документов Evince под Linux - средство для листания PDF документов по микроконтроллерам.

Просмотрщик документов Evince очень хорошо открывает огромные документы и справляется иногда с такими что не под силу прочитать для Okular. Установка Evince в Linux:

Sudo apt-get install evince

Думаю что у вас теперь не возникнет проблем с чтением документов в формате PDF под ОС GNU Linux .

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

Выше было рассказано что для подключения микроконтроллера к программатору нужно соединить выводы ISP: VCC, GND, MISO, MOSI, SCK, RST. Выводы с данными названиями присутствуют у всех микроконтроллеров, так что даташит нам в помощь.

Рис. 2. Распиновка микроконтроллера ATmega8 и подключение его к ISP (USB ASP).

У программатора USB ASP на коннекторе ISP предусмотрено напряжение +5В (VCC), так что для программирования чипа можно воспользоваться питанием от программатора, а вернее от USB порта к которому он подключен.

В рассмотреных раньше программаторах , что используют COM и LPT порты, нет вывода VCC, а это значит что с использованием этих программаторов на выводы GND (-) и VCC (+) микроконтроллера нужно подать напряжение питания 5В от внешнего источника.

Подключения микроконтроллера к программатору USB ASP на беспаечной макетной панели очень просто реализовать при помощи перемычек (проводники со штырьками на двух концах).

Рис. 3. Подключение к ISP коннектору программатора USB ASP на беспаечной макетной панели.

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

Общая информация

Микроконтроллеры встречаются везде. Их можно найти в холодильниках, стиральных машинках, телефонах, заводских станках и большом количестве других технических устройств. Микроконтроллеры бывают как простыми, так и чрезвычайно сложными. Последние предлагают значительно больше возможностей и функционала. Но разбираться сразу в сложной технике не выйдет. Первоначально необходимо освоить что-то простое. И в качестве образца будет взят Atmega8. Программирование на нём не является сложным благодаря грамотной архитектуре и дружелюбному интерфейсу. К тому же он является обладателем достаточной производительности, чтобы использовать в большинстве Более того, они применяются даже в промышленности. В случае с Atmega8 программирование предусматривает знание таких языков как AVR (C/Assembler). С чего же начать? Освоение этой технологии возможно тремя путями. И каждый выбирает сам, с чего начать работу с Atmega8:

  1. Программирование через Arduino.
  2. Покупка готового устройства.
  3. Самостоятельная сборка микроконтроллера.

Нами будет рассмотрен первый и третий пункт.

Arduino

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

  1. Низкий порог требований. Не нужно обладать специальными навыками и умениями для разработки технических устройств.
  2. Широкий спектр элементов будет доступен для подключения без дополнительной подготовки.
  3. Быстрое начало разработки. С Arduino можно сразу переходить к созданию устройств.
  4. Наличие большого количества учебных материалов и примеров реализаций различных конструкций.

Но есть и определённые минусы. Так, Arduino программирование Atmega8 не позволяет глубже окунуться в мир микроконтроллера и разобраться во многих полезных аспектах. Кроме этого, придётся изучить язык программирования, что отличается от применяемых AVR (C/Assembler). И ещё: Arduino имеет довольно узкую линейку моделей. Поэтому рано или поздно возникнет необходимость использовать микроконтроллер, что не используется в платах. А в целом это неплохой вариант работы с Atmega8. Программирование через Arduino позволит получить уверенный старт в мире электроники. И у человека вряд ли опустятся руки из-за неудач и проблем.

Самостоятельная сборка

Благодаря дружелюбности конструкции их можно сделать самими. Ведь для этого нужны дешевые, доступные и простые комплектующие. Это позволит хорошо изучить устройство микроконтроллера Atmega8, программирование которого после сборки будет казаться более лёгким. Также при необходимости можно самостоятельно подобрать иные комплектующие под конкретную задачу. Правда, здесь есть и определённый минус - сложность. Самостоятельно собрать микроконтроллер, когда нет нужных знаний и навыков, нелегко. Этот вариант мы и рассмотрим.

Что же нужно для сборки?

Первоначально необходимо заполучить сам Atmega8. Программирование микроконтроллера без него самого, знаете ли, невозможно. Он обойдётся в несколько сотен рублей - обеспечивая при этом достойный функционал. Также стоит вопрос о том, как будет осуществляться программирование Atmega8. USBAsp - это довольно хорошее устройство, что себя зарекомендовало с лучшей стороны. Но можно использовать и какой-то другой программатор. Или же собрать его самостоятельно. Но в таком случае существует риск, что при некачественном создании он превратит микроконтроллер в неработающий кусочек пластика и железа. Также не помешает наличие макетной платы и перемычек. Они не обязательны, но позволят сэкономить нервы и время. И напоследок - нужен источник питания на 5В.

Программирование Atmega8 для начинающих на примере

Давайте рассмотрим, как в общих чертах осуществляется создание какого-то устройства. Итак, допустим, что у нас есть микроконтроллер, светодиод, резистор, программатор, соединительные провода, и источник питания. Первый шаг - это написание прошивки. Под нею понимают набор команд для микроконтроллера, что представлен в качестве конечного файла, имеющего специальный формат. В нём необходимо прописать подключение всех элементов, а также взаимодействие с ними. После этого можно приступать к сборке схемы. На ножку VCC следует подать питание. К любой другой, предназначенной для работы с устройствами и элементами,подключается сначала резистор, а потом светодиод. При этом мощность первого зависит от потребностей в питании второго. Можно ориентироваться по такой формуле: R=(Up-Ups)/Is. Здесь p - это питание, а s - светодиод. Давайте представим, что у нас есть светодиод, потребляющий 2В и требующий ток питания на уровне 10 мА, переводим в более удобный для математических операций вид и получаем 0.01А. Тогда формула будет выглядеть следующим образом: R=(5В-2В)/0.01А=3В/0.01А=300 Ом. Но на практике часто оказывается невозможным подобрать идеальный элемент. Поэтому берётся наиболее подходящий. Но нужно использовать резистор с сопротивлением выше значения, полученного математическим путём. Благодаря такому подходу мы продлим срок его службы.

А что же дальше?

Итак, у нас есть небольшая схема. Теперь осталось подключить к микроконтроллеру программатор и записать в его память прошивку, что была создана. Здесь есть один момент! Выстраивая схему, необходимо её создавать таким образом, чтобы микроконтроллер можно было прошивать без распайки. Это позволит сберечь время, нервы и продлит срок службы элементов. В том числе и Atmega8. Внутрисхемное программирование, нужно отметить, требует знаний и умений. Но оно же позволяет создавать более совершенные конструкции. Ведь часто бывает, что во время распайки элементы повреждаются. После этого схема готова. Можно подавать напряжение.

Важные моменты

Хочется дать новичкам полезные советы про программирование Atmega8. Встроенные переменные и функции не менять! Прошивать устройство созданной программой желательно после её проверки на отсутствие «вечных циклов», что заблокируют любое иное вмешательство, и с использованием хорошего передатчика. В случае использования самоделки для этих целей следует быть морально готовым к выходу микроконтроллера из строя. Когда будете прошивать устройство с помощью программатора, то следует соединять соответствующие выходы VCC, GND, SCK, MOSI, RESET, MISO. И не нарушайте технику безопасности! Если техническими характеристиками предусмотрено, что должно быть питание в 5В, то нужно придерживаться именно такого напряжения. Даже использование элементов на 6В может негативно сказать на работоспособности микроконтроллера и сократить срок его службы. Конечно, батареи на 5В имеют определённые расхождения, но, как правило, там всё в разумных рамках. К примеру, максимальное напряжение будет держаться на уровне 5,3В.

Обучение и совершенствование навыков

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

Сложно ли начать создавать что-то своё?

Достаточно иметь 500-2000 рублей и несколько свободных вечеров. Этого времени с лихвой хватит, чтобы ознакомиться с архитектурой Atmega8. После небольшой практики можно будет спокойно создавать свои собственные проекты, выполняющие определённые задачи. К примеру, роботизированную руку. Одного Atmega8 должно с лихвой хватить, чтобы передать основные моторные функции пальцев и кисти. Конечно, это довольно сложная задача, но вполне посильная. В последующем вообще можно будет создавать сложные вещи, для которых понадобятся десятки микроконтроллеров. Но это всё впереди, перед этим необходимо получить хорошую школу практики на чем-то простом.

Мы провели эмуляцию схемы в программе Proteus, помигали светодиодом и научились прошивать наш виртуальный микроконтроллер. Наверняка многим из читателей пришла в голову мысль: “А можно ли помигать светодиодом, использую кнопку, подключенную к МК?

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


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

Итак к делу. Так выглядит у нас наша схема в программе Proteus (кликните для увеличения):

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

Как мы уже разобрали, питание и землю мы берем во вкладке “Терминал”. Обозначаются они у нас соответственно Power и Ground.

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


Перед использованием нам нужно выбрать кнопку в библиотеке аналогично остальным деталям. Для этого нужно набрать в поле “Маска” слово “but”. Затем в поле “Результаты” слово “BUTTON”:


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

Какие порты у нас используются в проекте. Ниже на рисунке мы видим отходящие линии от портов РA0, РВ0, РВ1, РВ2 и РВ3. К порту В у нас подключены светодиоды, а к порту А – кнопка.

Итак, при нажатии, мы замыкаем цепь соединяющую +5 вольт с портом РА0 и верхним выводом резистора. Для чего у нас здесь вообще установлен резистор? Дело в том, что цепь кнопки должна быть замкнутой. После того как мы установили резистор, ток у нас течет от плюса питания через кнопку, резистор и дальше на землю.

Номинал резистора достаточно взять равным 200 Ом. Итак, когда мы нажимаем кнопку, мы соединяем порт РА0 с +5 вольт питания, и если мы опросим ножку РА0 на наличие напряжения или его отсутствие, мы сможем влиять на выполнение нашей программы.

Скрины с текстом нашей программы я привел ниже:


Итак отличия от прошлого проекта заключаются в том, что все 8 выводов порта РА мы конфигурируем на вход, выводы порта РВ0 – РВ3 мы конфигурируем на выход, а РВ4 – РВ7 на вход.


Затем мы используем в нашей программе проверку условия “ if”


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

Аналогично, с помощью условия “if” мы опрашиваем кнопку на нажатие . Обратите внимание, текст у нас в скобках изменился. Это означает что если на ножке РА0 у нас логическая единица, мы выполняем условие, то есть текст в фигурных скобках. То есть другими словами, у нас при отжатой кнопке, поочередно загораются и тухнут светодиоды с первого по четвертый, а при нажатии и удерживании, загораются и тухнут с четвертого по первый. Таким образом, мы можем влиять на выполнение программы, с помощью нажатия кнопки, опрашивая наличие на ней логического нуля, или логической единицы

Также , в котором находятся файл “сишник”, HEX и файл Протеуса.

А вот и видео

Loading...Loading...