Разработка микропроцессорных устройств

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,02 Мб
  • Опубликовано:
    2015-12-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка микропроцессорных устройств

Министерство транспорта Российской Федерации

Федеральное агентство железнодорожного транспорта

Федеральное Государственное Бюджетное Общеобразовательное Учреждение

Высшего Профессионального Образования

"Дальневосточный государственный университет путей сообщения"

Естественно-научный институт

Кафедра "Оптические системы связи"



Контрольная работа

РАЗРАБОТКА МИКРОПРОЦЕССОРНЫХ УСТРОЙСТВ



Исполнитель

Студент Н.И. Карижская

Руководитель

Преподаватель И.С. Доронин




Хабаровск 2012

Содержание

 

Введение

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

является КМОП (комплементарная логика на транзисторах металл-оксид-полупроводник) 8-битным микроконтроллером, построенным на расширенной AVR RISC архитектуре. Используя команды, исполняемые за один машинный такт, контроллер достигает производительности в 1 MIPS (величина, показывающая, сколько миллионов инструкций в секунду выполняет процессор в некотором синтетическом тесте) на рабочей частоте 1 МГц, что позволяет разработчику эффективно оптимизировать потребление энергии за счёт выбора оптимальной производительности.ядро сочетает расширенный набор команд с 32 рабочими регистрами общего назначения. Все 32 регистра соединены с арифметико-логическим устройством (АЛУ), что обеспечивает доступ к двум независимым регистрам на время исполнения команды за один машинный такт. Благодаря выбранной архитектуре достигнута наивысшая скорость кода и соответственно высокая производительность в 10 раз превосходящая скорость соответствующего CISC микроконтроллера.содержит 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 высокую гибкость и экономическую эффективность во встраиваемых системах управления.

Рисунок 1.2 - . Схема электрическая принципиальная процессорного модуля ATmega32

2. Описание разработанного устройства


Целью данной работы является создание устройства, способного принимать данные с PS/2 клавиатуры. Для реализации данной задачи выбран микроконтроллер Atmel ATmega32 с подключенным к нему LCD-индикатором WINSTAR WH1602A. Также к микроконтроллеру подключен порт PS/2 типа "мама", к которому подключена стандартная клавиатура. Микроконтроллер обрабатывает нажатие клавиш клавиатуры и выводит их символы на LCD-индикатор. Электрическая принципиальная схема разработанного устройства представлена на рисунке 2.1.

Рисунок 2.1 - Схема электрическая принципиальная разработанного устройства

На схеме представлен микроконтроллер Atmega32 (U1). Его выводы PA0-PA3, PA5-PA7 соединены с выводами D4-D7, RS, RW и E индикатора LCD1 соответственно. К выводам PD2 и PD7 подключены выводы 5 (Clock) и 1 (Data) порта PS/2 соответственно.

К выводам XTAL1 и XTAL2 микроконтроллера подключен внешний кварцевый резонатор X1 с частотой 16 Мгц. Вывод Reset микроконтроллера подключен к питанию через резистор R1 и соединен с землей посредством кнопки для возможности перезагрузки устройства. Конденсаторы C1, C2 и С3 отвечают за фильтрацию возможных помех.

Внешний вид полученного устройства представлен на рисунке 2.2.

Рисунок 2.2 - Внешний вид разработанного устройства

3. Принцип работы протокола PS/2


При подключении клавиатуры сначала происходит её инициализация. После этого клавиатура готова отсылать и принимать сообщения. Для нашего устройства достаточно одностороннего режима работы - передача сообщений от клавиатуры к микроконтроллеру.

 

3.1 Передача данных


Для передачи используется простой последовательный протокол. Как было сказано выше, используется два вывода. Первый вывод - тактовый сигнал (Clock) отвечает за инициирование передачи, определение её направления и регулирование пересылки фрейма. Второй вывод - вывод данных (Data) несёт непосредственную информацию. Рассмотрим порядок пересылки (рисунок 3.1):

 <#"868531.files/image006.gif">

Рисунок 3.2 - Коды сканирования

Например, если нажать клавишу F, то клавиатура пошлёт сообщение 0x2B, а если затем отпустить - 0xF0 0x2B.

4. Программный Код и блок-схема микропрограммы


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

#define F_CPU 16000000L // Частота контроллера - 16 МГц

#include <avr/io. h> // Библиотека ввода-вывода

#include <avr/interrupt. h> // Библиотека прерываний

#include <util/delay. h> // Библиотека задержек

#include "lcd_conf. h" // Библитотека LCD

// Вывод Data подключен к PD7

#define DATA_PORT PORTD

#define DATA_DDR DDRD

#define DATA_PIN PIND

#define DATA 7

// Вывод Clock подключен к PD2

#define CLOCK_PORT PORTD

#define CLOCK_DDR DDRD

#define CLOCK_PIN PIND

#define CLOCK 2 int kb_data_bit = 0; // Переменная для записи принятого бита

unsigned int kb_bit_count = 0; // Счетчик принятых бит

unsigned char kb_buffer [33]; // Буфер для хранения принятых данныхint j = 0; // Переменная-счетчикint i = 0; // Переменная-счетчикint scancode = 0; // Переменная для хранения принятого сканкодаchar key; // Переменная для хранения значения нажатой клавиши

unsigned int codes [61] = {0x1C, 0x32, 0x21, 0x23, 0x24, 0x2B, 0x34, 0x33, 0x43, 0x3B, 0x42, 0x4B, 0x3A, 0x31, 0x44, 0x4D, 0x15, 0x2D, 0x1B, 0x2C, 0x3C, 0x2A, 0x1D, 0x22, 0x35, 0x1A, 0x45, 0x16, 0x1E, 0x26, 0x25, 0x2E, 0x36, 0x3D, 0x3E, 0x46, 0x0E, 0x4E, 0x55, 0x5D, 0x54, 0x5B, 0x4C, 0x52, 0x41, 0x49, 0x4A, 0x7C, 0x7B, 0x79, 0x71, 0x70, 0x69, 0x72, 0x7A, 0x6B, 0x73, 0x74, 0x6C, 0x75, 0x7D};

// Массив соответствующих клавишchar keys [61] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '~', '-', '=', '\\', ' [', '] ', '; ', '? ', ',', '. ', '/', '*', '-', '+', '. ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};main (void)

{= 0x40; // Устанавливаем лог.1 в 6 бит регистра GICR для включения прерываний по событию на INT0= 0x02; // Устанавливаем лог.1 в 1 бит регистра MCUCR для настройки активации прерывания на INT0 по спадающему фронту сигнала= 0x40; // Устанавливаем лог.1 в 6 бит регистра GIFR для установки вектора прерывания на INT0_DDR |= (0 << DATA); // Настраиваем PD7 на вход(); // Глобально разрешаем прерывания_Init (); // Инициализируем дисплей

LCD_Set_Position (1,0);_Show_String ("Привет!");

_delay_ms (1000);_Clear ();_Set_Position (1,0);_Show_String ("Нажата клавиша: ");(1)

{( (kb_bit_count == 0) || (kb_bit_count == 11)) // Если счетчик принятых бит = 0 или 11

{_Decode (); // Выделяем сканкод из принятых данных(scancode! = 0) // Если он не = 0 - выводим на дисплей клавишу

{_Set_Position (2,5);_Show_Char (key);

_delay_ms (1);

}

}

}

}(INT0_vect) // Прерывание

{_Recieve (); // Получаем данные

}KB_Recieve (void) // Описание функции получения данных

{_data_bit = (DATA_PIN >> 7); // Записыаем в перемнную kb_data_bit состояние PD7(kb_bit_count < 32) // Если счетчик принятых бит < 32

{_buffer [kb_bit_count] = kb_data_bit; // Записываем принятый бит в буфер kb_buffer на позицию, равную числу принятых бит_bit_count++; // Увеличиваем счетчик принятых бит на 1

} else { // Если счетчик принятых бит = 32_buffer [kb_bit_count] = kb_data_bit; // Записываем принятый бит в буфер kb_buffer на позицию, равную числу принятых бит_bit_count = 0; // Сбрасываем счетчик принятых бит

}

}KB_Decode (void) // Описание функции вычисления скан-кода

{

scancode = (kb_buffer [1] << 0) | (kb_buffer [2] << 1) | (kb_buffer [3] << 2) | (kb_buffer [4] << 3) |

(kb_buffer [5] << 4) | (kb_buffer [6] << 5) | (kb_buffer [7] << 6) | (kb_buffer [8] << 7); // Записываем биты сканкода, отбросив старт, стоп биты и бит четности(scancode == 0xAA) // Если сканкод = 0xAA (приветствие клавиатуры), сбрасываем сканкод и счетчик принятых бит

{_bit_count = 0;= 0;

}(j = 0; j < 60;) // Ищем соответствие сканкода в таблице. Если находим, присваиваем переменной key соответствующий символ

{(scancode == codes [j])

{= keys [j];;

} else {= '0';++;

}

}

}

При запуске программы подключаются необходимые библиотеки, инициализируются переменные и LCD-индикатор. Далее происходит настройка управляющих регистров и портов микроконтроллера для работы с клавиатурой. На дисплей выводится приветствие, через 1 секунду начинается ожидание нажатия клавиши. Если клавиша нажата, происходит ее отображение на дисплее. Если код нажатой клавиши неизвестен программе, на экран выводится символ "0". Более подробно работа программы описана на блок-схеме (рисунок 4.1).

Рисунок 4.1 - Блок-схема работы микропрограммы

Результат работы микропрограммы отражен на рисунках 4.2-4.4.

Рисунок 4.2 - Разработанное устройство при нажатии клавиши "K"

Рисунок 4.3 - Разработанное устройство при нажатии клавиши "R"

Рисунок 4.4 - Разработанное устройство при нажатии клавиши "="

Заключение

микропроцессорное устройство код сканирование

В ходе курсовой работы было разработано устройство на базе микроконтроллера ATmega32 семейства AVR, обрабатывающее нажатие кнопок на стандартной клавиатуре PS/2 и выводящее их значение на LCD-индикатор.

Похожие работы на - Разработка микропроцессорных устройств

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!