- •«Инструментальные средства разработки аппаратно-программных систем»
- •Оглавление
- •7 Инструментальные средства разработки систем управления на
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Ассемблер микроконтроллеров avr
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •6 Программирование микроконтроллеров aТmega16
- •7 Инструментальные средства разработки сисТем управления на микроконтроллерах aTmega16
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
5.4 Ожидание внешних событий
Событием будем считать изменение уровня внешнего сигнала, поступающего в разряд микроконтроллера, с нулевого на единичный или наоборот. Кроме того, событием считают импульс. Если в исходном состоянии внешний сигнал имеет уровень логического нуля, то такой импульс называют положительным. Если в исходном состоянии уровень сигнала – логическая единица, то такой импульс называют отрицательным. В реальных встроенных системах событием является замыкание контактов механического датчика, фронт / срез импульса или импульс от импульсного датчика и др. . После определения наступления события выполняются некоторые действия.
Ожидание нулевого уровня на входе PINA,7 микроконтроллера производится процедурой:
WAIT_0: SBIC PINA,7 ;если разряд порта установлен в 1, то
RJMP WAIT_0 ; переход на следующую пробу состояния
; PINA,7
По команде SBIC PINA,7 пропускается следующая команда, если значение бита PINA,7 равно нулю. Если значение бита равно единице, то выполняется следующая команда. Итак, если в разряде PINA,7 единица, то выполняется команда перехода к следующей пробе RJMP WAIT_0 и т.д., т.е. выполняется непрерывное сканирование входа. Когда на контакте порта установится уровень нуля, пропускается команда RJMP WAIT_0, т.е. произодится выполнение последующих команд.
Ожидание единичного уровня на входе микроконтроллера производится процедурой:
WAIT_1: SBIS PINA,7 ;если разряд порта сброшен, то
RJMP WAIT_1 ;переход на следующую пробу
По команде SBIS PINA,7 пропускается следующая команда, если значение бита PINA,7 равно единице. Если значение бита равно нулю, то выполняется следующая команда. Итак, если в разряде PINA,7 нуль, то выполняется команда перехода к следующей пробе RJMP WAIT_1 и т.д., т.е. выполняется непрерывное сканирование входа. Когда на контакте порта установится уровень единицы, пропускается команда RJMP WAIT_1, т.е. производится выполнение последующих команд.
Очевидно, что для ожидания отрицательного импульса необходимо использовать обе процедуры: сначала ожидать уровень нуля, а затем ожидать уровень единицы. Для ожидания положительного импульса процедуры необходимо поменять местами.
Если импульсы подаются от механических контактов, то после обнаружения замкнутого (уровень нуля), и разомкнутого (уровень единицы), состояний контакта следует вызвать подпрограмму задержки, которая задает время, большее, чем время дребезга.
5.5 Обработка динамического дисплея
Для вывода цифровой и символьной информации в встроенных системах используются семисегментные и матричные индикаторы. Семисегментные индикаторы бывают жидкокристаллического и светодиодного типов.
С ветодиодный семисегментный индикатор представляет собой восемь светодиодов с соединенными анодами. Сегменты обозначаются буквами A,B,C,D,E,F,G,H на рис. 1.
Error: Reference source not found
Рисунок 59
Свечение сегмента возникает при подаче на общий вывод положительного напряжения, а на катод сегмента - нулевого.
Существует два способа организации интерфейса с дисплеем: статический и динамический. Недостатком первого является необходимость большого количества линий управления (количество разрядов портов микроконтроллера) - по 8 на каждый индикатор.
При динамическом способе индикации требуется количество разрядов равное сумме количества сегментов и количества разрядов.
Динамический способ является импульсным и основан на том, что если «мерцание» производится с частотой 50Гц и более, то свечение представляется человеку постоянным. Этот способ требует минимальных аппаратных затрат, обработка динамического дисплея, в том числе и преобразование кодов производится программно.
В динамическом дисплее одноименные сегменты всех индикаторов включены параллельно, образуя сегментную шину, а общие аноды индикаторов образуют шину выбора индикаторов. Таким образом, требуется значительно меньшее количество линий, чем при статическом методе. Обработка дисплея заключается в поочерёдной выдаче на шину сегментов позиционных семисегментных кодов символов и синхронным включением (выбором ) индикаторов. Схема четырехразрядного динамического индикатора представлена на рис.60. Сегментная шина подключена к порту С микроконтроллера, а четыре младших разряда порта D являются разрядами выбора разрядов индикатора. Очевидно, что индикатор должен обрабатываться программой. Исходное состояние разрядов выбора микроконтроллера PD.0-PD.3 единичное. Этими уровнями все четыре транзистора закрыты, аноды разрядов индикатора отключены от источника питания и индикаторы не светятся. Программа выдает в порт С семисегментный код символа для правого (младшего) разряда индикатор, а разряд РD.0 устанавливает в нулевое состояние. Происходит включение младшего разряда индикатора (нулевой уровень открывает транзистор VT4). Свечение производится в течение
Рисунок 60
некоторого времени. Затем программой разряд PD.0 устанавливается в состояние логической единицы, т.е. производится выключение младшего разряда индикатора. Далее выдается в порт С семисегментный код для следующего разряда индикатора, и обнуляется разряд PD.1 микроконтроллера. Открывается транзистор VT3 и происходит включение следующего разряда индикатора. Это состояние удерживается в течение некоторого временного интервала. Далее гасится разряд индикатора и т.д.
Таким образом, сигнал на одной линии выбора представляет собой импульсную последовательность со скважностью равной числу индикаторов.
При частоте «мерцания» 50Гц период импульсов равен 20мс.
На рис.61 представлены временные диаграммы сигналов выбора разрядов для четырехразрядного дисплея. Время свечения одного индикатора
5мс. Характер свечения разрядов индикатора импульсный (мерцание). Если частота мерцания выше 25 Гц, то глаз человека не замечает мерцания.
Так как глаз человека «усредняет» силу света импульсного характера, то для получения нормальной яркости амплитуда тока протекающего через сегменты, должна быть большей, чем при статической индикации. Характеристика зависимости силы света от величины тока является нелинейной.
Рисунок 61
Амплитуда импульса тока в цепи выбора индикатора должна быть в 8 раз (по числу сегментов) больше амплитуды тока в сегменте.
Функция программы – обработчика дисплея: вывод в режиме динамической индикации данных из четырех ячеек ОЗУ, преобразованных табличным способом из двоичного кода в семисегментный, в порт микроконтроллера, к которому подключен четырехразрядный индикатор. Ниже приведен текст программы обработчика дисплея.
.include "m16def.inc"
;***********Definition********************************
.def count = r20
.org 0 ldi r16,low(RAMEND) ;Установка указателя стека на
out SPL,r16 ;максимальный адрес SRAM ATmega16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out portd,r16 ;Погасить все разряды дисплея
out ddrc,r16 ;настройка портов на вывод
out ddrd,r16
Cikl: ldi count,4 ; счетчик числа разрядов индикатора
ldi XH,$00 ;адрес первой ячейки области ОЗУ, в которой
;хранятся данные (ячейки $60-$63)
ldi XL,$60
ldi r20,0xfe ;байт выборки младшего разряда индикатора
Nxt_razr: Ldi r31,High(Tab_code*2);загрузка старшей и младшей
ldi r30,Low(Tab_code*2) ;половин адреса начала таблицы
;кодов символов
ld r1,x+ ;загрузить в R1 первый байт данных из ячейки
;памяти, адрес которой находится в Х и
;подготовить адрес след. ячейки ОЗУ
add r30,r1 ;сложить содержимое регистров R30 и R1 для
;получения адреса ячейки таблицы
;перекодировки, в которой находится
;семисегментный код символа соответствующий
;содержимому отображаемой в данный момент
;ячейки дисплея
ldi r16,0
adc r31,r16;если адрес таблицы больше чем 255, то учтем
;перенос в регистр R31
lpm ;загрузить в R0 семисегментный код из таблицы ;перекодировки (преобр. двоичн. кода в семисегментный)
ldi r16,0xff;погасить разряд индикатора перед загрузкой в порт
out portd,r16;семисегментного кода
out portc,r0 ;выдача семисегм. кода в порт
out portd,r20 ;включить разряд индикатора
rol r20 ;байт выборки следующего разряда индикатора
rcall Time_light ;Задержка свечения разряда индикатора
dec count ;Переход на следующее знач. счетчика
;циклов дисплея
brne Nxt_razr ;След разряд индикатора
rjmp Cikl
Time_light: ;*** Задержка 3,75 мс
ldi r16,2
m3: ldi r17,100
m2: ldi r18,100
m1: dec r18
brne m1
dec r17
brne m2
dec r16
brne m3
ret
Tab_code:
.Db 3,$9f,$25,$d,$99,$49,$41,$1f,1,9,$11,$c1,$63,$85,$61,$71
Таблица 13
Байт данных |
A |
B |
C |
D |
E |
F |
G |
H |
НЕХ -код символа |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
3 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
$9F |
2 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
$25 |
3 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
$D |
4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
$99 |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
$49 |
6 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
$41 |
7 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
$1F |
8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
9 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
9 |
Преобразование двоичного кода данных в семисегментный код производится табличным способом. В программной памяти микроконтроллера директивой .DB размещается таблица семисегментных кодов, соответствующих числовым значениям 0,1,2,… . Значения семисегментных кодов в таблице соответсвуют пространственному размещению сегментов в индикаторе и схеме подключения сегментов к порту С. Например, для того чтобы на индикаторе было изображение символа 0 (включены сегменты ABCDEF), необходимо в порт С поместить значение 00000011 или 3. (Напомним, что сегмент будет включен, если на катод подан уровень логического нуля).
Могут быть составлены семисегментные коды для других значений.