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

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

 

Рисунок 2.2 – Принципиальная схема подключения матричной

клавиатуры к микроконтроллеру

 

 

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

 

Рисунок 2.3 – Временные диаграммы сигналов на выходных линиях (PORTE.4 – PORTE.7) порта Е при опросе матричной клавиатуры 4*4

 

 

Рассмотрим пример проверки нажатия одной из клавиш первого и второго (крайних справа) столбцов матричной клавиатуры, схема подключения которой приведена на рисунке 2.2 (адреса портов указаны в таблице 1.1):

. . .

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 в R18;

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, то это будет свидетельствовать о нажатии клавиш, позиции которых можно определить исходя из схемы, изображенной на рисунке 2.1, и номеров обнуленных разрядов в тетрадах.

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

 

2.2 Описание лабораторной установки

 

Лабораторная работа выполняется в индивидуальном порядке. На каждом рабочем месте должны быть установлены: многофункциональный лабораторный макет на базе микроконтроллера AVR ATMEGA 128, ПЭВМ типа IBM PC/AT c инсталлированным программным обеспечением: операционной системой MS–WINDOWS v. 9x, 2000, XP и программатором на основе кросс-компилятора языка программирования C CodeVision AVR. Задания выполняются на лабораторном макете на базе 8-ми разрядного микроконтроллера AVR ATMEGA 128. Подробное описание лабораторного макета приведено в пункте 1.2 лабораторной работы № 1.

В данной работе основным используемым периферийным оборудованием лабораторного макета будут 3-х кнопочная клавиатура 3´1 и матричная клавиатура 3´4 (см. рисунок 2.4), подключаемые к микроконтроллеру через порты F и Е соответственно. Для удобства на рисунке 2.4. проведено обозначение номеров клавиш, а так же индексов столбцов С1 – С3 и строк R1 – R3 (для матричной клавиатуры 3´4). Принципиальные схемы подключения клавиатур 3´1 и 3´4 приведены на рисунках 2.5 и 2.6 соответственно.

Рисунок 2.4 – Общий вид 3-х кнопочной 3´1 (вверху) и 12-и кнопочной 3´4 матричной (внизу) клавиатуры лабораторного макета

 

Рисунок 2.5 – Принципиальная схема подключения 3-х кнопочной (3´1) клавиатуры ко входам 6-8 порта F микроконтроллера AVR MEGA 128

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

2.3 Порядок проведения работы и указания по ее выполнению.

Перед началом выполнения практической части лабораторной работы проводится экспресс–контроль знаний по принципам функционирования микроконтроллера AVR ATMEGA 128, системе команд и возможностям организации программного опроса клавиатуры лабораторного макета.

При подготовке к лабораторной работе необходимо составить предварительный вариант листинга программы, в соответствие с индивидуальным заданием (см. таблицу 2.1).

Задание. Разработать в среде программирования Code Vision AVR программу для микроконтроллера AVR ATMEGA 128, которая выполняет опрос клавиатуры лабораторного макета и выводит информацию о нажатых клавишах с помощью блока светодиодов. Обозначения клавиш приведены на рисунке 2.4. Варианты индивидуальных заданий представлены в таблице 2.1.

Порядок выполнения задания:

1. Включить лабораторный макет (установить выключатель электропитания в положение I, и убедиться в свечении индикатора электропитания красным цветом).

2. Запустить компилятор Code Vision AVR.

3. Создать пустой проект.

4. Создать файл ресурса для кода программы и подключить его к проекту.

5. Ввести код исходного модуля программы считывания данных с клавиатуры лабораторного макетав соответствие с вариантом задания, указанном в таблице 2.1.

6. Выполнить компиляцию (нажав клавишу F9) исходного модуля программы и устранить ошибки, полученные на данном этапе.

7. Настроить параметры программатора.

8. Создать загрузочный модуль программы (нажав комбинацию клавиш Shift+F9) и выполнить программирование микроконтроллера.

9. Проверить работоспособность загруженной в микроконтроллер программы и показать результаты работы преподавателю.

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

 

Пример выполнения задания.Разработать программу, выводящую информацию об индексах нажатых клавиш первого и второго столбцов (С1 и С2) матричной клавиатуры 3´4 (зажигается светодиод, соответствующий номеру нажатой клавиши), и осуществляющую выход из режима опроса при нажатии кнопки F3 клавиатуры 3´1.

Решение.В лабораторном макете матричная клавиатура 3´4 подключена к порту E микроконтроллера. Линии старшей тетрады порта Е настраиваются на вывод данных, а линии младшей тетрады – на ввод. Кнопки F1, F2, F3 к 6-му, 7-му и 8-му разрядам порта F, который не нужно специально настраивать на ввод данных. Блок светодиодов подключен к порту D микроконтроллера и настраивается на вывод данных. Цикл опроса состоит в последовательном считывании данных с 1-го и 2-го столбцов матричной клавиатуры 3´4 при соответствующих управляющих сигналах, вывода информации о позиции нажатой клавиши на блок светодиодов и проверки состояния нажатия кнопки F1, при нажатии на которую процедура опроса клавиатуры завершается. Алгоритм программы приведен на рисунке 2.7. Полный текст исходного модуля программы с подробными комментариями приводится ниже:

#include <mega128.h> Подключить заголовочный файл mega128.h;

main() { основная часть программы;

#asm начало кода ассемблерной вставки;

ldi R18,0b11100000 запись маскирующих констант в регистры;