top of page
j92113

Изучаем микроконтроллеры

Обновлено: 8 нояб. 2018 г.

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



Урок 1 Введение

Микроконтроллер (Micro Controller Unit, MCU)микросхема, предназначенная для управления электронными устройствами (см. Рис. 1а). Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, содержит ОЗУ (Оперативное Запоминающее Устройство) или ПЗУ (Постоянное Запоминающее Устройство). По сути, это небольшой компьютер, способный выполнять определенные задачи.


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

На сегодняшний день существует большое количество микроконтроллеров разных типов. Популярностью у разработчиков пользуются микроконтроллеры РiС фирмы Microchip Technology, а также AVR и ARM компании Atmel Corporation. Чтобы заставить микроконтроллер выполнять поставленные задачи, его необходимо запрограммировать с помощью определенной программы. Обычно она прилагается к принципиальной схеме и содержится в файле с расширением .hex. Чаще эту программу называют “прошивка” (firmware). Для различных микроконтроллеров пишутся разные прошивки. Любая прошивка содержит машинные коды, понятные микроконтроллеру. Но человеку трудно запомнить соответствие управляющих команд и машинных кодов. Поэтому программу вначале пишут с помощью какого-нибудь языка программирования (Assembler, С), а затем переводят в машинные коды контроллера с помощью программы-транслятора.

Урок 2 Работа


Сердцем микроконтроллера является арифметико-логическое устройство (АЛУ). АЛУ производит все арифметические и логические операции с двоичными данными. Бывают АЛУ различной разрядности: 8-, 16- или 32-разрядные. Например, если АЛУ 8-разрядное, то оно может провести операцию над двумя восьмиразрядными числами и выдать восьмиразрядный результат операции.

К арифметическим операциям относятся: сложение, вычитание, сравнение и т.д.

К логическим операциям относятся: операция умножения «И», сложения «ИЛИ», отрицания «НЕ», «исключающее ИЛИ», сдвиг вправо, сдвиг влево и т.д. Есть также операции, которые не относятся ни к логическим, ни к арифметическим, например сброс в «0» или установка в «1».

Как было сказано выше, АЛУ производит операции над числами и возвращает результат операции в виде числа. Данные числа помещаются в регистры общего назначения – своеобразную временную память. У каждого микроконтроллера количество регистров может быть разным. На структурной схеме приведен пример контроллера, у которого 32 регистра общего назначения.

Однако, для нормальной работы микроконтроллера регистров общего назначения недостаточно, т.к., например, 32 байта – очень маленький объем памяти. Для того, чтобы можно было хранить больше информации, используется оперативно-запоминающее устройство (ОЗУ). Регистры общего назначения содержат данные, с которыми АЛУ работает в данный момент, а ОЗУ – остальные.

Команды, а точнее последовательность команд, которые выполняет АЛУ, хранятся в постоянно-запоминающем устройстве (ПЗУ). Обычно это Flash-память. Данная последовательность команд является ничем иным, как программой микроконтроллера, которую создает программист. Все команды находятся в ПЗУ по определенным адресам.

Для того, чтобы достать какую-то команду из ПЗУ, необходимо обратиться к ее адресу, чем занимается программный счетчик или счетчик команд.

Данные из ПЗУ попадают в регистр команд. АЛУ постоянно «смотрит» содержимое регистра команд и если в нем появляется команда, то АЛУ сразу же начинает ее выполнять.

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

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


Урок 3 Программирование микроконтроллеров


Как известно из первого урока, каждый микроконтроллер имеет регистры общего назначения, которые представляю собой оперативную память, хранящую числа, обрабатываемые арифметико-логическим устройством (АЛУ). Причем, по ходу исполнения программы, эти числа могут изменяться: увеличиваться, уменьшаться, сбрасываться, снова загружаться и т.д. Вся память разбита на ячейки. Размер ячейки зависит от разрядности процессора 8, 16 или 32 бита. Каждой ячейке памяти соответствует свой адрес, используя который в нее можно записать число.

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

Итак, регистрам в программе на Си присваиваются имена. Когда создается какая-либо переменная, то она автоматически связывается с адресом свободной ячейки памяти.

Например:

unsigned char my_variable;

Данные, записываемые в эту переменную, будут занимать в оперативной памяти 1 байт, т.к. переменная типа unsigned char имеет размер 1 байт. Если мы захотим сложить два числа и получить результат, мы можем создать три переменных:

unsigned char var1, var2, sum;

Затем произвести арифметическую операцию сложения:

sum = var1 + var2;

Значение из регистров, которые связаны с переменными var1 и var2, поступят на обработку АЛУ. Затем АЛУ выдаст результат операции (в данном случае сложения) в ячейку памяти, связанную с переменной sum.

Помимо регистров общего назначения, в микроконтроллере есть регистры специального назначения, которые играют очень важную роль. Без них микроконтроллер был бы бессмысленной «железкой». С помощью регистров специального назначения выполняется управление функциями ядра и периферийными модулями микроконтроллера (таймеры, АЦП, аналоговые компараторы, UART, USB и т.д.), а также портами ввода-вывода. В отличие от регистров общего назначения, регистрам специального назначения строго присвоены свои адреса. Меняя значения регистров специального назначения можно управлять работой всех модулей микроконтроллера. Для примера рассмотрим карту памяти микроконтроллера PIC12F675.



Ячейки, обозначенные серым цветом – не используемая область памяти. Как видно, данный микроконтроллер имеет 64 байта ОЗУ (General Purpose Registers– регистры общего назначения) и два банка памяти. Если необходимо писать программу на ассемблере, то всегда нужно помнить в каком банке памяти находится необходимый регистр и на протяжении всей программы нужно постоянно переключаться между банками памяти. Написание программы на языке Си избавляет программиста от этой головной боли.

Итак, рассмотрим для примера регистр специального назначения GPIO. GPIO - 8-разрядный регистр порта ввода/вывода. С помощью этого регистра мы можем установить на определенных цифровых выходах микроконтроллера логическую 1 или 0. Данный регистр обычно настраивается совместно с регистром TRISIO. Регистр TRISIO определяет направление работы порта. Как было сказано в предыдущем уроке, порты микроконтроллера можно настроить для работы в качестве выходов или входов.

Микроконтроллер PIC12F675 представляет собой 8-выводную микросхему, у которой есть только 6 цифровых входов/выходов:




Рассмотрим более детально описание регистров GPIO и TRISIO:






Если записать в программе следующие строки

TRISIO = 0b00010100;

GPIO = 0b00100011;

то это означает, что пины 7,6,4 и 2 будут работать на выход. Пины 7,6 и 2 будут установлены в 1, а пин 4 будет иметь низкий уровень – 0. Биты 6 и 7, обозначенные серым цветом, в регистрах не используются и то, что будет в них записано не имеет никакого смысла. 0b00100011 – буква b данной записи обозначает двоичное представление числа.

Бывают также десятичное (привычное для нас), восьмеричное и шестнадцатеричное представление числа. В начале шестнадцатеричного числа записывается 0x, восьмеричного – цифра 0. Подробнее о системах счисления можно почитать здесь.

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



Дополнительные источники :


224 просмотра1 комментарий

Недавние посты

Смотреть все

1 commentaire


als.85
13 nov. 2018

Очень актуальная и интересная тема, грамотно подобран материал. Скину ссылку своим студентам!

J'aime
bottom of page