Проектирование и создание шахматных часов с функцией будильника на основе микроконтроллера

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    15,78 Мб
  • Опубликовано:
    2016-01-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Проектирование и создание шахматных часов с функцией будильника на основе микроконтроллера

Реферат

Дипломный проект содержит 52 страницы, 54 рисунка, 17 источников, 1 приложение.

Ключевые слова: шахматные часы, микроконтроллер, NI Multisim, Proteus, sPlan, семисегментный диодный индикатор, программатор, печатная плата.

Объект исследования: проектирование шахматных часов на основе микроконтроллера.

Предмет исследования: использование микроконтроллеров.

Цель дипломного проекта: проектирование и создание шахматных часов с функцией будильника на основе микроконтроллера.

Методы исследования: компьютерное моделирование, тестирование на макетной плате.

Задачи дипломного проекта:

теоретический анализ материалов о работе шахматных часов, микроконтроллеров, а также изучение различных сред для разработки схемы;

моделирование платы при помощи программы Proteus с ее последующим тестированием;

изготовление печатной платы.

Содержание

Введение

. Шахматные часы и современные микроконтроллеры

.1 Схема шахматных часов на основе кварцевых будильников

1.2 Основные типы микроконтроллеров и их архитектура

1.2.1 Система команд

1.2.2 Типы памяти МК

1.3 Аппаратные средства

1.3.1 Запуск микроконтроллера

1.3.2 Сброс в начальное состояние

1.3.3 Тактирование и командные циклы

1.3.4 Программный счетчик и АЛУ

1.3.5 Подпрограммы и функции

1.3.6 Прерывания

1.3.7 Таймеры

1.3.8 Ввод/вывод данных

1.3.9 Аналоговый компаратор

1.3.10 Программирование устройств

1.4 Основные типы интерфейсов МК

1.4.1 Подключение переключателей и подавление «звона» контактов

1.4.2 Световая индикация

1.4.3 Семисегментный индикатор

2. Среды для разработки устройства

2.1 NI Multisim - интерактивный эмулятор схем

2.1.1 Обзор компонентов

2.1.2 Интерактивные компоненты

2.1.3 Характеристики компонентов

2.1.4 Генератор сигналов

2.1.5 Осциллографы

2.2 Proteus - среда для проектирования и отладки

2.3 sPlan - черчение электронных схем

3. Разработка шахматных часов на микроконтроллере

3.1 Выбор компонентов

3.2 Разработка схемы и программного кода

3.2.1 Обработка прерываний

3.2.2 Вывод на индикаторы

3.2.3 Обработка нажатий

3.2.4 Тестирование прототипа на макетной плате

3.3 Реализация шахматных часов на микроконтроллере

3.3.1 Разработка печатной платы

3.3.2 Изготовление печатной платы

Заключение

Список использованных источников

Приложение А

Введение


Шахматные часы стали использовать для игры в шахматы сравнительно недавно - лишь во второй половине 19 века. До этого играли в шахматы без часов, и нередко шахматные партии крайне затягивались [1].

Привычные всем механические шахматные часы впервые были сконструированы в 1900 году. Часы имели два циферблата (для каждого из игроков), стрелки, фиксирующие падение флажка и флажок. Часы заводились вручную. Форма и марки часов с течением лет менялись. В советское время очень популярной маркой были шахматные часы Янтарь. В последние годы лучшими среди механических часов считаются INSA [1].

Наряду с механическими часами большую популярность завоевали кварцевые шахматные часы. Они по функциональности и внешнему виду не отличаются от механических, но более долговечны и точны. Для их работы в течение года хватит одной пальчиковой батарейки (поставляется в комплекте). Самые популярные кварцевые шахматные часы - это Кварц “Классика”. Эти часы продаются по всему миру. Например, в США они являются стандартом часов Шахматной Федерации США [1].

Целью данного дипломного проекта является изготовление шахматных часов на основе микроконтроллера.

Микроконтроллер (МК) - это компьютер, разместившийся в одной микросхеме. Отсюда и его основные привлекательные качества: малые габариты; высокие производительность, надежность и способность быть адаптированным для выполнения самых различных задач [2].

Микроконтроллер помимо центрального процессора (ЦП) содержит память и многочисленные устройства ввода/вывода: аналого-цифровые преобразователи, последовательные и параллельные каналы передачи информации, таймеры реального времени, широтно-импульсные модуляторы (ШИМ), генераторы программируемых импульсов и т.д. Его основное назначение - использование в системах автоматического управления, встроенных в самые различные устройства: кредитные карточки, фотоаппараты, сотовые телефоны, музыкальные центры, телевизоры, видеомагнитофоны и видеокамеры, стиральные машины, микроволновые печи, системы охранной сигнализации, системы зажигания бензиновых двигателей, электроприводы локомотивов, ядерные реакторы и многое другое.

Достаточно широкое распространение имеют МК фирмы ATMEL, функциональные возможности которых охватывают все перечисленные задачи [3].

Задачи дипломного проекта заключаются в следующем:

теоретический анализ материалов о работе шахматных часов, микроконтроллеров, а также изучение различных сред для разработки схемы;

моделирование платы при помощи программы Proteus с ее последующим тестированием;

изготовление печатной платы.

1. Шахматные часы и современные микроконтроллеры

 

.1 Схема шахматных часов на основе кварцевых будильников


При проведении соревнований по шахматам необходим учет времени, которое берет на раздумье перед ходом каждый игрок. Для этого существуют специальные шахматные часы. У них два циферблата и общий механизм, еще есть две кнопки - одна для одного игрока, другая для второго. Сделав ход, игрок нажимает свою кнопку, чем выключает свой часовой механизм и включает часовой механизм противника. Таким образом, можно будет по показанию циферблатов определить, сколько времени потратил на раздумье каждый игрок [4].

К сожалению, шахматные часы в продаже встречаются нечасто, но их можно сделать из двух недорогих и доступных китайских кварцевых будильников. Казалось бы, все просто, - нужно соединить будильники механически вместе и установить какой-нибудь двухкнопочный переключатель с зависимой фиксацией [4].

Рисунок 1 - Кнопки между часами

Но, проблема в том, что у популярных переключателей типа П2К или ПКН кнопки расположены слишком близко, и такой переключатель приходится располагать между корпусами двух будильников (рисунок 1). Это очень неудобно, так как, нажимая один переключатель легко задеть второй. Необходимо, чтобы кнопки располагались на максимальном удалении так, как показано на рисунке 2. Но здесь опять возникает проблема с механикой [4].

Рисунок 2 - Кнопки по бокам часов

А что если вообще отказаться от механики и вспомнить старую схему коридорных выключателей? В этом случае то, какой из будильников включен, а какой выключен будет зависеть не от конкретного положения переключателя, а от того, переключатели находятся в одинаковых положениях или в разных (рисунок 3). S2 и S3 - это модульные однокнопочные П2К с независимой фиксацией. S1 - общий выключатель [4].

Рисунок 3 - Схема по переключению будильников

Перед началом игры S2 и S3 отжаты, S1 - выключен. Объявляя о начале игры, судья включает S1. Сразу же начинает работать будильник «Б» (для игрока, играющего белыми). Сделав ход, игрок белыми нажимает кнопку переключателя S2. Теперь S2 и S3 в разных положениях.

Питание отключается от будильника «Б» и переключается на будильник «Ч» (для игрока черными). Сделав ход, игрок черными нажимает S3. Теперь оба переключателя S2 и S3 опять оказываются в одинаковом положении. Будильник «Ч» выключается, но включается «Б». Сделав ход, игрок белыми снова нажимает S2, на этот раз кнопка S2 отжимается и переключатели оказываются в разном положении. Включается будильник «Ч». И так далее.

Таким образом, когда кнопки переключателей S2 и S3 в одинаковых положениях (не важно, нажаты или отжаты, важно, что в одинаковых положениях) включен будильник «Б», а будильник «Ч» выключен. Когда кнопки переключателей S2 и S3 в разных положениях (все равно в каких, но только бы в разных), включается «Ч», но выключается «Б».

Часто современные шахматные часы делаются на микроконтроллерах различными производителями, правда, стоят они очень недешево. В данном проекте я реализую собственные шахматные часы на микроконтроллере, но прежде разберём, что это такое и как оно работает [4].

 

.2 Основные типы микроконтроллеров и их архитектура


Если представить все типы современных микроконтроллеров (МК), то можно поразиться огромным количеством разнообразных приборов этого класса, доступных потребителю. Однако все эти приоры можно разделить на следующие основные типы:

Встраиваемые (embedded) 8-разрядные МК;

16- и 32-разрядные МК;

Цифровые сигнальные процессоры.

Промышленностью выпускаются очень широкая номенклатура встраиваемых МК. В них все необходимые ресурсы (память, устройства ввода-вывода и т.д.) располагаются на одном кристалле с процессорным ядром [3]. Если подать питание и тактовые импульсы на соответствующие входы МК, то можно сказать, что он как бы «оживет» и с ним можно будет работать. Обычно МК содержат значительное число вспомогательных устройств, благодаря чему обеспечивается их включение в реальную систему с использованием минимального количества дополнительных компонентов. В состав этих МК входят:

Схема начального запуска процессора (Reset);

Генератор тактовых импульсов;

Центральный процессор;

Память программ (E(E)PROM) и программный интерфейс;

Средства ввода/вывода данных;

Таймеры, фиксирующие число командных циклов.

Общая структура МК показана на рис. 1. Эта структура дает представление о том, как МК связывается с внешним миром.

Более сложные встраиваемые МК могут дополнительно реализовывать следующие возможности:

- Встроенный монитор/отладчик программ;

Внутренние средства программирования памяти программ (ROM);

Обработка прерываний от различных источников;

Аналоговый ввод/вывод;

Последовательный ввод/вывод (синхронный и асинхронный);

Параллельный ввод/вывод (включая интерфейс с компьютером);

Подключение внешней памяти (микропроцессорный режим).

Все эти возможности значительно увеличивают гибкость применения МК и делают более простым процесс разработки систем на их основе.

Рисунок 4 - Структура микроконтроллера

Некоторые МК (особенно 16- и 32-разрядные) используют только внешнюю память, которая включает в себя как память программ (ROM), так и некоторый объем памяти данных (RAM), требуемый для данного применения. Они применяются в системах, где требуется большой объем памяти и относительное не большое количество устройств (портов) ввода/вывода. Типичным примером применения такого МК с внешней памятью является котроллер жесткого диска (HDD) с буферной кэш-памятью, который обеспечивает промежуточное хранение и распределение больших объемов данных (порядка нескольких мегабайт). Внешняя память дает возможность такому микроконтроллеру работать с более высокой скоростью, чем встраиваемый МК.

Цифровые сигнальные процессоры (DSP) - относительно новая категория процессоров. Назначение DSP состоит в том, чтобы получать текущие данные от аналоговой системы, обрабатывать данные и формировать соответствующий отклик в реальном масштабе времени. Они обычно входят в состав систем, используясь в качестве устройств управления внешним оборудованием, и не предназначены для автономного применения.

 

.2.1 Система команд

В зависимости от числа используемых кодов операций системы команд МК можно разделить на две группы: CISC и RISC. Термин CISC означает сложную систему команд и является аббревиатурой английского определения Complex Instruction Set Computer. Аналогично термин RISC означает сокращенную систему команд и происходит от английского Reduce Instruction Set Computer. Систему команд МК 8051 можно отнести к типу CISC. Однако, не смотря на широкую распространенность этих понятий, необходимо признать, что сами названия не отражают главного различия между системами команд CISC и RISC. Основная идея RISC архитектуры - это тщательный подбор таких комбинаций кодов операций, которые можно было бы выполнить за один такт тактового генератора. Основной выигрыш от такого подхода - резкое упрощение аппаратной реализации ЦП и возможность значительно повысить его производительность.

Очевидно, что в общем случае одной команде CISC соответствует несколько команд RISC. Однако обычно выигрыш от повышения быстродействия в рамках RISC перекрывает потери от менее эффективной системы команд, что приводит к более высокой эффективности RISC систем в целом по сравнению с CISC.

Однако в настоящее время грань между CISC и RISC архитектурой стремительно стирается. Например, МК семейства AVR фирмы Atmel имеют систему команд из 120 инструкций, что соответствует типу CISC. Однако большинство из них выполняется за один такт, что является признаком RISC архитектуры. Сегодня принято считать, что признаком RISC архитектуры является выполнение команд за один такт тактового генератора. Число команд само по себе значения уже не имеет.

 

.2.2 Типы памяти МК

Можно выделить три основных вида памяти, используемой в МК:

а) память программ;

б) память данных;

в) регистры МК.

Память программ представляет собой постоянную память, предназначенную для хранения программного кода и констант. Эта память не изменяет содержимого в процессе выполнения программы. Память данных предназначена для хранения переменных в ходе выполнения программы. Регистры МК - этот вид памяти включает внутренние регистры процессора и регистры, которые служат для управления периферийными устройствами.

Для хранения программ обычно служит один из видов постоянной памяти: ROM (масочные ПЗУ), PROM (однократно программируемые ПЗУ), EPROM (электрически программируемые ПЗУ с ультрафиолетовым стиранием) или EEPROM (ПЗУ с электрической записью и стиранием, к этому виду также относятся современные микросхемы Flash-памяти). Все эти виды памяти являются энергонезависимыми - это означает, что содержимое памяти сохраняется после выключения питания МК.

Многократно программируемые ПЗУ - EPROM и EEPROM (Electrically Erasable Programmable Memory) подразделяются на ПЗУ со стиранием ультрафиолетовым (УФ) облучением (выпускаются в корпусах с окном), и МК с электрически перепрограммируемой памятью, соответственно.

В настоящее время протоколы программирования современной EEPROM памяти позволяют выполнять программирование МК непосредственно в составе системы, где он работает. Такой способ программирования получил название - ISP (In System Programming). И теперь можно периодически обновлять программное обеспечение МК без удаления из платы. Это дает огромный выигрыш на начальных этапах разработки систем на базе МК или в процессе их изучения, когда масса времени уходит на многократный поиск причин неработоспособности системы и выполнение последующих циклов стирания-программирования памяти программ.

Функционально Flash-память мало отличается от EEPROM. Основное различие состоит в способности стирания записанной информации. В памяти EEPROM стирание производится отдельно для каждой ячейки, а во Flash-памяти стирание осуществляется целыми блоками.

ОЗУ (RAM) - оперативное запоминающее устройство, используется для хранения данных. Эту память называют еще памятью данных. Число циклов чтения и записи в ОЗУ неограниченно, но при отключение питания вся информация теряется.

1.3 Аппаратные средства

 

.3.1 Запуск микроконтроллера

Во многих приложениях используется батарейное питание МК, а в некоторых случаях применяются даже конденсаторы большой емкости, которые обеспечивают сохранение работоспособности при кратковременных отключениях питания. Поэтому проблема энергопотребления (энергосбережения) весьма актуальна для МК. Так как практически все современные МК производятся по КМОП технологии, то они потребляют значительно меньше мощности, чем ранее выпускавшиеся биполярные или n-МОП - микроконтроллеры.

 

.3.2 Сброс в начальное состояние

На рисунке 5 изображена схема сброса. Эту схему лучшего всего использовать в случаях, когда гарантировано поддержание напряжения питания в рабочем диапазоне. Кнопка RESET используется в процессе разработки устройств для сброса МК в начальное состояние (рисунок 5):

Рисунок 5 - Схема RESET

1.3.3 Тактирование и командные циклы

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

Следует обратить внимание на то, что командные циклы и такты синхронизации не одно и то же. Командный цикл состоит обычно из нескольких тактов, которые необходимы процессору для выполнения команды. На рисунке 6 показан командный цикл, состоящий из четырех тактов:

Рисунок 6 - Командный цикл и машинные такты

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

 

.3.4 Программный счетчик и АЛУ

Программный счетчик (Program Counter) или счетчик команд (СК) используется для указания следующей команды выполняемой программы. Реализация этой функции значительно усложняется, когда необходимо сохранить содержимое СК при вызове подпрограмм и обработке запросов прерывания или обеспечить ветвление программы. СК представляет собой счетчик с параллельным вводом/выводом. В процессорах с Принстонской архитектурой содержимое СК поступает по шине данных в схему управления памятью, указывая адрес считываемой команды. Часто СК входит в состав схемы управления памятью - это позволяет избежать передачи адреса по внутренней шине данных. Важные особенности функционирования СК - параллельная загрузка нового содержимого, поступающего с шины данных, возможность сброса (возврат к адресу первой команды программы), реализация инкремента. В 8-разрядных МК разрядность СК обычно больше, чем 8 бит. При загрузке в СК нового адреса, он поступает по шине данных частями по 8-бит, что требует выполнения дополнительных машинных циклов. Чтобы сократить время загрузки СК, некоторые МК имеют команды ветвления, при которых загружается только 8 младших разрядов адреса, а старшие разряды остаются без изменения. При выполнении такой команды достаточно передать по шине данных только один байт, тогда как для загрузки полного 16-разрядного адреса требуется пересылка двух байт.

После чтения очередной команды содержимое СК увеличивается (инкрементируется), чтобы обеспечить переход к адресу следующей команды. Если выполняется вызов подпрограммы или происходит прерывание, то адрес возврата (текущее состояние СК) может быть сохранен в стеке без выполнения дополнительных тактов для инкремента содержимого СК. В работе с МК необходимо следить, чтобы значение СК не вышло за пределы памяти программ, так как это может привести к выполнению неопределенных команд и непредсказуемому результату.

Арифметико-логическое устройство (АЛУ) процессора используется для выполнения всех математических операций в программе. Это операции включают сложение, вычитание, логическое И, логическое ИЛИ, сдвиг содержимого регистров и установку содержимого регистра состояния в соответствии с полученным результатами. АЛУ не используется при чтении или записи данных или команд - оно служит только для обработки данных.

АЛУ можно представить как аппаратный блок, который обрабатывает два слова данных (операнды) и сохраняет полученный результат (рисунок 7). Как вводятся операнды в АЛУ и куда поступает результат зависит от конкретного типа МК. В этом состоит одно из основных различий между разными типами процессоров и системами команд. Некоторые МК выбирают один операнд из регистра-аккумулятора и сохраняют результат также в аккумуляторе. Другие МК позволяют использовать различные источники операндов и места размещения результатов.

Рисунок 7 - Структура АЛУ

АЛУ обычно работает только с положительными целыми числами. Однако при выполнении вычитания получаются отрицательные числа, если вычитаемое больше уменьшаемого. Для представления отрицательных чисел используется дополнительный код - «дополнение до двух». Это необходимо учитывать при знакомстве с работой АЛУ.

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

А - В = А + (-В), (1)

где отрицательное число (-В) представляется в дополнительном коде. Чтобы получить дополнительный код отрицательного двоичного числа, необходимо инвертировать значение каждого бита, а затем прибавить единицу:

В = ( В ^ 0хff ) + 1, (2)

где ^ - операция «исключающее или».

Сложность АЛУ во многом определяет сложность всего МК в целом. Часто над созданием АЛУ работает группа разработчиков, сравнимая по составу с той, которая работает над остальной частью микропроцессора или микроконтроллера. От того, как работает АЛУ, зависит функционирование процессора, входящего в состав МК, а значит и всего МК в целом.

 

.3.5 Подпрограммы и функции

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

Иногда приходится передавать функции некоторые параметры. Один из самых эффективных и часто встречаемых способов передачи параметров в функцию - это поместить их в стек перед вызовом функции. В подпрограмме можно загрузить индексный регистр значения указателя стека и таким образом получить доступ к параметрам.

Другим способом передачи параметров является их сохранение в регистрах процессора или в памяти данных в качестве специальных переменных. Передача параметров через регистры сокращает число регистров, доступных при выполнении функции. Сохранение же параметров в виде специальных переменных уменьшает объем памяти, доступной для использования программой. Данное ограничение может быть весьма существенно для МК. Обычно значения возвращаемых параметров загружаются в регистры процессора, т.к. это наиболее быстрый и эффективный способ передачи данных.

 

1.3.6 Прерывания

Прерывание - это запуск специальной подпрограммы (называемой «обработчиком прерывания» или «программой обслуживания прерывания»), который вызывается сигналом аппаратуры. На время выполнения этой подпрограммы реализация текущей программы останавливается (рисунок 8). Термин «запрос на прерывание» (interrupt request) используется потому, что иногда программа отказывается подтвердить прерывание и выполнить обработчик прерывания немедленно.

Рисунок 8 - Выполнение прерываний

МК может не реагировать на прерывания, пока не завершится выполнение текущей задачи - этот реализуется путем запрещения (маскирования) обслуживания запроса прерывания. После решения задачи возможен один из двух вариантов: сброс маски и разрешение обслуживания прерывания, что приведет к вызову обработчика прерывания, или анализ значения битов, указывающих на поступление запросов прерывания и непосредственное выполнение программы обслуживания без вызова обработчика прерывания. Такой метод обработки прерывания используется, когда требуется обеспечить заданное время выполнения основной программы, так как любое пребывание может нарушить реализацию необходимого интерфейса.

Обработчик всегда обеспечивает следующую последовательность действий:

1. Сохранить содержимое регистров контекста;

2. Сбросить контроллер прерываний и оборудование, вызвавшее запрос;

3. Обработать данные;

4. Восстановить содержимое регистров контекста;

5. Вернуться к прерванной программе.

Регистры контекста - это регистры, определяющие текущее состояние выполнения основной программы. Обычно к ним относят СК, регистры состояния и аккумулятор. Другие регистры МК, такие как индексные регистры, могут быть использованы в процессе обработки прерывания, поэтому их содержимое также необходимо сохранить. Все остальные регистры являются специфическими для конкретного типа МК и его применения.

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

Вложенные прерывания сложны некоторым типам МК, которые не имеют стека. Эти прерывания так же могут вызывать проблемы, связанные с переполнением стека.

Иногда МК может быстро отреагировать на запрос прерывания, приняв необходимые данные, которые будут потом использованы после решения текущей задачи. Это реализуется путем сохранения поступивших данных в массиве памяти и последующей их обработки, когда выполнение исходной программы буде завершено. Такой способ обслуживания является хорошим компромиссом между немедленной полной обработкой прерывания, которая может потребовать много времени, и игнорированием прерывания, что может привести к потере информации о событии, вызвавшем прерывание.

При обработке прерывания содержимое регистра состояния обычно (но не всегда) автоматически сохраняется вместе с содержимым СК перед обработкой прерывания. Это избавляет от необходимости сохранять его в памяти программными средствами с помощью команды пересылки, а затем восстанавливать при возврате к исходной программе. Однако такое автоматическое сохранение реализуется не во всех типах МК.

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

«Вектор прерывания» - это адрес, который загружается в СК при переходе к обработчику прерывания. Существует несколько типов векторов. Адрес, который загружается в СК при запуске МК (RESET) называется «вектор сброса». Для различных прерываний могут быть заданы различные вектора. Но иногда различным прерываниям назначается один вектор. Это не должно вызвать проблем при работе с МК, так как чаще всего он исполняет одну единственную программу. В МК, где аппаратная часть хорошо известна, не должно возникнуть каких либо проблем при совместном использовании векторов прерываний.

В заключении можно добавить, что системные подпрограммы - это своего рода программные прерывания, которые с помощью специальных процессорных команд имитируют аппаратные прерывания. Они располагаются в произвольном месте памяти, или могут требовать для обращения к ним межсегментных переходов.

1.3.7 Таймеры

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

Их можно использовать для точного формирования временных интервалов, подсчета импульсов на выходах МК, формирования последовательности импульсов, тактирования приемопередатчика последовательного канала связи. Таймеры/счетчики способны вырабатывать запросы прерываний, переключая ЦП на их обслуживание по событиям и освобождая его от необходимости периодического опроса состояний таймеров. Поскольку основное применение МК находят в системах реального времени, таймеры/счетчики являются их обязательным элементом. В некоторых модификациях число таймеров достигает 32.

 

.3.8 Ввод/вывод данных

Основной интерфейс между МК и внешними устройствами реализуется через параллельные порты ввода/вывода. Во многих МК выводы этих портов служат также для выполнения других функций, например последовательного или аналогового ввода/вывода.

Во многих МК отдельные выводы портов могут быть запрограммированы на ввод или вывод данных. Необходимо обратить особое внимание на то, при вводе данных считывается значение сигнала, поступающего на внешний вывод, а не содержимое триггера данных. Если к внешнему выводу подключены выводы других устройств, то они могут установить свой уровень выходного сигнала, который будет считан вместо ожидаемого значения данных, записанных в триггер. В некоторых МК существует возможность выбора между чтением данных, установленных на выходе триггера или на внешнем выводе.

Когда на шину необходимо вывести «0» или «1», то сначала записывают соответствующее значение в триггер данных, а затем с помощью триггера управления на выходе устанавливается необходимый уровень потенциала. Триггер управления разрешает вывод данных на шину. В современных МК обеспечивается индивидуальный доступ к триггерам данных и управления с помощь адресной шины.

Внешний вывод может быть также использован для подачи запроса прерывания. Это обычно реализуется, когда вывод работает в режиме ввода.

Наиболее распространенный вид связи между различными электронно-вычислительными системами - это последовательный обмен. В этом случае байт данных передается по единственному проводу бит за битом с обеспечением синхронизации между приемником и источником данных. Очевидное преимущество последовательной передачи данных состоит в том, что она требует небольшого количества линий связи.

Существует множество стандартных последовательных протоколов передачи данных. В некоторых МК эти протоколы реализуются внутренними схемами, размещенными на кристалле, что позволят упростить разработку различных приложений.

 

.3.9 Аналоговый компаратор

Часто в МК встраивается аналоговый компаратор напряжений. Компаратор представляет собой простую схему, которая, которая сравнивает два напряжения. Обычно один сигнал называют входным, а другой опорным. На выходе устанавливается «1», если входное напряжение больше, чем опорное (рисунок 9). Этот способ наиболее удобно использовать в таких устройствах, как термостаты, где необходимо контролировать достижение определенного уровня измеряемой величины, которая задается значением входного напряжения.

Рисунок 9 - Сигналы на входе и выходе аналогового компаратора

 

.3.10 Программирование устройств

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

Часто оборудования для программирования оказывается слишком дорогим, особенно для радиолюбителей и предприятий малого бизнеса. Но в некоторых случаях для программирования требуется весьма простое и доступное оборудование. К примеру, некоторые модели PIC и AVR микроконтроллеров программируются очень легко. Существует также устройства, которые не требуют оборудования для программирования, на пример, МК Basic STAMP, или имеют встроенный аппаратно-программный блок, избавляющий от необходимости использования внешнего оборудования, кроме источника повышенного напряжения для программирования, как МК 68НС05.

Очень важный аспект, касающийся программирования устройств, заключается в том, что может ли устройство быть запрограммировано в системе. Это называется внутрисистемное программирование (ВСП) - от английского In-System Programming (ISP). Если МК допускает возможность такого программирования, то это означает, что он может быть смонтирован на плату с пустой памятью программ, которая затем может быть запрограммирована без какого либо влияния на остальные компоненты схемы. Это может стать важным обстоятельством при выборе МК. Использование ВСП избавляет МК от необходимости покупать специальный программатор, дает возможность обновлять программное обеспечения без изменения расположенных на плате аппаратных средств и позволяет производителям создавать запас готовых изделий, которые могут легко модифицироваться в соответствии с поступающими заказами.

 

.4 Основные типы интерфейсов МК

 

.4.1 Подключение переключателей и подавление «звона» контактов

При замыкании и размыкании переключателей в цепи возникают импульсные помехи, вызванные дребезгом контактов. Эти помехи обычно называют «шумом» или «звоном». Такое явление часто возникает в системах на базах МК, где для ввода данных используется клавиатура, и «звон» может восприниматься как многократное нажатие клавиши (рисунок 10). «Звон» возникает при установке и разрыве контакта путем нажатия на клавишу.

а)                                  б)

Рисунок 10 - а) схема ключа; б) дребезг контактов

Чтобы устранить данный эффект, используются специальные схемы или программные методы для подавления «звона». Один из простых схемотехнических способов устранения «звона» состоит в подключении RC-цепи. В этой схеме время, требуемое для заряда разряда конденсатора до порогового напряжения, маскирует «звон» контактов при переключении. Можно также установить триггер Шмитта между схемой ключа и МК, чтобы усилить эффект подавления «звона». Недостатки этого метода - дополнительные затраты на компоненты, которые должны быть установлены на плате, и дополнительное время, требуемое для заряда/разряда RC-цепи. Все это может затруднить использование данной схемы, так как для некоторых ключей с большим уровнем шумов дополнительная задержка может составить десятые доли секунды. Значительно лучший способ избавиться от «звона» - сделать это программно. Если уровень напряжения на выходе ключа не изменяется в течение 20мс, то можно считать, что «звон» окончился, и больше изменения состояний не ожидается.

 

.4.2 Световая индикация

Очень часто вывод данных реализуются с помощью светодиодов LED (Light Emitting Diode), которые достаточно дешевы и легко подключаются к МК. Обычно для свечения светодиода требуется ток более 16 мА, что для большинства МК находится в диапазоне допустимых значений выходных токов. Следует помнить, что светодиод является диодом, пропуская ток только в одном направлении.

Типичная схема подключения светодиода к выводу МК показана на рисунке 11. В этой схеме светодиоды будут светиться, когда МК выдает сигнал «0» (низкое напряжение). Когда вывод работает в качестве входа данных или на него выводится «1», то светодиод будет выключен.

Резистор сопротивлением 220 Ом используется для ограничения тока, т.к. слишком большой ток может вывести из строя МК и светодиод. Некоторые МК содержат ограничители тока на выходных линиях, что устраняет потребность в ограничивающем резисторе. Но все же целесообразно, на всякий случай, включить этот резистор, чтобы гарантировать, что короткое замыкание на «землю» или напряжение питания Vcc, не выведет из строя МК:

Рисунок 11 - Подключение светодиода к микроконтроллеру

 

.4.3 Семисегментный индикатор

Вероятно, самый простой вывод числовых десятичных и шестнадцатеричных данных - это использование семи сегментного индикатора (ССИ). Такие индикаторы были очень популярны в 70х годах, но впоследствии их место заняли жидкокристаллические индикаторы (ЖКИ). Но светодиодные индикаторы до сих пор являются полезными приборами, которые могут быть включены в схему без больших усилий для создания программного обеспечения. Включая определенные светодиоды (зажигая сегменты), можно выводить десятичные числа (рисунок 12).

Каждый светодиод в индикаторе имеет свой буквенный идентификатор (A, B, C, D, E, F, G), и одна из ножек светодиода подключена к соответствующему внешнему выводу. Вторые ножки всех светодиодов соединены вместе и подключены к общему выводу. Этот общий вывод определяет тип индикатора: с общим катодом или с общим анодом.

Подключение индикатора к МК осуществляется весьма просто: обычно индикатор подключают как семь или восемь (если используется десятичная точка) независимых светодиодов. Наиболее важной частью работы при подключении к МК нескольких ССИ является назначения линий вводе вывода для каждого светодиода. Решение этой задачи в начале выполнения проекта упростит вам монтаж разводки и отладку устройств в дальнейшем. Типичный способ подключения нескольких индикаторов состоит в том, чтобы включить их параллельно и затем управлять протеканием тока через общие выводы отдельных индикаторов. Так как величина этого тока обычно превышает допустимое значение выходного тока МК, то для управления оком включается дополнительные транзисторы, которые выбирают, какой из индикаторов будет находиться в активном состоянии.

Рисунок 12 - Семи сегментный индикатор

На рисунке 13 показано подключение к МК четырех ССИ. В этой схеме МК выдает данные для индикации, последовательно переходя от одного индикатора к другому. Каждая цифра будет высвечиваться в течении очень короткого интервала времени. Это обычно выполняется с помощью подпрограммы обслуживания прерываний таймера. Чтобы избежать мерцания изображения, подпрограмма должна выполняться со скоростью, обеспечивающий включение индикатора, по крайней мере, 50 раз в секунду. Чем больше цифр, тем чаще должны следовать прерывания от таймера. Например, при использовании восьми ССИ цифры должны выводиться со скоростью 400 раз в секунду.

Рисунок 13 - Подключение к МК четырех ССИ


2. Среды для разработки устройства

 

.1 NI Multisim - интерактивный эмулятор схем


Программа Multisim, которая является удобным и ориентированным на конечного пользователя инструментом для проектирования и изучения различных электронных схем. Программа имеет достоинства:

наличие гибкой системы приборов, по внешнему виду и характеристикам приближенных к промышленным аналогам;

наличие обширной библиотеки электронных компонентов + большое количество дополнительных библиотек, что позволяющей собрать практически любую схему;

наличие простого и легко осваиваемого интерфейса и системы отката на несколько шагов назад или вперёд соответственно (Ctrl +Z), благодаря которым сборка и анализ исследуемой схемы могут происходить намного быстрее, что экономит время.

NI Multisim - это интерактивный эмулятор схем, который позволяет создавать схемы за минимальное время.

Благодаря NI Multisim описание схемы стало простым и понятным. Представление ввиде электронной таблицы позволяет одновременно изменять характеристики любого количества элементов.

Интерфейс пользователя состоит из нескольких основных элементов, которые представлены на рисунке 14 [10].

В NI Multisim есть специальные компоненты под названием "интерактивные элементы" их можно изменять во время эмуляции. К интерактивным элементам относятся переключатели, потенциометры, малейшие изменения элемента сразу отражаются в имитации.


Рисунок 14 - Среда NI Multisim


2.1.1 Обзор компонентов

Компоненты - это основа любой схемы, это все элементы, из которых она состоит. NI Multisim оперирует с двумя категориями компонентов: реальными (real) и виртуальными (virtual) (рисунок 15).

У реальных компонентов, в отличие от виртуальных есть определенное, неизменяемое значение и свое соответствие на печатной плате. Виртуальные компоненты нужны только для эмуляции, пользователь может назначить им произвольные параметры. Например, сопротивление виртуального резистора может быть произвольным, даже 3,86654 Ома. Виртуальные компоненты помогают разработчикам при проверке с помощью схем с известными значениями компонентов. В NI Multisim есть и другая классификация компонентов: аналоговые, цифровые, смешанные, анимированные, интерактивные, цифровые с мультивыбором, электромеханические и радиочастотные [11].

Рисунок 15 - Виртуальные и реальные компоненты

 

.1.2 Интерактивные компоненты

Некоторые элементы схемы NI Multisim могут реагировать на действия пользователя. Изменение этих элементов сразу отражается на результатах эмулирования. Компоненты управляются с помощью клавиш, указанных под каждым элементом.

Например, на рисунке 16 приведено несколько компонентов: клавиша А увеличит сопротивление потенциометра до 100% от указанной величины (1 кОм). Чтобы уменьшить сопротивление необходимо нажать Shift и А [11].

Рисунок 16 - Примеры интерактивных компонентов

2.1.3 Характеристики компонентов

Проводник компонентов (Component Browser) - это место, где выбираются компоненты, чтобы разместить их на схеме. Горячая клавиша по умолчанию для размещения компонента - Ctrl+W или двойной щелчок мышью. Курсор мыши примет форму компонента, пока вы не выберите место на схеме для компонента. В проводнике компонентов отображается текущая база данных, в которой хранятся отображаемые элементы.

В NI Multisim они организованы в группы (groups) и семейства (families). Также в проводнике отображается описание компонента, модель и печатная плата или производитель (рисунок 17) [11]:

Рисунок 17 - Проводник компонентов

 

.1.4 Генератор сигналов

Генератор сигналов (function generator) - это источник напряжения, который может генерировать синусоидальные, пилообразные и прямоугольные импульсы. Можно изменить форму сигнала, его частоту, амплитуду, коэффициент заполнения и постоянный сдвиг. Диапазон генератора достаточен, чтобы воспроизвести сигналы с частотами от несколько герц до аудио и радиочастотных.

У генератора сигналов есть три терминала - источника импульсов. Общий центральный терминал определяет положение нуля [12].

Рисунок 18 - Символ генератора сигналов

Рисунок 19 - Лицевая панель генератора сигналов.

 

.1.5 Осциллографы

В NI Multisim есть несколько модификаций осциллографов, которыми можно управлять как настоящими. Они позволяют устанавливать параметры временно развертки и напряжения, выбирать тип и уровень запуска измерений. В Multisim есть следующие осциллографы:2-х канальный и 4-х канальный [12].

Рисунок 20 - Символ осциллографа

2.2 Proteus - среда для проектирования и отладки

- среда для проектирования и отладки электронных устройств, в т.ч. выполненных на основе микроконтроллеров различных семейств. Предоставляет возможности ввода схемы в графическом редакторе, моделирования её работы и разработки печатной платы, включая трехмерную визуализацию её сборки. Уникальной чертой среды Proteus является возможность эффективного моделирования работы разнообразных микроконтроллеров (PIC, 8051, AVR, HC11, ARM7/LPC2000 и др.) и отладки микропрограммного обеспечения [13].

Среда PROTEUS имеет огромную библиотеку электронных компонентов, а недостающие - можно сделать самостоятельно. Предусмотрена поддержка SPICE-моделей, которые часто предоставляются производителями электронных компонентов [13].

В комплект профессиональной версии входят инструменты USBCONN для подключения моделируемой схемы к реальному USB порту компьютера и COMPIM для подключения к COM-порту ПК [13].

Среда PROTEUS совместима с популярными средами разработки микропрограммного обеспечения, в т.ч.:

CodeVisionAVR (только МК AVR)

IAR (любые МК)

- ICC (МК AVR, msp430, ARM7)

WinAVR (МК AVR)

Keil (МК 8051 и ARM)

- HiTECH (МК 8051 и PIC)

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

Программный пакет Proteus VSM позволяет собрать схему любого электронного устройства и симулировать его работу, выявляя ошибки, допущенные на стадии проектирования и трассировки. Программа состоит из двух модулей. ISIS - редактор электронных схем с последующей имитацией их работы. ARES - редактор печатных плат, оснащенный автотрассировщиком Electra, встроенным редактором библиотек и автоматической системой размещения компонентов на плате. Кроме этого ARES может создать трехмерную модель печатной платы.

Proteus VSM включает в себя более 6000 электронных компонентов со всеми справочными данными, а также демонстрационные ознакомительные проекты. Программа имеет инструменты USBCONN и COMPIM, которые позволяют подключить виртуальное устройство к портам USB и COM компьютера. При подсоединении к этим портам любого внешнего прибора виртуальная схема будет работать с ним, как если бы она существовала в реальности. Proteus VSM поддерживает следующие компиляторы: CodeVisionAVR и WinAVR (AVR), ICC (AVR, ARM7, Motorola), HiTECH (8051, PIC Microchip) и Keil (8051, ARM). Существует возможность экспорта моделей электронных компонентов из программы PSpice [13].

Рисунок 22 - 2D вид платы в Proteus

Несмотря на то, что программа работает с устройствами, состоящими из нескольких микроконтроллеров и даже с чипами от разных производителей в одном устройстве, необходимо четко понимать, что симуляция повторяет работу реальной схемы не абсолютно точно. Чтобы избежать ошибок, нужно ясно представлять конечный результат [13].VSM является коммерческим продуктом. Есть бесплатная демонстрационная версия. Она обладает всеми функциями и возможностями платного пакета, но не позволяет сохранить или распечатать результат работы, создать свой собственный микроконтроллер [13].

Меню программы англоязычное. Полного русификатора для Proteus VSM нет. Устанавливать программу необходимо в папку без кириллических символов в названии [13].

Рисунок 23 - 3D вид платы в Proteus

Работает во всех операционных системах, начиная с версии 7.8 [13].

Отличительными особенностями является:

Поддерживаемые этапы разработки:

Разработка схемы электрической принципиальной (ввод в графическом редакторе)

Моделирование схемы с использованием разнообразных виртуальных приборов

Разработка печатной платы, включая 3D-визуализацию её сборки

Возможности отладки микропрограммного обеспечения

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

широкие отладочные возможности, в т.ч. доступ к содержимому регистров и памяти, задание точек останова программы, пошаговое выполнение

отладка на уровне исходного кода (Си, Бейсик, Ассемблер, в зависимости от типа используемого для отладки файла с испытываемым микропрограммным обеспечением)

поддержка нескольких семейств микроконтроллеров от разных производителей, в т.ч.:

- PIC12, PIC16, PIC18 и PIC24 (Microchip).

- 8051/8052, в т.ч. производные от них, выпускаемые Philips и Atmel.

- AVR, Tiny AVR и Mega AVR (Atmel).

ARM7, в т.ч. LPC2000 (NXP).

HC11 (Freescale) и микроконтроллерные модули BASIC Stamp (Parallax).

- Ведется работа по добавлению поддержки других МК.

Преимущества:

Выполнение всех этапов разработки электронного устройства на основе микроконтроллера в единой среде.

Возможность написания, отладки и тестирования микропрограммного обеспечения еще до физического изготовления опытного образца системы.

Генерируемые диагностические сообщения (например, при выполнении непредусмотренной инструкции) как со стороны ЦПУ, так и со стороны моделей устройств ввода-вывода, позволяют обнаружить сложные в поиске ошибки программирования.

Ускоряет процесс разработки электронного устройства.

Поддержка совместной работы с аппаратными устройствами, подключенными через порт компьютера [14].

2.3 sPlan - программа для создания электронных схем


Редактор схем sPlan разрабатывался с начала 2000-х годов немецкой фирмой ABAKOM. Программа поддерживается и в настоящее время, на данный момент последняя версия sPlan 7.0. С документацией по всем функциям программы можно ознакомиться, используя встроенную справку (на английском языке) [15].

Рисунок 24 - Окно программы sPlan 7.0

Данная программа для создания схем, хорошо работает с векторной графикой своего формата, а также имеет все необходимые функции, что нужны инженеру, да и простому электрику для создания хорошего чертежа либо электронной или электрической схемы. В sPlan есть такая возможность как экспорт векторной графики в растровую, и её дальнейшая печать в различном масштабе. Программа может создавать из простых фигур и элементов типа точки, прямой, окружности и т.д., сложные элементы с их использованием как шаблоны [15].

Главной функцией программы sPlan, является проектирование и разработка электронных принципиальных схем. Специально для этого, разработчиками сделана весьма большая база различных геометрических заготовок - обозначения электронных элементов. В также имеются все элементы, что могут, пригодится в создании принципиальной электрической и электронной схемы. Если, вдруг необходимого элемента нет, то Вы сами можете его сделать из простых фигур, а после сохранить в основной библиотеке. Программа sPlan включает в себя такие группы электрических элементов как: элементы питания, акустика, конденсаторы, сигнализаторы, антенны, разъёмы, реле, цифровые элементы, диоды, двигатели, различные транзисторы, тиристоры, плавкие вставки, различные генераторы, магазин индуктивностей, условные обозначения, основные и дополнительные приборы измерения, всяческие усилители, сопротивления, переключатели и выключатели, трансформаторы, лампы и множество других компонентов [16].

Кроме основного заложенного изначально набора готовых компонентов, программа sPlan также имеет такие в себе возможности как построения чертежей при помощи: прямоугольника, эллипса, произвольная формы, замкнутые и незамкнутые ломаные, кривые, пересечение прямых с соединением через точку, одно строчный и много строчный текст, произвольное изображение в растровом виде. В программе sPlan имеется такая функция как увеличительное стекло, что помогает при установки желаемого масштаба рабочего пространства, элемент редактирования для различного выделения, перемещения и удаления имеющихся объектов на чертеже, много градусный поворот элемента на требуемый угол, создание дубликата помеченных компонентов, зеркальное отражение по горизонтали и вертикали, пропорциональное изменение размера, а также поиск по имени и т.д. [16].

Вся графика в программе sPlan опирается на сетку, что непосредственно привязана к горизонтальной и вертикальной линейке. Это позволяет перемещать объекты только на определённые расстояния: по умолчанию - это 1мм. При необходимости переместить элемент на свободное расстояние, нужно делать это, нажав соответственно клавишу Shift на своей клавиатуре. Как и большинство нынешних редакторов, программа sPlan имеет хорошую возможность отмены произведённых действий сочетанием клавиш Ctrl+Z, а также, при необходимости, их повторения клавишами Ctrl+Y. Плюс ко всему этому, каждому компоненту чертежа, возможно, присвоить своё имя, личный номинал и желаемое описание [16].

Замечательной особенностью данного графического редактора также является его многосторонность, то есть, один чертёж, вполне может содержать в себе несколько различных листов, что можно при необходимости сохранить в один единый файл, как по отдельности, так и все вместе [16].

шахматный часы плата микроконтроллер

3. Разработка шахматных часов на микроконтроллере

 

.1 Выбор компонентов


В начале процесса разработки было определенно, что в качестве дисплея будет использоваться два 7-сегментных диодных индикатора, представленных на рисунке 25 [17]:

Рисунок 25 - 7-сегментный четырехразрядный светодиодный индикатор

Для управления достаточно было 5 кнопок - «Игрок 1», «Игрок 2», «Сброс», «Настройка» и «Пауза» (рисунок 26) [17]:

Рисунок 26 - Кнопка четырёхконтактная

С выбором микроконтроллера проблем не возникло: будет использоваться ATmega8 от Atmel - 23 пина ввода/вывода, два 8-битных таймера, один 16-битный, частота - до 16 Мгц, маленькое потребление (1-3.6 мА), дешевый ($2). В общем, для начала - более чем достаточно [17].

Рисунок 27 - Микроконтроллер Atmega8-16PU

Для прошивки микроконтроллера под Windows требуется установка драйвера. В остальном проблем нет. Попробовали использовать связку AVR Studio + eXtreme Burner в Windows. Всё работает отлично.

Конечно же, требуется программатор. На рынке предлагается много вариантов - от самых дешевых ISP (In-System Programming) программаторов за несколько долларов, до мощных программаторов-отладчиков за несколько сотен долларов. Было решено попробовать один из самых простых и дешевых - USBasp. На самом деле, это китайская версия программатора от Thomas Fischl. Несмотря на это, работает он хорошо. К тому же поддерживает достаточно много AVR контроллеров серий ATmega и ATtiny. Под Linux не требует установки драйвера [17].

Рисунок 28 - Программатор USBasp

Для прошивки необходимо соединить выходы программатора VCC, GND, RESET, SCK, MOSI, MISO с соответствующими выходами микроконтроллера. В данном исследовании использовалась готовая площадка для контроллеров ATmega8, ATmega48, ATmega88 [17].

Рисунок 29 - Площадка для программирования микроконтроллеров

 

.2 Разработка схемы и программного кода


Необходимо было выбрать подходящую среду. В библиотеке Multisim отсутствуют AVR микроконтроллеры, а sPlan подходит только как среда для разработки схемы. Потому была выбрана программа Proteus, ввиду того что она отлично работает с AVR микроконтроллерами.

После некоторого времени, проведённого в среде Proteus, была сделана схема, представленная на рисунке 30 [17]:

Рисунок 30 - Схема шахматных часов в среде Proteus

Следующим этапом после создания схемы являлось программирование микроконтроллера ATmega8.

Программировать AVR контроллеры можно как на ассемблере (AVR assembler), так и на Си. Тут каждый должен сделать свой выбор сам в зависимости от конкретной задачи и своих предпочтений. При программировании на ассемблере архитектура устройства становится понятнее и появляется ощущение, что разбираешься непосредственно во внутренностях контроллера. К тому же в особенно критических по размеру и производительности программах знание ассемблера может очень пригодиться. Выбор был сделан в пользу Си.

Начинать следует с точки входа программы - функции main. На самом деле ничего примечательного в ней нет - настройка портов, инициализация данных и бесконечный цикл обработки нажатий кнопок. А также вызов sei() - разрешение обработки прерываний, о них немного позже [17].

int main(void)

{_io();_data();_off();();(1)

{_buttons();

}0;

}

Рассмотрим каждую функцию в отдельности [17].

void init_io()

{

// set output= 0xFF;= 0xFF;

// set input= 0b11100000;

// pull-up resistors|= 0b00011111;

// timer interrupts= (1<<OCIE1A) | (1<<TOIE0);|= (1 << CS01) | (1 << CS00);B = (1<<CS12|1<<WGM12);

//OCRn = (clock_speed / prescaler) * seconds - 11A = (F_CPU / 256) * 1 -1;

}

Настройка портов ввода/вывода происходит очень просто - в регистр DDRx (где x - буква, обозначающая порт) записывается число, каждый бит которого означает, будет ли соответствующий пин устройством ввода (соответствует 0) либо вывода (соответствует 1). Таким образом, заслав в DDRB и DDRD число 0xFF, мы сделали B и D портами вывода. Соответственно, команда DDRC = 0b11100000; превращает первые 5 пинов порта C во входные пины, а оставшиеся - в выходные. Команда PORTC |= 0b00011111; включает внутренние подтягивающие резисторы на 5 входах контроллера. Согласно схеме, к этим входам подключены кнопки, которые при нажатии замкнут их на землю. Таким образом, контроллер понимает, что кнопка нажата [17].

Далее следует настройка двух таймеров, Timer0 и Timer1. Первый используется для обновления индикаторов, а второй - для обратного отсчета времени, предварительно настроив его на срабатывание каждую секунду. Подробное описание всех констант и метода настройки таймера на определенный интервал можно найти в документации к ATmega8 [17].

3.2.1 Обработка прерываний

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

ISR (TIMER0_OVF_vect)

{();(_buzzer > 0)

{

_buzzer--;(_buzzer == 0)_off();

}

}(TIMER1_COMPA_vect)

{(ActiveTimer == 1 && Timer1 > 0)

{--;(Timer1 == 0)_timeoff();

}(ActiveTimer == 2 && Timer2 > 0)

{--;(Timer2 == 0)_timeoff();

}

}

При срабатывании таймера управление передается соответствующему обработчику прерывания. В нашем случае, это обработчик TIMER0_OVF_vect, который вызывает процедуру вывода времени на индикаторы, и TIMER1_COMPA_vect, который обрабатывает обратный отсчет [17].

3.2.2 Вывод на индикаторы

Для того чтобы выводить информацию на индикаторы, надо правильно настроить, вывод информации.

void display()

{_number((Timer1/60)/10,0b00001000);

_delay_ms(0.25);_number((Timer1/60)%10,0b00000100); _delay_ms(0.25);_number((Timer1%60)/10,0b00000010); _delay_ms(0.25);_number((Timer1%60)%10,0b00000001); _delay_ms(0.25);_number((Timer2/60)/10,0b10000000); _delay_ms(0.25);_number((Timer2/60)%10,0b01000000); _delay_ms(0.25);_number((Timer2%60)/10,0b00100000); _delay_ms(0.25);_number((Timer2%60)%10,0b00010000); _delay_ms(0.25);= 0;

}display_number(int number, int mask)

{= number_mask(number);= mask;

}

Функция display использует метод динамической индикации. Дело в том, что каждый отдельно взятый индикатор имеет 9 контактов (7 для управления сегментами, 1 для точки и 1 для питания). Для управления 4 цифрами понадобилось бы 36 контактов. Слишком расточительно. Поэтому вывод разрядов на индикатор с несколькими цифрами организован по следующему принципу (рисунок 31) [17]:

Рисунок 31 - Принцип подключения индикаторов

Напряжение поочередно подается на каждый из общих контактов, что позволяет высветить на соответствующем индикаторе нужную цифру при помощи одних и тех же 8 управляющих контактов. При достаточно высокой частоте вывода это выглядит для глаза как статическая картинка. Именно поэтому все 8 питающих контактов обоих индикаторов на схеме подключены к 8 выходам порта D, а 16 управляющих сегментами контактов соединены попарно и подключены к 8 выходам порта B. Таким образом, функция display с задержкой в 0.25 мс попеременно выводит нужную цифру на каждый из индикаторов. Под конец отключаются все выходы, подающие напряжение на индикаторы (команда PORTD = 0;). Если этого не сделать, то последняя выводимая цифра будет продолжать гореть до следующего вызова функции display, что приведет к ее более яркому свечению по сравнению с остальными [17].

3.2.3 Обработка нажатий кнопок

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

void handle_buttons()

{_button(KEY_SETUP);_button(KEY_RESET);_button(KEY_PAUSE);_button(KEY_PLAYER1);_button(KEY_PLAYER2);

}handle_button(int key)

{bit;(key)

{KEY_SETUP:bit = SETUP_BIT; break;KEY_RESET:bit = RESET_BIT; break;KEY_PAUSE:bit = PAUSE_BIT; break;KEY_PLAYER1:bit = PLAYER1_BIT; break;KEY_PLAYER2: bit = PLAYER2_BIT; break;: return;

}(bit_is_clear(BUTTON_PIN, bit))

{(_pressed == 0)

{

_delay_ms(DEBOUNCE_TIME);(bit_is_clear(BUTTON_PIN, bit))

{|= key;

// key action(key)

{KEY_SETUP: process_setup(); break;KEY_RESET: process_reset(); break;KEY_PAUSE: process_pause(); break;KEY_PLAYER1: process_player1(); break;KEY_PLAYER2: process_player2(); break;

}_on(15);

}

}

{&= ~key;

}

}

Эта функция по очереди опрашивает все 5 кнопок и обрабатывает нажатие, если такое случилось. Нажатие регистрируется проверкой bit_is_clear(BUTTON_PIN, bit), т.е. кнопка нажата в том случае, если соответствующий ей вход соединён с землёй, что и произойдёт, согласно схеме, при нажатии кнопки. Задержка длительностью DEBOUNCE_TIME и повторная проверка нужна во избежание множественных лишних срабатываний из-за дребезга контактов. Сохранение статуса нажатия в соответствующих битах переменной _pressed используется для исключения повторного срабатывания при длительном нажатии на кнопку.

Функции обработки нажатий достаточно тривиальны и, полагаю, что в дополнительных комментариях не нуждаются [17].

 

.2.4 Тестирование прототипа на макетной плате

Прототип был собран на макетной плате.

Запуская схему, время на индикаторах сразу устанавливается в 0 и ожидает, пока зададут время. Это представлено на рисунке 32:

Рисунок 32 - Включенная схема. Индикаторы установлены в 0

Нажав три раза на кнопку «Настройка», время на индикаторах было установлено на 3 минуты. Это видно на рисунке 33:

Нажав один раз на кнопку «Сброс», время на индикаторах стало 0 минут. Это можно наблюдать на рисунке 34:

Рисунок 33 - Включенная схема. Индикаторы показывают 3 минуты

Рисунок 34 - Включенная схема после нажатия кнопки «Сброс»

Очередной раз, нажав кнопку «Настройка» один раз, было установлено время в 1 минуту. Это можно наблюдать на рисунке 35:

Рисунок 35 - Включенная схема после однократного нажатия кнопки «Настройка»

Нажав кнопку «Игрок 1», время на первом индикаторе пошло в обратном порядке, что показано на рисунке 36:

Рисунок 36 - Включенная схема после нажатия кнопки «Игрок 1»

Нажав кнопку «Игрок 2», время на первом индикаторе остановилось, а на втором пошло в обратном направлении. Это показано на рисунке 37:

Рисунок 37 - Включенная схема после нажатия кнопки «Игрок 2»

Очередной раз, нажав кнопку «Игрок 1», время на втором индикаторе останавливается, а на первом начинает идти в обратном направлении. Показано на рисунке 38:

В очередной раз, нажав кнопку «Игрок 2», время на первом индикаторе останавливается, а на втором начинает идти дальше в обратном направлении. Это показано на рисунке 39:

Рисунок 38 - Включенная схема после нажатия кнопки «Игрок 1»

Рисунок 39 - Включенная схема после нажатия кнопки «Игрок 2»

Нажав на кнопку «пауза», время на двух индикаторах останавливается. Это продемонстрированно на рисунках 40 и 41:

Рисунок 40 - Включенная схема после нажатия кнопки «Пауза»

Рисунок 41 - Включенная схема после нажатия кнопки «Пауза»

Нажав кнопку «Игрок 1», время на индикаторе начинает идти дальше в обратном направлении. Показано на рисунке 42:

Рисунок 42 - Включенная схема после нажатия кнопки «Игрок 1»

Рисунок 43 - Включенная схема после нажатия кнопки «Игрок 2»

Нажав затем кнопку «Игрок 2», время на первом индикаторе останавливает, а на втором начинает идти дальше в обратном направлении. Рисунок 43:

Нажав кнопку «Сброс», время на обоих индикаторах становится 0 минут. Показано на рисунке 44:

Рисунок 44 - Включенная схема после нажатия кнопки «Сброс»

Испытания схемы шахматных часов на макетной плате прошли успешно. Следующий этап - изготовление платы.

3.3 Реализация шахматных часов на микроконтроллере

 

.3.1 Разработка печатной платы

Существует множество способов изготовления макетов дорожек. Макет представляет собой зеркальное отражение дорожек. Для быстрого изготовления печатной платы макет обычно не изготавливают, а просто берут маркер и рисуют им дорожки на заранее очищенной плате, затем травят. Данным способом изготовить качественную плату не получится [18].

Для изготовления качественного макета платы сначала его нужно нарисовать. Делается это на компьютере с помощью программ. При разработке схемы печатной платы было изучено немало программ, таких как DipTrace, ExpressPCB, Sprint-Layout, Eagle, Altium Designer, FreePCB, Kicad, DesignSpark PCB, P-CAD, ZenitPCB, ZofzPCB 3D Gerber Viewer, BoardMaker3.

Рисунок 45 - Схема печатной платы для шахматных часов на микроконтроллере

Был выбран Sprint-Layout, так как это простой, но в тоже время очень эффективный программный пакет для проектирования и разводки печатных плат малой и средней сложности. Программа очень популярна среди радиолюбителей стран СНГ.

Было решено делать двухстороннюю схему печатной платы. Проведя некоторое время в этой программе, была реализована печатная схема, представленная на рисунке 45.

3.3.2 Изготовление печатной платы

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

Рисунок 46 - Распечатка разводки двух сторон печатной платы

После удачной распечатки разводки двух сторон печатной платы был взят кусок двустороннего текстолита, заранее вырезанного по размеру платы (рисунок 47):

Рисунок 47 - Кусок двухстороннего текстолита вырезанного по размеру платы

Следующим этапом необходимо было очистить и обезжирить плату. От качества проделывания данной процедуры во многом зависит качество перенесенного отображения дорожек. Очищается плата очень мелкой наждачной бумагой №1500...2500. Обезжиривается спиртом, ацетоном или другим средством. После обезжиривания трогать обезжиренную поверхность нельзя.

Рисунок 48 - Текстолит, обезжиренный и очищенный наждачной бумагой

Прикладываем картинку к плате и фиксируем его загнутыми краями с помощью скотча с обратной стороны. Далее понадобится утюг (хорошо, если есть старый, отслуживший в быту). Выставив температуру на максимум и дав ему полностью нагреться, начинаем проутюживать бумагу на плате. Проутюживать следует постепенно, от одного края к другому, сильно прижимая утюг. Данная процедура проделывается в течение 3-5минут.

Затем плате нужно немного остыть. После аккуратно снимается бумага и проверяется, насколько хорошо дорожки остаются на текстолите. Первая сторона получилась не слишком удачно, результат представлен на рисунке 49:

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

Рисунок 49 - Переснятые дорожки на текстолите (Сторона 1)

Рисунок 50 - Переснятые дорожки на текстолите (Сторона 2)

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

Химию для травления или раствор для травления можно приобрести в любом радиомагазине, причем с инструкцией по его применению [18].

Травление печатных плат хлорным железом является наиболее распространенным способом травления печатных плат в домашних условиях. Приобрести можно в магазине бытовой химии. Приготавливается раствор хлорного железа очень просто - одна часть хлорного железа на три части воды (хлорное железо в воду, не наоборот), все это тщательно перемешать. Время травления сильно зависит от температуры воды и загрязнения раствора медью и составляет 5-50 минут. При нанесении дорожек с помощью лазерного принтера не рекомендуется поднимать температуру выше 50 градусов Цельсия [18].

Рисунок 51 - Травление печатной платы хлорным железом

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

Рисунок 52 - Вытравленная плата с просверленными отверстиями

И, в завершение, дорожки необходимо залудить, проще всего это делается паяльником. В процессе лужения не стоит жалеть канифоли или флюсов (рисунок 53):

Рисунок 53 - Луженая плата

Плата готова к распайке деталей.

Рисунок 54 - Готовая схема

В итоге получилась красивая и качественная схема шахматных часов на AVR микроконтроллере ATmega8.

Заключение


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

Для достижения цели дипломного проекта был поставлен ряд задач, которые заключались в следующем:

проанализирован теоретический материал по теме исследования;

изучено строение каждого элемента использованных в проекте;

изучена работа с программатором;

изучены среды для разработки схем;

смоделирована плата при помощи программы Proteus;

схема протестирована на макетной плате;

сделана разводка печатной платы в программе sPrint Layout;

изготовлена печатная плата.

собрана полностью схема шахматных часов на микроконтроллере ATmega8

Задачи дипломного проекта были успешно реализованы, следовательно, цель данного исследования была достигнута.

Список использованных источников


1.   Оптовый шахматный магазин: Шахматные часы. [Электронный ресурс]

2.      Предко, М. Руководство по микроконтроллерам. Том 1. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского. - М.: Постмаркет, 2001. - 416 с.

.        Предко, М. Руководство по микроконтроллерам. Том 2. / Пер. с англ. под ред. И. И. Шагурина и С.Б. Лужанского. - М.: Постмаркет, 2001. - 488 с.

.        Электронные схемы: Схема шахматных часов на основе кварцевых будильников. [Электронный ресурс]

5.   Вуд, А. Микропроцессоры в вопросах и ответах. / Пер. с англ. под ред. Д. А. Поспелова. - М.: Энергоатомиздат, 1985. - 184 с.

6.      Уильямс, Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. - М.: Энергоатомиздат, 1988. - 253с.

.        Угрюмов, Е.П. Цифровая схемотехника. - Спб.: БВХ - Санкт-Петербург, 2000. - 528 с.

.        Алексенко, А.Г., Шагурин, И.И. Микросхемотехника. - М.: Радио и связь, 1990. - 496 с.

.        Бродин, Б.В., Шагурин, И.И. Микроконтроллеры: Справочник. - М.: ЭКОМ, 1999. - 395 с.

10. Пустоветов М.К., Солтус К.И., Синявский И.Г., Компьютерное моделирование. - LAP LAMBERT AcademicPublishing, 2013. - 199 с.

11. Артемьев И.Н. Изучение программы схемотехнического моделирования NI Multisim. - Л.: 2013. - 20 с.

.     Киров А.А. Введение в NI Multisim. - М.: 2013. - 38 с.

13.    СМИ «Сайт Паяльник»: Proteus VSM. [Электронный ресурс]

.        Микроэлектроника: Proteus - интегрированная среда для разработки электронных устройств, в том числе на микроконтроллерах. [Электронный ресурс]

.        СМИ «Сайт Паяльник»: sPlan. [Электронный ресурс]

.        ЭлектроХобби: Программа sPlan - отличный инструмент для создания электрических схем. [Электронный ресурс]

.        «Хабрахабр»: Программирование микроконтроллера. [Электронный ресурс]


Приложение А

Полный текст программы

#define F_CPU 4000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#define DEBOUNCE_TIME 20

#define BUTTON_PIN PINC

#define SETUP_BIT PC0

#define RESET_BIT PC1

#define PAUSE_BIT PC2

#define PLAYER1_BIT PC3

#define PLAYER2_BIT PC4

#define KEY_SETUP 0b00000001

#define KEY_RESET 0b00000010

#define KEY_PAUSE 0b00000100

#define KEY_PLAYER1 0b00001000

#define KEY_PLAYER2 0b00010000

int ActiveTimer = 0;int Timer1 = 0;int Timer2 = 0;

int _buzzer = 0;int _pressed = 0;

// function declarationsinit_io();init_data();number_mask(int num);handle_buttons();handle_button(int key);process_setup();process_reset();process_pause();process_timeoff();process_player1();process_player2();display();display_number(int mask, int number);sound_on(int interval);sound_off();

// interrupts

(TIMER0_OVF_vect)

{();(_buzzer > 0)

{ _-;(_buzzer == 0)_off();

}

}

ISR(TIMER1_COMPA_vect)

{(ActiveTimer == 1 && Timer1 > 0)

{--;(Timer1 == 0)_timeoff();

}(ActiveTimer == 2 && Timer2 > 0)

{--;(Timer2 == 0)_timeoff();

}

}

main(void)

{_io();_data();

_off();

();(1)

{_buttons();

}0;

}init_io()

{

// set output= 0xFF;= 0xFF;

// set input= 0b11100000;

// pull-up resistors|= 0b00011111;

// timer interrupts= (1<<OCIE1A) | (1<<TOIE0);|= (1 << CS01) | (1 << CS00);B = (1<<CS12|1<<WGM12);

//OCRn = (clock_speed / prescaler) * seconds - 1A = (F_CPU / 256) * 1 -1;

}

init_data()

{= 0;= 0;= 0;

}

number_mask(int num)

{(num)

{0 : return 0xC0;1 : return 0xF9;2 : return 0xA4;3 : return 0xB0;4 : return 0x99;5 : return 0x92;6 : return 0x82;7 : return 0xF8;8 : return 0x80;9 : return 0x90;

};0;

}

process_setup()

{+= 60;+= 60;

// overflow check (5940 seconds == 99 minutes)(Timer1 > 5940 || Timer2 > 5940)

{= 0;= 0;

}

}

process_reset()

{_data();

}

process_timeoff()

{_data();_on(30);

}

process_pause()

{= 0;

}

process_player1()

{= 2;

}

process_player2()

{= 1;

}

handle_button(int key)

{bit;(key)

{KEY_SETUP: bit = SETUP_BIT; break;KEY_RESET: bit = RESET_BIT; break;KEY_PAUSE: bit = PAUSE_BIT; break;KEY_PLAYER1: bit = PLAYER1_BIT;; case KEY_PLAYER2: bit = PLAYER2_BIT; break;: return;

}(bit_is_clear(BUTTON_PIN, bit))

{(_pressed == 0)

{

_delay_ms(DEBOUNCE_TIME);(bit_is_clear(BUTTON_PIN, bit))

{|= key;

// key action(key)

{KEY_SETUP: process_setup(); break;KEY_RESET: process_reset(); break;KEY_PAUSE: process_pause(); break;KEY_PLAYER1: process_player1(); break;KEY_PLAYER2: process_player2(); break;

}_on(15);

}

}

}

{

_pressed &= ~key;

}

}handle_buttons()

{_button(KEY_SETUP);_button(KEY_RESET);_button(KEY_PAUSE);_button(KEY_PLAYER1);_button(KEY_PLAYER2);

}

display()

{_number((Timer1/60)/10, 0b00001000);_ms(0.25);

_number((Timer1/60)%10, 0b00000100);_ms(0.25);

_number((Timer1%60)/10, 0b00000010);_ms(0.25);

_number((Timer1%60)%10, 0b00000001);

_delay_ms(0.25);

_number((Timer2/60)/10, 0b10000000);_ms(0.25);

display_number((Timer2/60)%10, 0b01000000);

_delay_ms(0.25);

_number((Timer2%60)/10, 0b00100000);_ms(0.25);

_number((Timer2%60)%10, 0b00010000);_ms(0.25);

= 0;

}

display_number(int number, int mask)

{= number_mask(number);= mask;

}

sound_on(int interval)

{= interval;

// put buzzer pin high|= 0b00100000;

}

sound_off()

{

// put buzzer pin low&= ~0b00100000;

Похожие работы на - Проектирование и создание шахматных часов с функцией будильника на основе микроконтроллера

 

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