10. Микроконтроллер Atmega и его внешние подключения.
Контроллером в технике регулирования считается управляющее устройство, осуществляющее регулирующие и контролирующие функции в системе. Как правило это вычилительная машина. С развитием технологий различные компоненты этой машины, такие как процессорное ядро, различные виды памяти, АЦП, таймеры и др. становились миниатюрнее и стало возможным включать их в одну интегральную микросхему или их малый набор. Микроконтроллер – контр., реализованный на одном кристалле.
AVR микроконтроллеры фирмы Atmel имеют улучшенную RISС архитектуру.
Микроконтроллер состоит из трех элементов: процессорного ядра, памяти и набора функциональных блоков различного назначения, связанных системными шинами.
Процессорное ядро является основой микроконтроллера. Оно выполняет все арифметические операции, управляет работой всех остальных элементов системы.
В памяти хранится программа работы микроконтроллера, исходные данные и все промежуточные результаты вычислений.
Функциональные блоки обеспечивают связь микроконтроллера с внешним миром. Для процессорного ядра любой функ. блок представляется в виде одного или нескольких регистров. Каждый регистр имеет свой оригинальный адрес.
Внешние подключения условно можно разделить на выводы питания и информационные выводы. Информационные выводы включают в себя 4 порта ввода-вывода, выводы подключения кварцевого резонатора, вывод сброса. Контакты портов ввода-вывода могут быть использованы в качестве параллельных портов либо другими функциональными блоками, контакты которых объединены с контактами портов. Все выводы портов имеют индивидуальные подтягивающие резисторы. Для подключения этих резисторов с регистре SFIOR предусмотрен бит PUD.
Для повышения стабильности используется внешний тактовый генератор. Схема подключении приведена на рисунке.
Емкость С=13,,43пФ. Для выбора синхронизации используются биты CRSEL0-3.
12. Сторожевой таймер
Сторожевой таймер синхронизирован от отдельного внутреннего генератора на кристалле, работающего с частотой 1МГц (при напряжении питания 5В). Задержка сброса устанавливается с помощью предделителя (Prescaler). Настройка предделителя осуществляется установкой или сбросом битов WDP0…WDP2 регистра управления сторожевым таймером WDTCR. По истечении установленного времени задержки сторожевой таймер подает сигнал сброса на микроконтроллер.
Интервалы задержки сторожевого таймера
WDP2 | WDP1 | WDP0 | Количество циклов | Задержка сброса |
0 | 0 | 0 | 16К | 15ms |
0 | 0 | 1 | 32К | 30ms |
0 | 1 | 0 | 64К | 60ms |
0 | 1 | 1 | 128К | 0,12s |
1 | 0 | 0 | 256К | 0,24s |
1 | 0 | 1 | 512К | 0,49s |
1 | 1 | 0 | 1,024К | 0,97s |
1 | 1 | 1 | 2,048К | 1,9s |
Сброс может быть предотвращен инструкцией wdr.
Бит WDE в регистре WDTCR позволяет подключить или отключить сторожевой таймер. При разрешении работы сторожевого таймера его состояние не определено и прежде, чем разрешать его включение, необходимо выполнить инструкцию wdr. В ином случае контроллер может быть сброшен прежде, чем будет выполнена команда wdr, прописанная после разрешения. Для предотвращения случайных ошибок запрет сторожевого таймера должен оформляться специальной процедурой выключения.
13. Програмно_управляемый_обмен
Порты ввода - предназначены для связи микроконтроллера с различными объектами и могут реализовывать различные алгоритмы обмена данными : асинхронный программный обмен , синхронный обмен , ввод - с сигналами квитирования . Обмен данными между портами и объектами обеспечивается специальными подпрограммами – драйверами , создаваемыми индивидуально для каждого объекта .
АСИНХРОННЫЙ ОБМЕН
В режиме асинхронного программного обмена ввод и вывод данных производится по программе в моменты выполнения инструкций ввода и вывода данных. Предполагается, что объект всегда готов к обмену: при вводе – данные в момент выполнения инструкции in присутствуют на линиях порта, при выводе – данные будут прочитаны с линий порта до следующего вывода. Например , микроконтроллер ATmega 63 осуществляет асинхронный вывод данных при выполнении фрагмента программы:
.equ porta = $B ;
.equ ddra = $A ;
.cseg
ldi r 6,$FF ; $FF в r 6
out ddra, r 6 ; порта А на вывод
out porta, r0 ; данных из регистра r0 в порт A.
Время выполнения команды вывода равно двум периодам тактового сигнала . Тот же микроконтроллер в течении двух тактов введет данные с линий порта при выполнении фрагмента программы :
.equ pina = $9 ;
.cseg
in r0, pina ; ввод данных из порта pina в регистр r0.
По адресу $9 в пространстве ввода - микроконтроллера размещен регистр
pina, с входных линий которого и будут взяты данные во время выполнения инструкции .
СИМПЛЕКСНЫЙ ОБМЕНСимплексным считается однонаправленный обмен данными . Такой обмен обычно является синхронным . В этом случае каждое изменение данных на линиях порта сопровождается сигналом синхронизации (). Строб генерируется источником данных и предназначается для задания момента записи данных в регистр приемника . При выводе данных сигнал строба должен сформировать микроконтроллер , используя для этого специальные линии шины управления или отдельные биты портов ввода -. На рис . 9.2 показан вариант соединения микроконтроллера ATmega 63 c посимвольным принтером , имеющим 8-битный вход для приема данных DATA, выход сигнала готовности READY и вход стробирования #STB. Активным на входе стробирования является сигнал низкого уровня . Порт PORTA микроконтроллера и бит PB6 порта PORTB программируются на вывод данных , бит PB2 порта PORTB на ввод . Подпрограмма вывода должна : осуществить проверку готовности принтера ( сигнала готовности принтера READY и его анализ ), при обнаружении сигнала READY=1 вывести данные в порт PORT , подтвердить вывод данных выводом сигнала стробирования #STB=0 для записи данных в принтер . Если принтер не готов к обмену микроконтроллер через заданный интервал времени повторяет операцию.
Рис . 9.2. Подключение принтера к микроконтроллеру
Режим синхронного ввода позволяет точно задать момент считывания данных с объекта . В этом режиме сигнал стробирования , подтверждающий готовность данных , поступает с объекта на микроконтроллер . При появлении строба микроконтроллер должен осуществить ввод данных с порта.
ПОЛУДУПЛЕКСНЫЙ ОБМЕН
Полудуплексным считается двунаправленный синхронный обмен , при котором в любой момент времени передача данных может производиться только в одном направлении . Направление передачи данных порта меняется в процессе работы в зависимости от решаемой в текущий момент задачи . На рис . 9.3 изображен вариант соединения микроконтроллера ATmega 63 с объектом для обмена данными в полудуплексном режиме . В схеме на рис . 9.3 передача данных в параллельном формате осуществляется по линиям порта PORTA. Для выдачи и приема четырех сигналов управления обменом ( квитирования ): строб ввода #STB IN (Strobe Input), строб вывода #STB OUT (Strobe Out), подтверждение ввода #ACK IN (Acknowledge Input) и подтверждение вывода #ACK OUT (Acknowledge Out), использованы две линии порта PORTB и входы запросов на прерывания INT0 и INT . При поступлении сигнала #STB IN = 0 контроллер должен выставить сигнал подтверждения #ACK IN = 0 и осуществить запись во входной регистр порта PORTA.. При низком уровне сигнала ASK IN объекту запрещается формировать новый сигнал #STB IN. По окончании записи контроллер снимает сигнал #ACK IN, разрешая повторную передачу данных . Работа микроконтроллера в режиме вывода аналогична . Микроконтроллер выводит данные в порт PORTA, подтверждая вывод сигналом #STB OUT = 0. Объект формирует сигнал подтверждения #ACK OUT = 0, сообщая контроллеру о готовности к приему данных . При снятии сигнала #ACK OUT контроллер должен снять сигнал #STB OUT и может вновь перейти к выводу данных . Одновременная передача данных в двух направлениях при полудуплексном обмене невозможна .
ДУПЛЕКСНЫЙ ОБМЕН
Дуплексным считается двунаправленный синхронный обмен , при котором в любой момент времени возможна передача данных в двух направлениях . В этом случае для передачи данных в каждом направлении выделяется свой однонаправленный порт . На рис . 9.4 изображен вариант соединения микроконтроллера ATmega 1 63 с объектом для обмена данными в дуплексном режиме
Рис . 9.3. Подключение микроконтроллера при полудуплексном обмене
Рис . 9.4. Подключение микроконтроллера при дуплексном обмене В схеме на рис . 9.4 порт PORTA работает на ввод данных , порт PORT – на вывод , а линии PC0 и PC порта PORTC использованы для вывода сигналов квитирования #ACK IN и #ACK OUT. Для ввода сигналов квитирования от объекта #STB IN и #ACK OUT использованы входы запросов на прерывания INT0 и INT . При таком подключении задача ввода данных в микроконтроллер получает больший приоритет чем задача вывода .
14.Порты ввода-вывода предназначены для связи микроконтроллера с различными объектами и могут реализовывать различные алгоритмы обмена данными:
1)Асинхронный программный обмен 2)Синхронный обмен 3)Ввод-вывод с сигналами квитирования.
Обмен данными между портами и объектами обеспечивается специальными подпрограммами – драйверами, создаваемыми индивидуально для каждого объекта.
Асинхронный обмен.
В режиме асинхронного программного обмена ввод и вывод данных производится по программе в моменты выполнения инструкций ввода и вывода данных. Предполагается, что объект всегда готов к обмену: при вводе – данные в момент выполнения инструкции in присутствуют на линиях порта, при выводе – данные будут прочитаны с линий порта до следующего вывода.
Пример программы для осуществления асинхронного вывода данных для Atmega163:
.equ porta=$1B; .equ ddra=$1A; .cseg; ldi r16,$FF;запись $FF в r16
out ddra,r16 ; включение порта А на вывод out porta,r0 ; вывод данных из регистра r0 в порт А.
Ввод данных с линий порта.
.equ pina=$19 .cseg in r0pina ; ввод данных из порта pina в регистр r0.
По адресу $19 в пространстве ввода – вывода микроконтроллера размещен регистр pina, с входных линий которого и будут взяты данные во время выполнения инструкции.
Симплексный обмен.
Симплексным считается однонаправленный обмен данными. Такой обмен обычно является синхронным. В этом случае каждое изменение данных на линиях порта сопровождается сигналом синхронизации (стробом). Строб генерируется источником данных и предназначен для задания момента записи данных в регистр приемника.При выводе данных сигнал строба должен сформировать микроконтроллер, используя для этого специальные линии шины управления или отдельные биты портов ввода – вывода.
Вариант соединения Atmega163 с посимвольным принтером, имеющим 8-битный вход для приема данных DATA, выход сигнала готовности READY и вход стробирования #STB. Активным на входе стробирования является сигнал низкого уровня. Порт А микроконтроллера и бит РВ6 порта PORTB программируются на вывод данных, бит PB2 порта PORTB на ввод. Подпрограмма вывода должна: осуществлять проверку готовности принтера, при обнаружении сигнала READY=1 вывести данные в порт PORTА, подтвердить вывод данных выводом сигнала стробирования #STB=0 для записи данных в принтер. Если принтер не готов к обмену микроконтроллер через заданный интервал времени повторяет операцию.
Режим синхронного ввода данных позволяет точно задать момент считывания данных с объекта. В этом режиме сигнал стробирования, подтверждающий готовность данных поступает с объекта в микроконтроллер. При появлении строба микроконтроллер должен осуществить ввод данных с порта.
Полудуплексный обмен.
Полудуплексным считается двунаправленный синхронный обмен, при котором в любой момент времени передача данных может производится только в одном направлении. Направление передачи данных порта меняется в процессе работы в зависимости от решаемой в текущий момент задачи. Пример: передача данных в параллельном формате осуществляется по линиям порта PORTA. Для выдачи и приема четырех сигналов управления обменом (сигналы квитирования): использованы две линии порта PORTB и входы запросов на прерывания INTO и INT1. При поступлении сигнала #STB IN=0 контроллер должен выставить сигнал подтверждения #ACK IN=0 и осуществить запись во входной регистр порта PORTA. При низком уровне сигнала #ACK IN объекта запрещается формировать новый сигнал #STB IN. По окончании записи контроллер снимает сигнал #ACK IN, разрешая повторную передачу данных. Работа микроконтроллера в режиме вывода аналогична. Микроконтроллер выводит данные в порт PORTA, подтверждая вывод сигналом #STB OUT=0. Объект формирует сигнал подтверждения #ACK OUT=0, сообщая контроллеру о готовности к приему данных. При снятии сигнала #ACK OUT контроллер должен снять сигнал #STB OUTи может вновь перейти к выводу данных.
Одновременная передача данных в двух направлениях при полудуплексном обмене невозможна.
Дуплексный обмен.
Дуплексным считается двунаправленный синхронный обмен, при котором в любой момент времени возможна передача данных в двух направлениях. В этом случае для передачи данных в каждом направлении выделяется свой однонаправленный порт. Порт PORTA работает на ввод данных, порт PORTB – на вывод, а линии PC0 и PC1 порта PORTC использованы для вывода сигналов квитирования #ACK IN и #STB OUT. Для ввода сигналов квитирования от объекта #STB IN и #ACK OUT использованы входы запросов на прерывания INT0 и INT1. При таком подключении задача ввода данных в микроконтроллер получает больший приоритет, чем задача вывода.
15. Одной из разновидностей программно-управляемого обмена данными с ВУ является обмен с прерыванием программы, отличающийся от асинхронного программно-управляемого обмена тем, что переход к выполнению команд, физически реализующих обмен данными, осуществляется с помощью специальных аппаратных средств. Команды обмена данными в этом случае выделяют в отдельный программный модуль - подпрограмму обработки прерывания. Задачей обработки прерывания как раз и является приостановка выполнения одной программы (ее еще называют основной программой) и передача управления подпрограмме обработки прерывания. Действия, выполняемые при этом, как правило, те же, что и при обращении к подпрограмме. Только при обращении к подпрограмме они инициируются командой, а при обработке прерывания - управляющим сигналом от ВУ, который называют "Запрос на прерывание" или "Требование прерывания".
Эта важная особенность обмена с прерыванием программы позволяет организовать обмен данными с ВУ в произвольные моменты времени, не зависящие от выполняемой программы. Таким образом, появляется возможность обмена данными с ВУ в реальном масштабе времени, определяемом внешней средой. Обмен с прерыванием программы существенным образом экономит время микропроцессора, затрачиваемое на обмен. Это происходит за счет того, что исчезает необходимость в организации программных циклов ожидания готовности ВУ, на выполнение которых тратится значительное время, особенно при обмене с медленными ВУ.
Прерывание программы по требованию ВУ не должно оказывать на прерванную программу никакого влияния кроме увеличения времени ее выполнения за счет приостановки на время выполнения подпрограммы обработки прерывания. Поскольку для выполнения подпрограммы обработки прерывания используются различные регистры, то информацию, содержащуюся в них в момент прерывания, необходимо сохранить для последующего возврата в прерванную программу.
Формирование сигналов прерываний - запросов ВУ на обслуживание происходит в контроллерах соответствующих ВУ. В простейших случаях в качестве сигнала прерывания может использоваться сигнал "Готовность ВУ", поступающий из контроллера ВУ. Однако такое простое решение обладает существенным недостатком - процессор не имеет возможности управлять прерываниями, т. е. разрешать или запрещать их для отдельных ВУ. В результате организация обмена данными в режиме прерывания с несколькими ВУ существенно усложняется.
Для решения этой проблемы регистр состояния и управления контроллера ВУ (рис. 3.11) дополняют еще одним разрядом - "Разрешение прерывания". Запись 1 или 0 в разряд "Разрешение прерывания" производится программным путем по одной из линий шины данных системного интерфейса. Управляющий сигнал системного интерфейса "Запрос на прерывание" формируется с помощью схемы совпадения только при наличии единиц в разрядах "Готовность ВУ" и "Разрешение прерывания" регистра состояния и управления контроллера.
Аналогичным путем решается проблемам управления прерываниями в микроконтроллера, в целом. Для этого в регистре состояния выделяется разряд, содержимое которого определяет, разрешены или запрещены прерывания от внешних устройств. Значение этого разряда может устанавливаться программным путем.
В микроЭВМ обычно используется одноуровневая система прерываний, т. е. сигналы "Запрос на прерывание" от всех ВУ поступают на один вход процессора. Поэтому возникает проблема идентификации ВУ, запросившего обслуживание, и реализации заданной очередности (приоритета) обслуживания ВУ при одновременном поступлении нескольких сигналов прерывания. Существуют два основных способа идентификации ВУ, запросивших обслуживания:
- программный опрос регистров состояния (разряд "Готовность ВУ") контроллеров всех ВУ;
- использование векторов прерывания.
Организация прерываний с программным опросом готовности предполагает наличие в памяти микроконтроллера единой подпрограммы обслуживания прерываний от всех внешних устройств.
Обслуживание ВУ с помощью единой подпрограммы обработки прерываний производится следующим образом. В конце последнего машинного цикла выполнения очередной команды основной программы проверяется наличие требования прерывания от ВУ. Если сигнал прерывания есть и в микропроцессоре прерывание разрешено, то он переключается на выполнение подпрограммы обработки прерываний.
После сохранения содержимого регистров, используемых в подпрограмме, начинается последовательный опрос регистров состояния контроллеров всех ВУ, работающих в режиме прерывания. Как только подпрограмма обнаружит готовое к обмену ВУ, сразу выполняются действия по его обслуживанию. Завершается подпрограмма обработки прерывания после опроса готовности всех ВУ и восстановления содержимого регистров процессора.
Приоритет ВУ с программным опросом готовности внешнего устройства однозначно определяется порядком их опроса в подпрограмме обработки прерываний. Чем раньше в подпрограмме опрашивается готовность ВУ, тем меньше время реакции на его запрос и выше приоритет. Необходимость проверки готовности всех внешних устройств существенно увеличивает время обслуживания тех ВУ, которые опрашиваются последними. Это является основным недостатком рассматриваемого способа организации прерываний. Поэтому обслуживание прерываний с опросом готовности ВУ используется только в тех случаях, когда отсутствуют жесткие требования на время обработки сигналов прерывания внешних устройств.
Организация системы прерываний с использованием векторов прерываний позволяет устранить указанный недостаток. При такой организации системы прерываний ВУ, запросившее обслуживания, само идентифицирует себя с помощью вектора прерывания - адреса ячейки основной памяти, в которой хранится либо первая команда подпрограммы обслуживания прерывания данного ВУ, либо адрес начала такой подпрограммы. Таким образом, процессор, получив вектор прерывания, сразу переключается на выполнение требуемой подпрограммы обработки прерывания. В микроконтроллерах с векторной системой прерывания каждое ВУ должно иметь собственную подпрограмму обработки прерывания.
Различают векторные системы с интерфейсным и внеинтерфейсным вектором. В первом случае вектор прерывания формирует контроллер ВУ, запросившего обслуживания, во втором - контроллер прерываний, общий для всех устройств, работающих в режиме прерываний.
0 комментариев