Разработка и создание электронных часов

advertisement
Международный конкурс научно-технических работ школьников
«Старт в науку»
“Разработка и создание электронных часов
на базе микроконтроллера PIC18F4550”
Автор:
Миллер Сергей, учащийся 10 класса
НОУ “Лицей № 36 ОАО “РЖД” г.Иркутска
Руководитель:
Ретивых ВладимирВикторович,
инженер, ФГБУН Институт
Солнечно-Земной Физики СО РАН
г. Иркутск, 2013
Оглавление
План исследований ........................................................................................................................3
Научная статья ...............................................................................................................................5
Часть 1 .........................................................................................................................................5
Составление принципиальной электрической схемы.........................................................9
Блок-схема программы. .......................................................................................................13
Программный код.................................................................................................................14
Отладка программы .............................................................................................................17
Часть 2 .......................................................................................................................................20
Принципиальная электрическая схема ..............................................................................20
Разводка и изготовление печатной платы..........................................................................22
Заключение ...............................................................................................................................24
Список литературы ..................................................................................................................24
2
План исследований
Сегодняшний день трудно представить себе без электроники. Все, от бытовых радиотелефонов и персональных компьютеров до грандиозных систем
автоматики и спутниковой навигации, зиждется на чипах и микросхемах.
Каждая отрасль применения диктует для электронных компонент свои требования надёжности и универсальности.
Среди многочисленных микросхем большого внимания по праву заслуживают программируемые устройства, которые могут быть сконфигурированы конечным пользователем. Одним из типов таких чипов являются микроконтроллеры. Микроконтроллер – это устройство, сочетающее в себе функции микропроцессора и настраиваемых периферийных устройств. В качестве
периферийных могут выступать устройства обработки сигналов, например,
сравнения и оцифровки, устройства управления силовыми цепями, а также
многочисленные интерфейсы такие, как USB или RS-232 (COM порт). Последние позволяют использовать микроконтроллер в качестве сетевого хоста
или ведомого устройства.
Бурное развитие микроэлектроники сделало такие устройства доступными, а различные компании, например, такие гиганты, как Microchip или
Atmel, предоставляют широкий ассортимент чипов микроконтроллеров на
любой вкус. Доступность чипов, в свою очередь, позволяет использовать их в
радиолюбительской аппаратуре. Так на базе микроконтроллера могут быть
собраны многочисленные бытовые приборы: цифровые термометры, охранные системы, компьютерные приставки, радиоприёмники и многое другое.
Данная работа посвящена разработке электронных часов на базе микроконтроллера PIC фирмы Microchip. Работа состоит из двух глав. В первой
главе будут рассмотрены вопросы программирования микроконтроллеров
серии PIC на языке С, а также произведена отладка программы в средах
MPLABX 1.0 и Proteus 7.0. Во второй главе речь пойдёт о физическом уровне
микроконтроллера и реализации программы "в железе".
3
Актуальность работы состоит в приобретении навыков работы с электронными устройствами и их моделированием в средах программирования и
автоматического проектирования.
Целью работы является создание электронных часов на отладочной платформе на базе микроконтроллера PIC фирмы Microchip. Для реализации цели
поставлены следующие задачи:
 приобрести общие сведения о программировании микроконтроллеров серии PIC;
 освоить язык программирования С в необходимом для программирования микроконтроллеров объёме;
 разработать принципиальную электрическую схему электронных
часов;
 составить блок-схему программы и написать программу;
 отладить программу в симуляторе Proteus 7.0;
 выполнить рисунок платы часов в среде SprintLayout 5.0
 спаять и отладить электронные часы “в железе”
4
Научная статья
Часть 1
Микроконтроллер представляет собой микросхему,каждая ножка которой
способна реализовывать одну или несколько функций (рис. 1), которые
назначаются конечным пользователем путём занесения нужной информации
в управляющие регистры.Регистр – это элементарная ячейка памяти, содержащая обычно 1 байт информации. Эти регистры, подобно ключам, переключают ножки с одной функции на другую. Все управляющие регистры подробно описаны в технической документации к микроконтроллеру.
У микроконтроллера имеются ножки питания (VDD), напряжение которого может принимать значения +3.3 В или +5В в зависимости от марки микросхемы. Положительное напряжение подаётся относительно общего провода (VSS), который принимается за 0 В. Также имеются ножки для подключения осциллятора (OSC1и OSC2) – источника тактовой частоты, на которой
работает контроллер. Остальные ножки объединены в порты ввода-вывода
информации. На рис. 1 изображён используемый в данной работе микроконтроллер с пятью портами, которые имеют названия PORTA, PORTB,
PORTC, PORTDи PORTE и объединяют соответственно ножки RA0:RA7,
RB0:RB7, RC0:RC7, RD0:RD7 и RE0:RE3. Ножки портов, как видно, нумеруются с нуля, а не с единицы.
Рисунок 1. Общий вид микроконтроллера (слева) и функциональные
назначения его ножек (справа).
5
Порты двунаправлены, т.е. они могут как принимать информацию (режимввода, INPUT), так и служить её источником (режимвывода, OUTPUT).
Направление потока информации в микроконтроллерах серии PICнастраивается в регистрахTRISx, где x = A, B, C, Dили E. Число бит регистра соответствует числу ножек порта, т.е. каждой ножке соответствует 1 управляющий
бит. Если этот бит принимает логическое значение "1" (говорят, что бит
установлен), то ножка переводится в режим INPUT. Если бит принимаетзначение "0" (бит очищен), то – в режим OUTPUT. Например, если в регистре
TRISA[7:0] записано значение 0b00001111, то это означает, что ножки
RA7:RA4 настроены на выход, а ножки RA3:RA0 – на вход.
Для того, чтобы использовать порт только для передачи или приёма цифрового сигнала, не задействуя другие устройства, которые установлены на
ножках, необходимо отключить эти устройства. Допустим, что нам нужно
отключить все устройства порта D микроконтроллера PIC18F4550, который
изображён на рис. 1. Для этого находим в документации (datasheet) раздел
"Порты ввода-вывода" ("I/Oports"), в нём – "Порт D" (PortD) и просматриваем поддерживаемые им устройства и управляющие регистры. Так порт D
упомянутого микроконтроллера поддерживает только параллельный интерфейс SSP, который настраивается регистром SSPCON. Чтобы его отключить,
согласно документации, необходимо занести в регистр SSPCON значение 0x0
(0b0000). Кроме того, порт может бытьснабжён триггерами-защёлками (однобитными регистрами) для запоминания последнего значения на ножке. Их
также отключим путём занесения а регистр LATD значения 0х00.Далее следует обнулить регистр ввода-вывода, который называется PORTD, чтобы в
нём не осталось информации от предыдущих использований. Подобные манипуляции с управляющими регистрами называют инициализацией порта.
Определившись с используемыми портами, можно начинать писать тело
программы. Для программирования микроконтроллеров используются два
языка: Assemblerи C. Мы будем использовать последний. Прежде всего,
необходимо подключить файлы заголовка (headerfiles), имеющие расшире6
ние ".h". Это делается с помощью команды #include. Эти файлы содержат
необходимый набор переменных, прописанный в соответствии с технической
документацией. Переменные – это регистры микроконтроллера, которые
имеют тип unsignedchar, т.е. беззнаковый символьный тип, под который
выделяется 1 байт памяти. В языкеС выполнение программы начинается с
функции main, которая может возвращать значение, т.е. определяться типом
int(floatи др.),или не возвращать такового, void. В теле функции main
сначала должна производится инициализация используемых портов, а следом
за ней должен идти бесконечный цикл, в котором микроконтроллер периодически будет опрашивать задействованные порты и выполнять заданный пользователем набор функций и команд. Кроме процедуры инициализации, до
бесконечного цикла могут быть прописаны и другие настройки, необходимые для решения конкретной задачи.
На рис. 2 приведенылистингидвух вариантов одной программы, демон#include "p18f4550"
#include "p18f4550"
/*глобальныепеременные*/
void init_ports();
/*глобальные переменные*/
voidmain(){
PORTD=0x00;//настройка
TRISD=0xFF;//порта D на
//вход
SSPCON=0x0;//отключение SSP
LATD=0x00;
PORTE=0x0;//настройка
TRISE=0x0;//порта Е на
//выход
LATE=0x0;
/*другие настройки*/
while(1){//бесконечный цикл
/*наборкоманд*/
}
}
voidmain(){
init_ports();
/*другие настройки*/
while(1){
/*наборкоманд*/
}
}
voidinit_ports(){
PORTD=0x00;
TRISD=0xFF;
SSPCON=0x0;
LATD=0x00;
PORTE=0x0;
TRISE=0x0;
LATE=0x0;
}
Рисунок 2. Общий принцип создания программы для микроконтроллера и
два способа инициализации портов: в теле main (слева), с помощью отдельной функции init_ports (справа).
7
стрирующие общий принцип создания кода для микроконтроллера.
Обозначение имени функции инициализации до функции main указывает
компилятору, что кроме основного цикла в программе имеются функции, используемые в main, но определяемые вне тела этой функции. Также нельзя
забывать о глобальных переменных, которые определяются до функции
main и используются всеми функциями программы.
Часть программного кода нашей работы должна содержать программу
счётчика, который будет увеличивать значение, например, порта D на единицу, скажем, через каждую секунду. Пусть частота микроконтроллера равна 4
МГц. Чтобы организовать задержку в 1 секунду, необходимо составить программу, которая отсчитывает 4 млн тактов (частота = 1/время такта). Для работы с числом 4 000 000 заведём переменную time типа longint (четырёхбайтные числа от – 232 до 232– 1), которая будет декрементироваться, пока
не обратится в нуль. Также можно использовать несколько переменных типа
int (или со спецификатором unsigned). Возможные варианты программы,
#include "p18f4550"
#include "p18f4550"
voidmain(){
PORTD=0x00;
TRISD=0x00;//портDнавыход
SSPCON=0x0;
LATD=0x00;
voidmain(){
PORTD=0x00;
TRISD=0x00;//портDнавыход
SSPCON=0x0;
LATD=0x00;
while(1){
pause(4000000);
if (PORTD==0x1010){
PORTD=0x00;
}
PORTD=PORTD+0x01;
}
}
while(1){
pause(4000);
if (PORTD==0x1010){
PORTD=0x00;
}
PORTD=PORTD+0x01;
}
}
void pause(long int time){
while(time-->0){};
void pause(int time){
int time1;
while(time-->0){
time1 = 1000;
while(time1-->0){};
};
}
}
Рисунок 3. Возможные варианты программного кода счётчика секунд.
8
осуществляющей счёт секунд до 9 с последующим сбором в нуль (новый
счёт), представлены на рис. 3.На этом мы завершим вводную часть.
Составление принципиальной электрической схемы
Рисунок 4. Внешний вид семисегментного индикатора и названия сегментов
(сверху), принципиальная схема индикатора с общим катодом (в центре),типы светодиодных цепей (снизу): с общим анодом (слева) и с общим
9
катодом.
Электронные часы состоят из микроконтроллера, выполняющего все необходимые расчёты, и устройства индикации. В качестве последнего возьмём
светодиодный семисегментный индикатор, внешний вид и принципиальная
схема которого показаны на рис. 4. Различают два типа таких индикаторов: с
общим анодом и общим катодом. В первом случае питающее напряжение
подаётся на аноды всех сегментов сразу, светится будет только тот, который
катодом будет связан с общим проводом. Во втором случае – наоборот, все
сегменты связаны с общим проводом катодами, а светится будет тот, на анод
которогобудет подаваться напряжение питания. Мы для своей работы мы
выберем индикатор с общим катодом.
Максимальный ток потребления светодиода составляет 10 мА, при этом
на нём падает около 2 В. Напряжение питания светодиода определяется
напряжением, которое может выдать ножка микроконтроллера. Это напряжение равно 5 В, максимальный ток ножки равен 25 мА. Последнее обстоятельство позволяет использовать ножки для непосредственного управления
сегментами. Таким образом, чтобы компенсировать оставшееся напряжение
3 В (5 В питания минус 2 В светодиода), необходимо поставить резистор сопротивлением более
𝑅=
𝑈
3B
=
= 300 Ом.
𝐼 0,01 A
(1.1)
Выберем резистор со стандартным номиналом 330 Ом.
На общий катод стекает ток со всех светодиодов, этот ток равен
𝐼𝐾 = 8𝐼𝐿𝐸𝐷 ≈ 0,08 A.
(1.2)
Подать такой ток на ножку нельзя, поскольку он превышает максимально
допустимый (0,025 А). Поэтому нужно использовать управляемый ключ –
транзистор, который будет соединять общий катод с общим проводом приподачи напряжения с ножки на управляющий электрод – базу. Это обеспечит
10
свечение конкретного знака индикатора. Для ограничения тока базы необходимо поставить резистор номиналом 560 Ом. Принципиальная электрическая
схема электронных часов представлена на рис. 5. В управлении сегментами
задействован порт D, знаками – портС микроконтроллера PIC18F4550.
Управление знаками осуществляется с помощью динамической индикации, т.е. сперваоткрывается транзистор, управляющий последним знаком, затем в PORTD заносится информация о сегментах, которые необходимо зажечь. Следующим шагом PORTD обнуляется, закрывается ранее используемый транзистор и повторяется описанная выше процедура для второго знака.
Аналогично зажигаются необходимые сегменты в третьем и четвертом знаке,
после чего программа снова возвращается к первому. Частота переключения
знаков должна быть такой, чтобы человеческий глаз воспринимал знаки постоянно горящими. Из опыта кино известно, что эта частота должна превышать 24 цикла в секунду.
11
Рисунок 5. Первый вариант принципиальной электрической схемы электронных часов на базе микроконтроллера PIC18F4550, используемой для отладки программного кода в режиме симуляции.
12
Блок-схема программы.
Блок-схемы используемых функций приведены на рис. 6а-б.
а
main. Начало
Глобальные переменные:
inth_m,l_m //старший и младший разряды минут
h_h,l_h //старший и младший разряды часов
unsignedcharData[10] //значения для индикатора
init_ports.Инициализация портов
while (1)
да
l_m++
нет
l_m ==10?
да
l_m = 0; h_m ++
нет
h_m == 6?
да
h_m = 0; l_h ++
нет
l_h ==10?
да
l_h = 0; h_h ++
нет
10*h_h + l_h == 24?
да
l_m = 0; h_m = 0; l_h = 0; h_h = 0
output. Вывод на индикатор
13
б
output. Начало
init_ports.Начало
Установка PORTB[2]
ОчисткаPORTE
PORTD = значение1
pause(0.25 сек)
Настройка PORTBна выход
Настройка PORTD на выход
Отключение неиспользуемых устройств
Установка PORTB[3]
ОчисткаPORTA
PORTD = значение2
pause(0.25 сек)
init_ports.Конец
Установка PORTB[4]
ОчисткаPORTA
PORTD = значение3
pause(0.25 сек)
pause. Начало
time = 0.25 сек
Установка PORTB[5]
ОчисткаPORTA
PORTD = значение4
pause(0.25 сек)
time -->0?
нет
да
output. Конец
pause. Конец
Рисунок 6. Блок-схема основной функции (а) и вспомогательных (б).
Программный код
На семисигментном индикаторе отображаются 4 цифры и каждая отвечает за определенные единицы времени, например, hh:mm или mm:ss. Поэтому
в качестве глобальных переменных были выбраны четыре счётчика: h_h
(highhoursign), l_h (lowhoursign), h_m (highminutesign) и l_m (lowminutesign).
Поскольку привычнаянамзапись цифры в двоичном виде не совпадает со
значением для семисегметного индикатора, необходимо составить массив
соответствий, который назовём Data. Этот массив будет включать в себя специфичные для индикатора цифры с порядковым номером, равным значению
цифры. Процесс заполнения массива для последовательности abcdefgp pприведён в таблице 1 (см. также рис. 4).
14
Таблица 1. Заполнение массиваData.
№ п.п.
Иллюстрация
Bin код: abcdefgp
Hex код
0
11111100
FC
1
0110 000
60
2
1101 1010
DA
3
1111 0010
F2
4
0110 0110
66
5
1011 0110
B6
6
1011 1110
BE
7
1110 0000
E0
8
1111 1110
FE
9
1111 0110
F6
Переключение разрядов индикатора осуществляется с помощью динамической индикации, о котором говорилось в вводной части. Программный код
представлен на рис. 7.
15
#include "p18f4550.h"
unsigned char int l_m, h_m, l_h, h_h, l_m, time_ind;
unsigned char Data[]={0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE,
0xF6};
void portinit();
void output();
void pause(int);
void main() {
portinit();
while(1){
l_m++;
if(l_m==10){l_m=0; h_m++;};
if(h_m==6){h_m=0; l_h++;};
if(l_h==10){l_h=0; h_h++;};
if(h_h*10+l_h>23){l_m=0; h_m=0; l_h=0; h_h=0;};
output();
};
}
void portinit(){
PORTB=0x00;
TRISB=0x00;
LATB=0x00;
PORTD=0x00;
TRISD=0x00;
LATD=0x00;
//обнуление значения
//настройка порта б на выход
//очистка выходных триггеров
//обнуление значения
//настройка порта д на выход
//очистка выходных триггеров
void output(){
PORTD=0x00;
//обнуление значения в порт Д
PORTB=0x11011111; //установка младшего разряда
PORTD=Data[l_m];
//значение младшего разряда
pause(100);
//задержка
PORTD=0x00;
PORTB=0b11101111;
//второй разряд
PORTD=Data[h_m];//его значение
pause(100);
PORTD=0x00;
PORTB=0b11110111;
PORTD=Data[l_h]+0x01;
pause(100);
PORTD=0x00;
PORTB=0b11111011;
PORTD=Data[h_h];
pause(4000000);
}
void pause(int tim){
while(tim>0){
tim=tim-1;
};
}
Рисунок 7. Листинг программы электронных часов.
16
Отладка программы
Программа писалась в среде MPLABXv.1.0. Эта программа предназначена для программирования микроконтроллеров фирмы Microchip. После компиляции проекта она создаёт файлы с расширением .hex и .coff, которые используются для прошивки в микросхему. В нашей работе эти файлы предназначались для симулятора Proteus 7.0, в котором производилась отладка программы. Скриншоты программ представлены на рис. 8 и 9.
Создание проекта в программе MPLABX включает в себя создание главного файла, выбор микросхемы и устройства программирования (программатора). Программный код пишется в рабочем пространстве, подобно другим
средам программирования. Файлы .hex создаются с помощью команды RunProject. Также может быть осуществлена пошаговая отладка проекта с помощью команды Debug.
Симулятор Proteus представляет собой автоматизированную среду проектирования и моделирования радиоэлектронных устройств. В рабочем пространстве рисуется электрическая принципиальная схема устройства. Каждый элемент этой схемы имеет свою физическую модель и выбирается из
библиотеки компонентов. Для нашего проекта были выбраны микроконтроллер PIC18F4550,семисегментный индикатор и резисторы. Транзисторы для
симулятора непринципиальны. Для микроконтроллера может быть задана
тактовая частота, настройки режимов работы, а также может быть выбран
hex-файл прошивки, к которому нужно указать путь с помощью проводника.
На рис. 9 можно видеть процесс симуляции разработанной программы.
17
Рисунок 8. Среда программирования MPLABX.
18
Рисунок 9. Среда автоматического проектирования Proteus 7.0.
19
Часть 2
Принципиальная электрическая схема
Конечный вариант принципиальной электрической схемы включает в себя
следующие элементы (рис. 11):
 входная цепь,которая служит для выпрямления и стабилизации напряжения.Состоит из диода, конденсатора, резистораимикросхемного стабилизатора напряжения LS7805.
 исполняющая
схема,
включающая
микроконтроллер
PIC18F4550,светодиодный семисегментный индикатор и токоограничивающие элементы, описанные в Части 1.
 разъём под интерфейс ICSP (In-CircuitSerialProgramming), выводы которого связаны с ножками программирования PGC (ProgrammClock –
тактовая частота программатора) и PGD (ProgrammData – данные).
 кнопки настройки.
20
Рисунок 11. Электрическая принципиальная схема электронных часов, составленная в виртуальной среде Proteus 7.0.
21
Разводка и изготовление печатной платы
Рисунок печатной платы электронных часов создавался в виртуальной среде
SprintLayout 5.0. Основой для разводки служила принципиальная электрическая схема. При разводке уделено внимание следующим аспектам:
1) рациональномус точки зрения экономии места расположению основных элементов (микроконтроллер, семисегментный индикатор);
2) созданию однослойной печатной платы, что исключает необходимость
точного совмещения слоёв и, как следствие, упрощает процесс изготовления платы в домашних условиях;
3) выводу незадействованных ножек микроконтроллера PIC18F4550 в отдельные разъемы (на плате Р1 и Р2), что позволит в будущем использовать больше ресурсов микроконтроллера для усовершенствования
электронных часов или других проектов.
В итоге, был получен рисунок платы размером 75х80 мм (рис. 12).
По этим размерам из двухстороннего стеклотекстолита был вырезан шаблон, на который с помощью лазерно-утюжной технологии (ЛУТ) был нанесён рисунок. Технология ЛУТ состоит из трёх этапов:
1) очистка поверхности меди от грязи (до металлического блеска) и её
обезжиривание;
2) зеркальная печать на кальке рисунка платы с помощью лазерного
принтера в режиме неэкономии тонера (для создания толстого слоя
тонера, поскольку тонер почти не пристает к кальке);
3) перевод рисунка на медь с помощью высокой температуры (70 - 80°С);
для этого использовался утюг с ровной греющей поверхностью.
Следом производилось травление непокрытых тонером участков меди в
водном растворе хлорного железа (FeCl3). В процессе травления происходит
образование водо-нерастворимой соли CuCl2:2𝐹𝑒𝐶𝑙3 + 3𝐶𝑢 → 3𝐶𝑢𝐶𝑙2 +
2𝐹𝑒,которая выпадает из раствора в виде зелёного осадка.
После полного стравливания непокрытых участков меди проводилась отмывка тонераи лужение меди сплавом Розе.
Последним этапом создания платы была пайка и очистка её поверхности
от флюса. Фотографии готовой печатной платы приведены на рис. 13. Программирование микроконтроллера осуществлялось с помощью программатора PICKIT3.
22
Рисунок 12. Скриншот разводки в среде SprintLayout 5.0
Рис. 13.1 Внешний вид платы (вид спереди)
Рис. 13.2 Внешний вид платы (вид сзади)
23
Заключение
В процессе работы над данным проектом были решены задачи:
 приобретение общих сведений о программировании микроконтроллеров
серии PIC;
 освоение основы языка программирования С для микроконтроллеров;
 разработка принципиальной электрической схемы электронных часов;
 составление блок-схемы программы, и написание программы;
 отладка программы в симуляторе Proteus 7.0;
 создание модели платы часов в среде разводки электронных плат Layout
 создание и отладка действующих электронных часов“в железе”
Список литературы
1. PIC18F2455/2550/4455/4550DataSheet.
2. Справочник по среднему семейству микроконтроллеров PICmicroTM.
24
25
Download