Микроконтроллеры для начинающих

Микроконтроллеры для начинающих
Автор: Михаэль Хофманн
Год: 2014
ISBN: 978-5-9775-0551-2
Страниц: 304
Язык: Русский
Формат: PDF +CD
Размер: 30 Мб

Download

Рассмотрено программирование микроконтроллеров на примере РIС16F876А компании Microchip. Подробно описаны основные команды языка ассемблер, а также среда разработки MPLAB. Показано программирование с помощью отладчика-программатора ICD 2, а также через последовательный интерфейс. На практических примерах рассмотрено управление светодиодами и дисплеем, представление аналоговых сигналов в цифровой форме, сохранение/запись данных во внешнюю EEPROM-память, управление выходами микроконтроллера с помощью ИК-пульта дистанционного управления и др. На компакт-диске приведены примеры программ, чертеж для изготовления монтажной платы, электрические схемы, техническая документация, справочная информация и программное обеспечение.

+

Обзор микроконтроллеров

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

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

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

Габариты микросхем определяются преимущественно количеством входов и выходов. Таким образом, микроконтроллер, который должен наблюдать только за напряжением батареи и выдавать сигнал при выходе за пределы порогового значения, может обходиться малым количеством выводов. Напротив, контроллер, который должен регулировать температуру в нескольких комнатах и отображать этот процесс управления на цветном индикаторе с сенсорным экраном, нуждается в существенно большем количестве входов и выходов. Поэтому у производителей можно найти микроконтроллеры как с шестью выводами, так и с несколькими сотнями выводов. Кроме того, можно заметить, что обычно с увеличением количества выводов микросхемы МК вычислительная мощность также возрастает, поскольку большее количество выводов позволяет решить соответственно и большее число разнообразных задач. Также количество битов, которые одновременно обрабатываются, растет с габаритами микроконтроллера. В настоящее время имеются модули с разрядностью шины от 4 до 32 битов. Для персонального компьютера уже применяются 64-битные процессоры. В скором времени микроконтроллер тоже наверняка сможет оперировать 64-битными значениями. Будет ли это теперь преимуществом или скорее недостатком, каждый разработчик должен решать сам. Микроконтроллеры с длиной слова 4 бита можно найти преимущественно в музеях и очень старых устройствах. Однако они продаются еще и сегодня для восстановления старых устройств. В современных разработках эти микросхемы больше не используются. В настоящее время больше всего распространены микроконтроллеры с длиной слова от 8 до 16 битов. Выбор среди них очень велик. А вот 32-битные микроконтроллеры применяются преимущественно для устройств, которые управляют цветным графическим индикатором (дисплеем), поддерживают различные носители информации, такие как USB- или SD-карты, и предназначены для подключения к персональному компьютеру для обмена данными…

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

В дальнейшем рассматриваются только контроллеры фирмы Microchip. Все примеры были запрограммированы для PIC-микроконтроллеров (PIC — Programmable Integrated Circuit— программируемая интегральная схема) этой фирмы. Контроллеры других производителей, например Atmel, Motorola, Renesas и т. д., функционируют по такому же принципу и отличаются преимущественно возможностями и системой команд.

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

Представленные в этой книге примеры программировались и испытывались при помощи встроенного отладчика In-Circuit-Debugger (ICD2) от компании Microchip. Поэтому все рисунки и описания относятся к этому программатору. Однако имеются также другие программаторы разных производителей, при помощи которых можно программировать и отлаживать микроконтроллер. Также в Интернете находится много инструкций для изготовления самодельных программаторов. Руководство по разработке простого PIC-программатора имеется на приложенном CD-ROM. Но он подходит только для программирования контроллера, отладка (поиск ошибок) с этим простым программным адаптером не возможна.

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

Все примеры программ в этой книге представлены для микроконтроллера PIC16F876A. У этой микросхемы есть преимущество в том, что она имеет все основные характерные элементы современных микроконтроллеров. Количество контактов ввода/вывода I/O этого контроллера вполне достаточно для реализации практически любого проекта, однако при необходимости возможен очень простой переход и на другие типы. При этом нужно обязательно проверять названия и адреса регистров, поскольку не все PIC-контроллеры используют одни и те же адреса и обозначения.

Сравнительные характеристики микроконтроллеров

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

  • PIC10F222— очень маленький микроконтроллер с шестью выводами и размером 2×3 мм);
  • PIC16F876 — 8-битный микроконтроллер с 28 выводами;
  • PIC24FJ128 — 16-битный микроконтроллер с 64—100 выводами;
  • PIC32MX460 — 32-битный контроллер с 64—100 выводами;
  • ARM9— 32-разрядный микроконтроллер с ядром ARM (Advanced RISC Machines) в корпусе BGA (Ball Grid Array — конструкция корпуса микросхемы с выводами в виде крошечных металлических шариков. Они расположены в виде сетки на его нижней поверхности, которые прижимаются к контактным площадкам на печатной плате без применения пайки. Преимущество — более низкая стоимость изготовления и уменьшение размеров при наличии более трехсот выводов).

Флэш-память программ

Сначала разберемся, как данные поступают в микроконтроллер и как они образуются. Микроконтроллер не понимает, к сожалению, такой язык программирования, как Basic, С или ассемблер, а воспринимает только двоичные значения, т. е. нули или единицы. Они записываются во флэш-память программ (англ. Flash Program Memory), начиная с адреса 0x0000. Поскольку Flash-память— это энергонезависимая память, в которой данные сохраняются и после выключения питания, то именно здесь и хранят программный код микроконтроллера. Если бы программу поместили в оперативное запоминающее устройство (ОЗУ) (англ. RAM), то устройство перестало бы функционировать после выключения. Поэтому ОЗУ это память, которая предназначена для хранения промежуточных данных, а не программ. Чтобы сформировать цифровые данные, которые понимает PIC-контроллер, необходимо выполнить несколько последовательных операций. Принципиально можно было бы написать программный код непосредственно в двоичном виде и загрузить его при помощи программатора в микроконтроллер. Однако любой разработчик понимает, что это очень трудоемкая работа, и может восприниматься как “штрафная”. Поэтому для программирования микроконтроллеров, как правило, используют различные языки программирования. Наиболее употребительным является язык С или ассемблер. Оба языка очень близки к аппаратным средствам и поэтому могут непосредственно обмениваться сообщениями с физически имеющимися регистрами. Для сложных многоразрядных микроконтроллеров почти всегда применяется язык С, а вот относительно простой контроллер, который рассматривается в этой книге, достаточно часто программируют на ассемблере. Следующий пример показывает программу обратного счета от 9 до 0, написанную на языке С, ассемблере и в машинном коде, который в итоге должен находиться в PIC-контроллере.

Команды ассемблера PIC16F876A

Микроконтроллер PIC16F876A — это микроконтроллер, построенный на основе процессора с RISC-архитектурой или иначе на основе RISC-процессора (RISC — Reduced Instruction Set Computer — процессор с сокращенным набором команд), т. е. контроллер обходится ограниченным набором команд. Так в распоряжении микроконтроллера PIC16F876A всего 35 команд ассемблера, причем среди них только простые логические и арифметические команды. Преимущество такой архитектуры — это быстрое выполнение отдельных команд. Все команды выполняются за один цикл, кроме инструкций переходов, которые выполняются за два цикла. Но учтите: длительность цикла команды не равна периоду тактовой частоты процессора. Цикл выполнения инструкции состоит из 4 периодов тактовой частоты. Таким образом, при тактовой частоте процессора, а точнее частоте кварцевого резонатора или генератора равной 4 МГц, время выполнения команды составляет 1 мкс, т. е. в секунду процессор может выполнить примерно 1 млн команд.

В противоположность RISC-процессору— процессор с архитектурой CISC (Complex Instruction Set Computer — это процессор со сложным набором команд) или иначе CISC-процессор имеет в своем распоряжении, как видно из названия, уже наиболее полный набор команд. При CISC-архитектуре команда состоит из нескольких маленьких микрокоманд. Преимущество таких архитектур в том, что само программирование из-за разнообразия команд заметно упрощается. Разумеется, при этом нужно знать большее количество команд, которые имеют, в зависимости от сложности, разную продолжительность выполнения, в большинстве случаев равную нескольким тактам. Чтобы получить такие же удобства при программировании с использованием RISC-процессора, нужно определять собственные команды и записать их в форме макрокоманды. Макрокоманда — это команда, вызывающая выполнение некоторой определенной последовательности других команд. Они пишутся перед трансляцией программы в месте, в котором вызывается макрокоманда.

Программирование с помощью MPLAB

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

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

Чтобы отладить некоторую рабочую схему на основе микроконтроллера, аппаратные средства и программное обеспечение должны надлежащим образом между собой функционировать. При применении встроенного симулятора имеется очень хорошая возможность разделения программного обеспечения и аппаратных средств. В таком случае можно исследовать только программное обеспечение. Возможные ошибки монтажа микроконтроллера не игрют тогда роли и программное обеспечение в микроконтрллер загружают только после успешной симуляции. Затем должны тестироваться возможности микроконтроллера и устраняться ошибки с помощью встроенного в среду проек­тирования отладчика. Таким образом, поиск и устранение ошибок может
проходить в пошаговом режиме.

Программный интерфейс

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

Для загрузки программы в PIC-контроллер предоставляются в распоряжение 3—4 вывода. Они могут использоваться после программирования по требованию также для других целей, например как вход или выход. Здесь речь идет о следующих выводах:

  • PGC (Programming Clock) — тактовый вход в режиме программирования;
  • PGD (Programming Data) — вывод для данных в режиме программирования;
  • VPP (Programming Voltage) — входной вывод для высокого напряжения программирования, примерно 11—13 В;
  • PGM (Low-Voltage Programming Enable) — входной вывод для разрешения режима низковольтного программирования PIC-контроллера.

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

Программирование с помощью ICD 2

Далее объясняется программирование PIC-контроллера с помощью выводов PGC, PGD и Vpp при помощи встроенного отладчика ICD 2. На прилагаемом к книге компакт-диске находится короткое описание, как можно программировать микроконтроллер с помощью небольшой схемы, изготовленной самостоятельно. Схема собственного изготовления со всеми комплектующими изделиями стоит менее 2 €. К сожалению, с помощью этой схемы нельзя отлаживать контроллеры в схеме и таким образом проверять интерфейсы аппаратных средств.

Монтажная плата

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