Принципы считывания данных с матричной клавиатуры с помощью микроконтроллера AVR АTmega128 в режиме программного опроса. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Принципы считывания данных с матричной клавиатуры с помощью микроконтроллера AVR АTmega128 в режиме программного опроса.



 

При использовании большого количества кнопок управления целесообразно применить матричную схему подключения клавиатуры, сходную с приведенной на рисунке 3.4. В данной схеме 12-ти клавишная клавиатура 3´4 соединяется выводами с портом ввода/вывода Е. Причем, линии 4 – 6 порта Е настроены как выходные и обозначаются соответственно PORTE.4 – PORTE.6, а линии 0 – 3 – как входные (PINE.0 – PINE.3). Горизонтальные линии матрицы через токоограничительные резисторы подключены к положительному полюсу источника питания (+5 В).

Нажатие одной из клавиш замыкает в соответствующей позиции горизонтальную и вертикальную сигнальную линии. Если на вертикальную линию был подан уровень напряжения, соответствующий “логическому нулю”, то при нажатии клавиши на горизонтальной линии также установится низкий уровень напряжения. Алгоритм опроса нажатия клавиши сводится к поочередной установке низких уровней напряжения на вертикальных линиях (PORTE.4 – PORTE.6) матрицы и считывании информации об уровне сигнала на горизонтальных линиях (PINE.0 – PINE.3).

 

 

Рисунок 3.4 – Принципиальная схема подключения 12-и кнопочной (3´4) клавиатуры к микроконтроллеру AVR АТMEGA 128 через порт ввода/вывода Е

Пример:

Задание. Проверить нажатия одной из клавиш первого и второго (крайних справа) столбцов матричной клавиатуры, схема подключения которой приведена на рисунке 3.4 (адреса портов указаны в таблице 1.1).

 

Алгоритм решения задачи.

 

1. START.

2. Установка начальных данных.

3. Настройка линий строк клавиатуры на ввод, линий столбцов – на вывод.

4. Установить уровень напряжений на линии первого столбца в 0.

5. Считать данные с входных линий строк в РОН.

6. Установить уровень напряжений на линии второго столбца в 0.

7. Считать данные с входных линий строк в РОН.

8. Сравнить значение, полученное из первого столбца с 0Fh. Если нажата одна или несколько клавиш, то перейти в п. 10

9. Сравнить значение, полученное из второго столбца с 0Fh. Если нажата одна или несколько клавиш, то перейти в п. 10

10. STOP.

 

 

Программа на языке ассемблера:

...

ldi r19, 0b11110000; загрузить константу F0h в r19;

ldi r20, 0b11100000; загрузить константу Е0h в r20;

ldi r21, 0b11010000; загрузить константу D0h в r21;

ldi r22, 0b00001111; загрузить константу 0Fh для маскирования

; в r16

out 02, r19; настройка линий E0-3 на ввод, а E4-7

; на вывод

lbl1:; метка перехода для повторения опроса

out $03, r20; установить в 0 уровень напряжения на линии

; PORTE.7, соответствующей первому столбцу

; клавиатуры

nop; установить задержку в один такт

in r17, 01; считать данные из регистра PINE в r17

out $03, r21; установить в 0 уровень напряжения на линии

; PORTE.6, соответствующей второму столбцу

; клавиатуры

nop; установить задержку в один такт;

in r18, $01; считать данные из регистра PINE в r18

and r17, r22; обнулить неинформативную старшую

; тетраду в r17;

and r18,r22; обнулить неинформативную старшую

; тетраду в r18;

cp r17, r22; сравнить значение в регистре r17 со

; значением 0Fh

brne lbl2; выполнить переход на метку lbl2, если

; r18 ≠ 0Fh (одна или несколько клавиш первого

; столбца клавиатуры нажаты)

cp r18, r22; сравнить значение в регистре r18 со

; значением 0Fh.

brne lbl2; выполнить переход на метку lbl2, если

; r18 ≠ 0Fh (одна или несколько клавиш второго

; столбца клавиатуры нажаты)

rjmp lbl1; переход на метку lbl1 для повторения

; процедуры опроса

lbl2:; метка выхода из процедуры опроса.

...

 

Если в результате процедуры опроса в битах младших тетрад регистров r17 и/или r18 будут находиться 0, то это будет свидетельствовать о нажатии клавиш, позиции которых можно определить исходя из схемы, изображенной на рисунке 3.2, и номеров обнуленных разрядов в тетрадах.

Процедуру опроса матричной клавиатуры 3´4 необходимо выполнять только с использованием ассемблерных команд, которые (в отличие от их эквивалентов на языке С) не преобразуют значения битов в старших тетрадах порта Е.

 

3.2.3 Принципы программной генерации временных интервалов

 

При разработке различных приложений для управления устройствами в реальном масштабе времени возникает необходимость организации временной задержки. В микроконтроллерах её можно реализовать программно или с использованием таймеров/счётчиков. Одним из вариантов программного осуществления задержки является многократное повторение определённого участка программного кода. В этом случае необходимо вычислить время выполнения каждой команды входящей в состав программного блока задержки. Это время зависит от рабочей частоты задающего генератора процессора. Рабочая частота может быть изменена посредством установки регистра управления предделителем (XDIV) тактового сигнала (Таблица 3.1).

Регистр XDIV используется для установления коэффициента деления частоты кварцевого генератора в диапазоне от 1 до 129.

 

Таблица 3.1 – Формат регистра управления XDIV

XDIVEN XDIV6 XDIV5 XDIV4 XDIV3 XDIV2 XDIV1 XDIV0

 

XDIVEN – бит разрешения деления частоты генератора XTAL.

При XDIVEN:= 1 тактовая частота для CPU и всей периферии делится в соответствии с установленными битами XDIV6 – XDIV0. Этот бит в случае необходимости может быть установлен и очищен в процессе выполнения программы.

XDIV6–XDIV0 – биты выбора коэффициента деления, определяющие

тактовую частоту микроконтроллера. Эти биты устанавливают коэффициент деления тактовой частоты при установленном бите XDIVEN, а при сброшенном в 0 - содержимое разрядов XDIV6–XDIV0 игнорируется.

Если десятичное значение этих семи битов обозначить через d, то результирующая тактовая частота CPU будет определяться выражением

 

 

Временная задержка так же может быть осуществлена при помощи таймеров/счётчиков (Т/С). Микроконтроллеры ATmega128 оснащены четырьмя таймерами/счетчиками общего назначения, которые будут подробно рассмотрены в следующей лабораторной работе.

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

 

Пример:

Задание. Обеспечить программно мигание светодиодов, подключённых к порту D микроконтроллера ATmega128 с частотой f=5Гц. Задержку выполнить программным способом.

 

Алгоритм решения задачи.

 

1. START.

2. Начальная установка и настройка портов.

3. Включить блок светодиодов.

4. Вызов подпрограммы задержки delay.

5. Выключить блок светодиодов.

6. Вызов подпрограммы задержки delay.

7. Идти в п. 3.

8. STOP.

 

Программа на языке ассемблера:

 

.ORG 0080h; смещение основной программы

ldi r25, 0b10000001; загрузка значения настройки предделителя

out $3c, r25; включение предделителя на 128

ldi r19, $ff; загрузка значения настройки порта D

ldi r20, $00; загрузка в r20 числа, соответствующего

; зажжению всех светодиодов

out $11, r19; настройка порта D работает на вывод

loop1: out $12, r19; погасить светодиоды

call delay; вызов подпрограммы задержки

out $12, r20; зажечь светодиоды

call delay; вызов подпрограммы задержки

jmp loop1; переход по метке loop1

 

Алгоритм задержки delay.

 

1. START.

2. Инициализация счётчика №1.

3. Инициализация счётчика №2.

4. Декремент счётчика циклов №2.

5. Если значение счётчика №2 не равно нулю, то идти в п. 4.

6. Декремент счётчика циклов №1.

7. Если значение счётчика №1 не равно нулю, то идти в п. 3.

8. STOP.

 

При тактовой частоте задающего генератора 11,0592 МГц и при использовании предделителя на 128 (XDIV:= 0b10000001) один машинный цикл будет выполняться за 0,0116мс. Для выполнения мигания с частотой требуется задержка

 

 

В зависимости от значений счётчиков №1 и №2 (переменные А и В) подпрограмма delay будет выполняться за машинных циклов. Для временной задержки значение переменных А и В вычисляется из выражения

 

 

Решение последнего уравнения относительно двух неизвестных А и В выполняется путём задания одному из неизвестных максимального значения, например В = FFh. Тогда А определяется из выражения:

 

 

Программа delay на языке ассемблера:

 

.ORG 00D0h; смещение программы задержки

delay: ldi r17, $10; загрузка значения $10 в РОН

loop2: ldi r16, $FF; загрузка значения $FF в РОН

loop3: dec r16; декремент счетчика №2

brne loop3; переход на метку loop3 если №2!= 0

dec r17; декремент счетчика №1

brne loop2; переход на метку loop2 если №1!= 0

ret; возврат в точку вызова

 

Примеры заданий для выполнения лабораторной работы №3 представлены в таблице 3.2.

 

Таблица 3.2 – Примеры заданий для выполнения лабораторной работы №3

Текстовая формулировка заданий
1. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F1 выполнять в бесконечном цикле последовательное включение и выключение 1-го, 3-го и 6-го светодиодов с интервалом 2 с. Выход из цикла обеспечить нажатием кнопки 1 матричной клавиатуры.
2. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F3 выполнять в бесконечном цикле последовательное включение 2-го, 4-го и 6-го светодиодов с интервалом 1,5 с. Выход из цикла обеспечить нажатием кнопки 2 матричной клавиатуры.
3. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F2 выполнять в бесконечном цикле последовательное включение/выключение 1-го, 2-го, 3-го и 4-го светодиодов с интервалом 1 с. Выход из цикла обеспечить нажатием кнопки 3 матричной клавиатуры.
4. Алгоритмически и программно реализовать задачу, предусматри-вающую после одновременного нажатия кнопок F1 и F2 выполнять в бесконечном цикле одновременное включение 1-го, 2-го, 7-го и 8-го светодиодов с длительностью свечения 2 с. Выход из цикла обеспечить нажатием кнопки 4 матричной клавиатуры.
5. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F1 выполнять в бесконечном цикле параллельное включение 1-го, 2-го и 8-го светодиодов с длительностью свечения 1 с и временем нахождения в погашенном состоянии 2 с. Выход из цикла обеспечить нажатием кнопки 5 матричной клавиатуры.
6. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F2 выполнять в бесконечном цикле последовательное включение/выключение всех светодиодов (с 1-го по 8-й) с интервалом 1,4 с. Выход из цикла обеспечить нажатием кнопки 6 матричной клавиатуры.
7. Алгоритмически и программно реализовать задачу, предусматри-вающую после одновременного нажатия кнопок F1 и F3 выполнять последовательное включение в бесконечном цикле всех светодиодов (с 1-го по 8-й) с интервалом 0,5 с. Выход из цикла обеспечить нажатием кнопки 7 матричной клавиатуры.
8. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F3 выполнять в бесконечном цикле последовательное включение/выключение 3-го, 4-го и 5-го светодиодов с интервалом 3 с. Выход из цикла обеспечить нажатием кнопки 8 матричной клавиатуры.
     
Продолжение таблицы 3.2  
9. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F1 выполнять в бесконечном цикле последовательное включение 5-го, 6-го, 7-го и 8-го светодиодов с интервалом 2,5 с. Выход из цикла обеспечить нажатием кнопки 9 матричной клавиатуры.
10. Алгоритмически и программно реализовать задачу, предусматри-вающую после одновременного нажатия кнопок F1, F2, F3 параллельное включение и выключение в бесконечном цикле блока из 8-ми светодиодов с длительностью свечения 2 с и временем нахождения в погашенном состоянии 4 с. Выход из цикла обеспечить нажатием кнопки 10 матричной клавиатуры.
11. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F2 выполнять в бесконечном цикле последовательное выключение всех светодиодов (с 1-го по 8-й) с интервалом 2 с. Выход из цикла обеспечить нажатием кнопки 11 матричной клавиатуры.
12. Алгоритмически и программно реализовать задачу, предусматри-вающую после одновременного нажатия кнопок F1 и F2 выполнять последовательное включение в бесконечном цикле светодиодов (с 1-го по 5-й) с интервалом 1 с. Выход из цикла обеспечить нажатием кнопки 12 матричной клавиатуры.
13. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F1 выполнять в бесконечном цикле последовательное включение/выключение 2-го, 4-го, 6-го и 8-го светодиодов с интервалом 0,5 с. Выход из цикла обеспечить нажатием кнопки 1 матричной клавиатуры.
14. Алгоритмически и программно реализовать задачу, предусматри-вающую после нажатия кнопки F3, выполнять в бесконечном цикле последовательное включение 1-го, 2-го, 3-го и 4-го светодиодов с интервалом 2,8 с. Выход из цикла обеспечить нажатием кнопки 2 матричной клавиатуры.

 



Поделиться:


Последнее изменение этой страницы: 2016-04-23; просмотров: 780; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.031 с.)