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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

.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;

Источник: https://www.bibliofond.ru/detail.aspx?id=863615