Разработка устройства на базе микроконтроллера ATmega32 семейства AVR для обработки нажатия кнопок на стандартной клавиатуре PS/2 и вывода их значения на LCD-индикатор. Описание принципа работы протокола PS/2. Передача данных, коды сканирования.
Аннотация к работе
Однокристальные микроконтроллеры находят широкое применение в самых разнообразных сферах: от измерительных приборов, фотоаппаратов и видеокамер, принтеров, сканеров и копировальных аппаратов до изделий электронных развлечений и всевозможной домашней техники. В дальнейшем обозначилось и нашло активное развитие еще одно направление: архитектура RISC (Reduced Instruction Set Computers - компьютеры с сокращенным набором команд). Язык С, являясь языком высокого уровня, лишен подобных недостатков и может использоваться для программирования любого микропроцессора, для которого есть компилятор с языка С. В языке С все низкоуровневые операции, выполняемые компьютерами, представлены в виде абстрактных конструкций, позволяющих разработчикам сосредоточиться на программировании одной лишь логики, не заботясь о машинном коде. Используя команды, исполняемые за один машинный такт, контроллер достигает производительности в 1 MIPS (величина, показывающая, сколько миллионов инструкций в секунду выполняет процессор в некотором синтетическом тесте) на рабочей частоте 1 МГЦ, что позволяет разработчику эффективно оптимизировать потребление энергии за счет выбора оптимальной производительности.Для реализации данной задачи выбран микроконтроллер Atmel ATMEGA32 с подключенным к нему LCD-индикатором WINSTAR WH1602A. Также к микроконтроллеру подключен порт PS/2 типа "мама", к которому подключена стандартная клавиатура. Микроконтроллер обрабатывает нажатие клавиш клавиатуры и выводит их символы на LCD-индикатор. Электрическая принципиальная схема разработанного устройства представлена на рисунке 2.1. К выводам PD2 и PD7 подключены выводы 5 (Clock) и 1 (Data) порта PS/2 соответственно.Для передачи используется простой последовательный протокол. Первый вывод - тактовый сигнал (Clock) отвечает за инициирование передачи, определение ее направления и регулирование пересылки фрейма. Второй вывод - вывод данных (Data) несет непосредственную информацию. Рассмотрим порядок пересылки (рисунок 3.1): Рисунок 3.1 - Пересылка данных от клавиатуры к микроконтроллеру § Клавиатура инициирует пересылку, выставив на информационный сигнал в "0" (стартовый бит) и сменив уровень на часах "1">"0".Каждой клавише при нажатии соответствует либо один код, либо комбинация кодов (то есть сообщения состоят из нескольких байт).#define CLOCK 2 unsigned int kb_data_bit = 0; // Переменная для записи принятого бита unsigned int kb_bit_count = 0; // Счетчик принятых бит unsigned char kb_buffer [33]; // Буфер для хранения принятых данных unsigned int j = 0; // Переменная-счетчик unsigned int i = 0; // Переменная-счетчик unsigned int scancode = 0; // Переменная для хранения принятого сканкода unsigned char key; // Переменная для хранения значения нажатой клавиши {if ((kb_bit_count == 0) || (kb_bit_count == 11)) // Если счетчик принятых бит = 0 или 11 {kb_data_bit = (DATA_PIN >> 7); // Записыаем в перемнную kb_data_bit состояние PD7 if (kb_bit_count <32) // Если счетчик принятых бит <32 {kb_buffer [kb_bit_count] = kb_data_bit; // Записываем принятый бит в буфер kb_buffer на позицию, равную числу принятых бит kb_bit_count ; // Увеличиваем счетчик принятых бит на 1 } else {// Если счетчик принятых бит = 32 kb_buffer [kb_bit_count] = kb_data_bit; // Записываем принятый бит в буфер kb_buffer на позицию, равную числу принятых бит kb_bit_count = 0; // Сбрасываем счетчик принятых битВ ходе курсовой работы было разработано устройство на базе микроконтроллера ATMEGA32 семейства AVR, обрабатывающее нажатие кнопок на стандартной клавиатуре PS/2 и выводящее их значение на LCD-индикатор.
План
Содержание
Введение
1. Краткое описание используемого микроконтроллера ATMEGA32
1.1 Краткое описание используемого микроконтроллера ATMEGA32
2. Описание разработанного устройства
3. Принцип работы протокола PS/2
3.1 Передача данных
3.2 Коды сканирования
4. Программный Код и блок-схема микропрограммы
Заключение
Введение
Однокристальные микроконтроллеры находят широкое применение в самых разнообразных сферах: от измерительных приборов, фотоаппаратов и видеокамер, принтеров, сканеров и копировальных аппаратов до изделий электронных развлечений и всевозможной домашней техники.
Со времени появления первых микропроцессоров в 1970-х годах их сложность постоянно возрастала за счет появления новых аппаратных решений и добавления новых команд, предназначенных для решения новых задач. Так постепенно сложилась архитектура, получившая впоследствии название CISC (Complex Instruction Set Computers - компьютеры со сложным набором команд). В дальнейшем обозначилось и нашло активное развитие еще одно направление: архитектура RISC (Reduced Instruction Set Computers - компьютеры с сокращенным набором команд). Именно к этой архитектуре относятся микроконтроллеры AVR от компании Atmel.
Основное преимущество RISC-процессоров заключается в том, что они просты, выполняют ограниченный набор команд, и, как следствие, очень быстродействующие. Это позволяет снизить стоимость и сложность их программирования.
На заре возникновения микропроцессоров разработка программного обеспечения происходила исключительно на том или ином языке ассемблера, ориентированном на конкретное устройство. По сути, такие языки представляли собой символьные мнемоники соответствующих машинных кодов, а перевод мнемоники в машинный код выполнялся транслятором. Однако главный недостаток ассемблерных языков заключается в том, что каждый из них привязан к конкретному типу устройств и логике его работы. Кроме того, ассемблер сложен в освоении, что требует достаточно больших усилий для его изучения, которые, к тому же, оказываются потраченными впустую, если впоследствии потребуется перейти на использование микроконтроллеров других производителей.
Язык С, являясь языком высокого уровня, лишен подобных недостатков и может использоваться для программирования любого микропроцессора, для которого есть компилятор с языка С. В языке С все низкоуровневые операции, выполняемые компьютерами, представлены в виде абстрактных конструкций, позволяющих разработчикам сосредоточиться на программировании одной лишь логики, не заботясь о машинном коде.
В данной курсовой работе требуется разработать устройство на базе микроконтроллера ATMEGA32 семейства AVR, обрабатывающее нажатие кнопок на стандартной клавиатуре PS/2 и выводящее их значение на LCD-индикатор.
1. Краткое описание используемого микроконтроллера ATMEGA32
1.1 Краткое описание используемого микроконтроллера ATMEGA32
В курсовой работе используется процессорный модуль, выполненный на основе микроконтроллера ATMEGA32. Внешний вид процессорного модуля изображен на рисунке 1.1, принципиальная электрическая схема приведена на рисунке 1.2.
Рисунок 1.1 - Внешний вид процессорного модуля, на основе микроконтроллера ATMEGA32
Atmega32 является КМОП (комплементарная логика на транзисторах металл-оксид-полупроводник) 8-битным микроконтроллером, построенным на расширенной AVR RISC архитектуре. Используя команды, исполняемые за один машинный такт, контроллер достигает производительности в 1 MIPS (величина, показывающая, сколько миллионов инструкций в секунду выполняет процессор в некотором синтетическом тесте) на рабочей частоте 1 МГЦ, что позволяет разработчику эффективно оптимизировать потребление энергии за счет выбора оптимальной производительности.
AVR ядро сочетает расширенный набор команд с 32 рабочими регистрами общего назначения. Все 32 регистра соединены с арифметико-логическим устройством (АЛУ), что обеспечивает доступ к двум независимым регистрам на время исполнения команды за один машинный такт. Благодаря выбранной архитектуре достигнута наивысшая скорость кода и соответственно высокая производительность в 10 раз превосходящая скорость соответствующего CISC микроконтроллера.
ATMEGA32 содержит 32Кбайт внутрисистемно-программируемой FLASH памяти программ, допускающей чтение во время записи, 1024 байт EEPROM, 2К байт SRAM, 32 рабочих регистра, JTAG интерфейс сканирования внутренних регистров, встроенную систему отладки и программирования, три гибких таймера - счетчика с модулем сравнения, внутренние и внешние прерывания, последовательный программируемый интерфейс USART, байт-ориентированный двухпроводный последовательный интерфейс, 8-и канальный, 10-и битный АЦП с дифференциальным программируемым усилителем (только для TQFP), программируемый Watchdog таймер с внутренним генератором, порт SPI и шестью режимами сбережения энергии. В режиме Idle ЦПУ не функционирует в то время как функционируют USART, двухпроводный интерфейс, АЦП, SRAM, таймеры - счетчики, SPI порт и система прерываний. В Atmega32 существует специальный режим подавления шума АЦП, при этом в целом в спящем режиме функционирует только АЦП и асинхронный таймер для уменьшения цифровых шумов преобразования. В выключенном режиме процессор сохраняет содержимое всех регистров, замораживает генератор тактовых сигналов, приостанавливает все другие функции кристалла до прихода внешнего прерывания или поступления внешней команды Reset. В режиме ожидания работает один тактовый генератор, при остановке остальных функций контроллера. Благодаря быстрому переходу в нормальный режим работы, в том числе и по внешнему прерыванию Atmega32 успешно приспосабливается к внешним условиям работы и требует меньше энергии, чаще оказываясь в выключенном режиме. В расширенном режиме ожидания в рабочем состоянии находятся основной генератор и асинхронный генератор.
Микросхемы выпускаются при использовании технологии энергонезависимой памяти высокой плотности. Встроенная ISP FLASH память позволяет перепрограммировать область программной памяти внутрисистемно через последовательный SPI интерфейс стандартным программатором, или используя загрузочную программу из энергонезависимой памяти работающую в AVR ядре. Комбинация расширенной 8-и битной RISC архитектуры ЦПУ и твердотельной FLASH памяти обеспечивают Atmega32 высокую гибкость и экономическую эффективность во встраиваемых системах управления.
В ходе курсовой работы было разработано устройство на базе микроконтроллера ATMEGA32 семейства AVR, обрабатывающее нажатие кнопок на стандартной клавиатуре PS/2 и выводящее их значение на LCD-индикатор.