Дипломная работа на тему Разработка и изготовление автомата подачи звонков

ДИПЛОМНАЯ РАБОТА

РАЗРАБОТКА И ИЗГОТОВЛЕНИЕ АВТОМАТА ПОДАЧИ ЗВОНКОВ

Содержание

Введение

Глава 1. Часы реального времени DS1307 и интерфейс I2C

1.1 Микросхемы часов реального времени (RTC)

1.2 Интерфейс I2C

Глава 2. Разработка принципиальной электрической схемы и печатной платы автомата подачи звонков

2.1 Разработка блок схемы автомата

2.2 Разработка принципиальной электрической схемы автомата

2.3 Разработка, изготовление печатной платы

Глава 3. Разработка программы для микроконтроллера

3.1 Разработка блок схемы программы

3.2 Разработка программы на Cи и программирование микроконтроллера

3.3 Тестирование устройства

Заключение

Список информационных источников

Приложения

Введение

То, что время одна из двух основных форм существования материи, известно еще со школы. Однако нас интересует сейчас не философское понятие, а проблема измерения времени.

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

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

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

Для осуществления поставленной цели необходимо было решить следующие задачи:

1. Проанализировать радиотехническую литературу и выявить недостатки предлагаемых электронных устройств разработанных ранее студентами Малютиным В.А. (2005 г.) и Яцкивым И.С. (2002 г.).

2. Выбрать средство разработки программного обеспечения. Разработать и написать программу для данного микроконтроллера.

3. Разработать принципиальные электрические схемы устройства. Разработать и изготовить печатные платы автомата.

4. Провести испытания автомата подачи звонков.

Глава 1. Часы реального времени DS1307 и интерфейс I2C

1.1 Микросхемы часов реального времени (RTC)

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

Существует множество микросхем RTC. Это такие как DS1994 и DS1904 выпускаемые фирмой Dallas Semiconductor. Их отличительной особенностью является способ представления времени. Сами часы выполнены как двоичный счётчик с разрешением 1/256 с. Минуты, часы, дни, годы вычисляются из числа секунд, прошедших от условно выбранной даты.

Также есть RTC компании ST, содержащие минимум необходимого для непрерывной выдачи в систему реального времени. К таким устройствам относятся микросхемы M41T0 и M41T80. Они содержат полный набор счетчиков времени и учитывают особенности високосных лет. К дополнительным возможностям этих устройств относятся программируемый сигнал аварии с функцией обработки прерываний, программируемый выходной меандр и отдельный вывод сигнала с частотой 32 кГц, используемый как эталонный входной сигнал для тактовых генераторов других микросхем. Имея такие возможности, данные микросхемы покрывают потребности приложений в значительной части потребительского рынка.

Мы же с своей работе выбираем RTC фирмы Dallas Semiconductor, упомянутой ранее, DS1307.

Характеристики

– часы реального времени (RTC) отсчитывают секунды, минуты, часы, дату месяца, месяц, день недели и год с компенсацией високосного года, действительной до 2100 года;

– 56-байтовое энергонезависимое ОЗУ с питанием от батареи для хранения пользовательских данных;

– двухпроводной последовательный интерфейс;

– программируемый выходной сигнал с прямоугольными импульсами (для тактирования внешних устройств);

– автоматическое обнаружение падения напряжение и схема переключения на батарею;

– потребление менее 500 нА в режиме батарейной поддержки при работающем тактовом генераторе;

– промышленный диапазон температур: от – 40 °C до + 85 °C;

– микросхема производится в 8-выводных корпусах DIP и SOIC.

Классификация

DS1307 – 8-выводный DIP (300 миллидюймов – 7.62 мм)

DS1307Z – 8-выводный SOIC (150 миллидюймов – 3.81 мм)

DS1307N – 8-выводный DIP (промышленный)

DS1307ZN – 8-выводный SOIC (промышленный)

Расположение выводов

DS1307 8-выводный DIP (300 миллидюймов)

DS1307 8-выводный SOIC (150 миллидюймов)

Назначение выводов

VCC – первичный источник питания;

X1, X2 – подключение 32.768 кГц кварцевого резонатора;

VBAT – вход батареи +3 В;

GND – общий минус;

SDA – последовательные данные;

SCL – последовательные синхроимпульсы;

SQW/OUT – выходной сигнал с прямоугольными импульсами.

Описание

Часы реального времени с последовательным интерфейсом DS1307 – это малопотребляющие полные двоично-десятичные часы-календарь, включающие 56 байтов энергонезависимой статической ОЗУ. Адреса и данные передаются последовательно по двухпроводной двунаправленной шине. Часы-календарь отсчитывают секунды, минуты, часы, день, дату, месяц и год. Последняя дата месяца автоматически корректируется для месяцев с количеством дней меньше 31, включая коррекцию високосного года. Часы работают как в 24-часовом, так и в 12-часовом режимах с индикатором AM/PM. DS1307 имеет встроенную схему наблюдения за питанием, которая обнаруживает перебои питания и автоматически переключается на питание от батареи. Для измерения времени в качестве задающего генератора используется кварцевый резонатор частотой 32.768 кГц.

Типовая схема включения

Работа

DS1307 на последовательной шине работает как ведомое устройство. Доступ к нему достигается установкой условия START и передачей устройству идентификационного кода, за которым следует адрес регистра. К следующим за ним регистрам доступ осуществляется последовательно, пока не будет выполнено условие STOP.

Если VCC падает ниже 1.25 * VBAT, DS1307 прерывает процесс доступа и сбрасывает счётчик адреса, причем в это время внешние сигналы не воспринимаются (чтобы предотвратить запись ошибочных данных).

Если VCC падает ниже VBAT, DS1307 переключается в низкоточный режим батарейной поддержки.

При включении питания DS1307 переключается от батареи к Vcc, когда значение Vcc превышает VBAT + 0.2 В. Входящие сигналы начинают восприниматься тогда, когда Vcc превышает 1.25 * VBAT.

Блок-схема на рисунке 1 показывает основные элементы RTC с последовательным интерфейсом.

Рис. 1. Блок-схема DS1307

Описание выводов

VCC, GND – на эти выводы подается питание.

VCC – это вход +5 В. Когда питающее напряжение выше 1.25 * VBAT, устройство полностью доступно, и можно выполнять чтение и запись данных. Когда к устройству подключена батарея на 3 В, и VCC ниже, чем 1.25 * VBAT, чтение и запись запрещены, однако функция отсчёта времени продолжает работать. Как только VCC падает ниже VBAT, ОЗУ и RTC переключаются на батарейное питание VBAT.

VBAT – вход для любой стандартной трёхвольтовой литиевой батареи или другого источника энергии. Для нормальной работы DS1307 необходимо, чтобы напряжение батареи было в диапазоне 2.0… 3.5 В. Литиевая батарея с ёмкостью 48 мА/ч или более при отсутствии питания будет поддерживать DS1307 в течение более 10 лет при температуре 25°C.

SCL (Serial Clock Input – вход последовательных синхроимпульсов) – используется для синхронизации данных по последовательному интерфейсу.

SDA (Serial Data Input/Output – вход/выход последовательных данных) – вывод входа/выхода для двухпроводного последовательного интерфейса. Вывод SDA – с открытым стоком и требует внешнего подтягивающего резистора.

SQW/OUT (Square Wave/Output Driver – сигнал с прямоугольными импульсами) – когда включен, т.е. бит SQWE установлен в 1, вывод SQW/OUT выдаёт прямоугольные импульсы с одной из четырёх частот (1 Гц, 4 кГц, 8 кГц, 32 кГц). Вывод SQW/OUT – с открытым стоком и требует внешнего подтягивающего резистора. SQW/OUT будет работать как при питании от VCC, так и при питании от VBAT.

X1, X2 – выводы для стандартного кварцевого резонатора с частотой 32.768 кГц.

RTC и карта адресации памяти

Карта адресов для RTC и регистров ОЗУ представлена на рисунке 2. Регистры RTC расположены в ячейках адресов от 00h до 07h. Регистры ОЗУ расположены в ячейках адресов от 08h до 3Fh. В процессе многобайтного доступа, когда адресный указатель достигает 3Fh (конец пространства ОЗУ), он перемещается на ячейку 00h – начало пространства RTC.

Рис. 2. Карта адресов DS1307

Часы и календарь

Информация от часов и календаря получается чтением соответствующих байтов регистра. Регистры RTC показаны на рисунке 3. Время и календарь устанавливаются или инициализируются записью соответствующих байтов регистра. Содержимое регистров времени и календаря имеет двоично-десятичный формат. Бит 7 регистра 0 – это бит останова часов (clock halt – CH). Когда этот бит установлен в 1, тактовый генератор выключен. Когда сброшен в 0, – тактовый генератор включен.

Имейте в виду, что при включении питания начальное состояние всех регистров не определено. Поэтому необходимо принудительно включать тактовый генератор (бит CH = 0) во время начальной инициализации.

DS1307 может работать и в 12-часовом, и в 24-часовом режимах. Бит 6 регистра часов отвечает за выбор 12- или 24-часового режима. Когда он установлен в 1, выбран 12-часовой режим. В этом режиме бит 5 – это бит AM/PM, при этом высокий логический уровень означает PM. В 24-часовом режиме бит 5 – это бит второго десятка часов (20 – 23 часа).

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

Рис. 3. Регистры хронометра DS1307

Управляющий регистр

Управляющий регистр используется для управления работой вывода SQW/OUT. Биты управляющего регистра представлены в таблице 1.

Таблица 1. Биты управляющего регистра

БИТ 7

БИТ 6

БИТ 5

БИТ 4

БИТ 3

БИТ 2

БИТ 1

БИТ 0

OUT

0

0

SQWE

0

0

RS1

RS0

OUT (Output control – управление выходом) – этот бит управляет логическим уровнем на выводе SQW/OUT, когда выход сигнала с прямоугольными импульсами отключен. Если SQWE = 0, то логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0, если OUT = 0.

SQWE (Square Wave Enable – включение сигнала с прямоугольными импульсами) – когда этот бит установлен в 1, включается генерация прямоугольных импульсов. Их частота зависит от значения битов RS0 и RS1. (Если частота выходного сигнала установлена в 1Гц, регистры часов обновляются по заднему фронту этих импульсов).

RS (Rate Select – выбор частоты) – эти биты управляют частотой прямоугольных импульсов, когда бит SQWE=1. В таблице 2 приведены частоты, которые можно выбрать с помощью битов RS.

Таблица 2. Частота выхода SQW

RS1

RS0

Частота

0

0

1 Гц

0

1

4.096 кГц

1

0

8.192 кГц

1

1

32.768 кГц

1.2 Интерфейс I2C

I2C – двухпроводный последовательный интерфейс, разработанный корпорацией Philips. В Первоначальном техническом требовании к интерфейсу максимальная скорость передачи данных составляла 100 Кбит/с. Однако позже появились стандартные более скоростные режимы работы шины I2C (400Кбит/с и 1Мбит/с). К одной шине I2C могут быть подключены устройства с различными скоростями доступа, если скорость передачи данных будет удовлетворять требованиям самого низкоскоростного устройства.

Протокол передачи данных по шине I2C разработан таким образом, чтобы гарантировать надежный качественный прием/передачу данных. При передаче данных одно устройство является “Ведущим”, которое инициирует передачу данных и формирует сигналы синхронизации. Другое устройство “Ведомое”, которое может начать передачу данных только по команде ведущего шины. Модуль SSP микроконтроллеров Р1С16СХХХ полностью поддерживает режим ведомого I2C, за исключением поддержки адреса общего вызова (режим ведущего реализуется программно) Модуль MSSP аппаратно поддерживает режим ведущего/ведомого I2C, адрес общего вызова и скорость обмена данными до 1Мбит/с. Скорость передачи данных 1Мбит/с используют некоторые микросхемы последовательной EEPROM памяти.

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

Ведущий передатчик – ведомый приемник.

Ведомый передатчик- ведущий приемник.

В обоих случаях ведущий формирует тактовый сигнал.

DS1307 поддерживает обмен данными по протоколу I2C по двухпроводной двунаправленной шине. Устройство, которое передаёт данные на шину, является передатчиком, а устройство, принимающее данные, – приёмником. Устройство, управляющее передачей данных, называется ведущим. Устройство, которым управляет ведущий, называется ведомым. Ведущее устройство генерирует синхроимпульсы (serial clock – SCL), управляет доступом к шине и генерирует условия START и STOP. DS1307 работает на шине как ведомое устройство. Типовая конфигурация шины с использованием протокола I2C показана на рис. 4.

Рис. 4. Типовая конфигурация двухпроводной шины

На рис. 5, 6 и 7 подробно показан процесс передачи данных по двухпроводной шине.

Основные принципы передачи данных по шине I2C:

1) Передача данных может быть инициирована только когда шина свободна.

2) Во время передачи данные на линии SDA могут меняться только когда на линии SCL низкий уровень, в противном случае изменение данных будет интерпретироваться как управляющий сигнал.

Таким образом, возможны следующие состояния шины:

Шина не занята – на линиях SDA и SCL сохраняется высокий уровень.

Начало передачи данных (условие START) – изменение состояния линии SDA с высокого на низкий, в то время как на линии SCL высокий уровень.

Окончание передачи данных (условие STOP) – изменение состояния линии SDA с низкого на высокий, в то время как на линии SCL высокий уровень.

Корректные данные – состояние линии SDA представляет корректные данные, если после условия START состояние линии SDA не меняется в течение высокого уровня тактового сигнала. Данные на линии должны меняться в течение периода низкого уровня тактового сигнала. На один бит данных приходится один тактовый импульс.

Каждая передача данных инициируется условием START и завершается условием STOP. Число байтов данных, передаваемых между условиями START и STOP, не ограничено и определяется ведущим устройством. Информация передаётся побайтово, и каждый байт приёмник подтверждает девятым битом (бит подтверждения – ACK). В спецификации двухпроводного интерфейса определены обычный режим (с тактовой частотой 100 кГц) и быстрый режим (с тактовой частотой 400 кГц). DS1307 работает только в обычном режиме (100 кГц).

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

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

* – бит чтения/записи или бит направления

Рис. 5. Передача данных по двухпроводной последовательной шине

В зависимости от состояния бита возможны два типа передачи данных:

1) Передача данных от ведущего передатчика ведомому приёмнику.

Первый байт, передаваемый ведущим, – это адрес ведомого. Далее следует некоторое количество байтов данных. Ведомый возвращает подтверждающий бит после каждого принятого байта. Данные передаются, начиная со старшего бита (most significant bit – MSB).

2) Данные передаются от ведомого передатчика ведущему приёмнику.

Первый байт (адрес ведомого) передаётся ведущим. Ведомый возвращает подтверждающий бит. За ним следует передаваемое ведомым некоторое количество байтов данных. Ведущий возвращает подтверждающий бит после всех принимаемых байтов кроме последнего байта. В конце последнего принятого байта возвращается “неподтверждение”. Ведущее устройство генерирует все последовательные синхроимпульсы, а также условия START и STOP. Передача заканчивается условием STOP или повтором условия START. Поскольку повторение условия START также является и началом следующей последовательной передачи, шина не освобождается. Данные передаются, начиная со старшего бита.

DS1307 может работать в следующих двух режимах:

1) Режим ведомого приёмника (режим записи DS1307).

Последовательные данные принимаются по SDA и синхронизируются по SCL. После каждого принятого байта передаётся бит подтверждения. Условия START и STOP распознаются как начало и конец последовательной передачи. Распознавание адреса выполняется аппаратно после приёма адреса ведомого и бита направления (см. рис. 6).

Байт адреса – это первый байт, принятый после генерации ведущим условия начала. Он содержит 7 битов адреса DS1307, который имеет значение 1101000, и следующий за ним бит направления (), который для записи равен 0. После приёма и декодирования адресного байта DS1307 выдаёт на линию SDA подтверждение, после чего ведущий передаёт в устройство адрес регистра. Это установит регистровый указатель. Затем ведущий начинает передачу байтов данных, каждый из которых будет подтверждаться DS1307. Чтобы завершить запись данных, ведущий генерирует условие окончания.

Рис. 6. Запись данных – режим ведомого приёмника

2) Режим ведомого передатчика (режим чтения DS1307).

Первый байт принимается и обрабатывается так же, как и в режиме ведомого приёмника. Однако в этом режиме бит направления будет указывать, что направление передачи инвертировано. DS1307 передаёт последовательные данные по линии SDA пока на линию SCL поступают последовательные синхроимпульсы. Условия START и STOP распознаются в начале и в конце последовательной передачи (см. рис. 7).

Байт адреса – первый байт, принимаемый после стартового условия, генерируется ведущим. Байт адреса состоит из 7-битного адреса DS1307, который равен 1101000, и следующего за ним бита направления передачи (), который для чтения равен 1. После приёма и декодирования байта адреса, устройство выдаёт подтверждение на линию SDA. Затем DS1307 начинает передавать данные, начиная с указанного адреса, находящегося в регистровом указателе. Если перед началом чтения указатель регистра не записан, то первый читаемый адрес – это адрес, который был сохранён в нём последним. DS1307 должен принять “неподтверждение” для окончания чтения.

Рис. 7. Чтение данных – режим ведомого передатчика

Удобства применения шины I2C очевидны – малое количество соединительных линий и высокая скорость обмена, простота аппаратной реализации линии связи. Наиболее широко поддерживает шину I2C, конечно же, фирма Philips, производящая множество ИС различной сложности с управлением по I2C. В первую очередь, можно выделить микросхемы энергонезависимой памяти (EEPROM) серии 24Схх в 8-ми выводных корпусах, фактически ставшие промышленным стандартом. Из широко распространенных ИС можно выделить: микросхемы часов PCF8583, параллельный порт PCF8574, 4-х канальный 8-ми разрядный АЦП PCF8591. Существует множество модификаций этих ИС и более специализированные контроллеры.

С использованием I2C разработано множество продуктов, особенно в области бытовой электроники.

Глава 2. Разработка принципиальной электрической схемы и печатной платы автомата подачи звонков

2.1 Разработка блок схемы автомата

Рассмотрим блок-схемы предыдущих версий Автомата подачи звонков разработанных студентами факультета технологии и предпринимательства.

Ш Блок-схема автомата подачи звонков разработанного Яцкивым И.С. приведена на рисунке 8. Автомат содержит следующие блоки: электронные часы с блоком управления, блок памяти с дешифратором адреса (преобразователь уровней, формирователь статического двоично-десятичного кода текущего времени, репрограммируемое постоянное запоминающее устройство (РПЗУ)), таймер с электронным реле, к которому подключается нагрузка, сетевой блок питания с возможностью переключения на питание от аккумулятора отдельных элементов автомата.

Рис. 8. Блок-схема автомата подачи звонков разработанного Яцкивым И.С.

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

Ш Блок-схема автомата подачи звонков разработанного Малютиным В.А. приведена на рисунке 9. Структурная схема электронных часов на микропроцессоре состоит из 6 основных блоков. Тактовый генератор предназначен для генерации импульсов частотой 4 МГц для тактирования микропроцессора и программируемого таймера.

Рис. 9. Блок-схема автомата подачи звонков разработанного Малютиным В.А.

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

Малютин В.А. использовал меньшее количество корпусов за счет использования микроконтроллера, который заменяет корпуса у Яцкива И.С. Но работа его автомата была неустойчивая и подвержена различным помехам, из-за чего часы постоянно сбрасывались и автомат нужно было постоянно перенастраивать.

Ш Блок-схема автомата разработанного нами показана на рисунке 10.

Рис. 10. Блок-схема автомата разработанного нами

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

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

2.2 Разработка принципиальной электрической схемы автомата

При разработке нашего автомата было решено оставить микроконтроллер PIC16F84, ранее подобранный Малютиным В.А.

Применение микроконтроллеров PIC16F84 приводит к резкому уменьшению размеров устройства потребляемой мощности и количества используемых элементов. При разработке устройств на микроконтроллерах разработчику электронной схемы необходимо выбрать частоту тактового генератора для поставленной задачи и следить за тем, чтобы максимальная нагрузка на порты ввода вывода не превышала допустимую. Кристаллы PIC16F84 могут работать с четырьмя типами встроенных генераторов. Пользователь может запрограммировать два конфигурационных бита (FOSC1 и FOSC0) для выбора одного из четырех режимов: RC, LP, XT, HS. Кристаллы PIC16… могут также тактироваться и от внешних источников. Генератор, построенный на кварцевых или керамических резонаторах, требует периода стабилизации после включения питания. Для этого, встроенный таймер запуска генератора держит устройство в состоянии сброса примерно 18 мс после того, как сигнал на /MCLR ножке кристалла достигнет уровня логической единицы. Таким образом, внешняя цепочка RC, связанная с ножкой /MCLR во многих случаях не требуется. При частотах ниже 500 кГц, внутренний генератор может генерировать сбойный импульс на гармониках, когда переключается бит 0 порта A. Этого не происходит при использовании внешнего генератора или при встроенном RC генераторе. PIC16F84-XT, -HS или -LP требуют подключения кварцевого или керамического резонатора к выводам OSC1 и OSC2 [5]. Маркировка следующая: XT – стандартный кварцевый генератор, HS – высокочастотный кварцевый генератор, LP – низкочастотный генератор (в основном часовой на частоту 32768Гц) для экономичных приложений.*

Принципиальная электрическая схема автомата, разработанная нами представлена на рисунке 11 и в приложении 1. Также в приложении приведена спецификация радиоэлементов, использованных в автомате.

Рис. 11. Принципиальная электрическая схема

2.3 Разработка, изготовление печатной платы

плата автомат звонок микроконтроллер

С помощью САРПР PCAD по принципиальной электрической схеме нами была разработана печатная плата автомата. Результаты этой работы представлены в приложении 3.

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

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

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

– на диске ПК имелся набор программ системы PCAD;

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

– имелись библиотеки радиоэлементов, причем, параметры символьных отображений компонентов (файлы *.sym, соответствующие изображениям радиоэлементов на принципиальной схеме) должны находиться в соответствии с аналогичными параметрами конструкторско-технологических образов этих компонентов (файлы *.prt, соответствующие изображениям корпусов радиоэлементов на печатной плате). Элементы, которых нет в библиотеке, создавались вручную, и заносились в библиотеку.

Для создания и вывода на печать изображения печатных плат использовался лазерный принтер и программа PC-CARDS и PC-PRINT из пакета программ САПР PCAD соответственно. Изображение печатных плат со стороны расположение элементов выводиться на печать в зеркальном отображении.

Заготовка печатной платы вырезается из стеклотекстолита. Она шлифуется наждачной бумагой №0 и стиральной резинкой, после этого промывается водой и обезжиривается спиртом или ацетоном.

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

После этого производят травление платы. Травят плату обычно в растворе хлорного железа. Нормальной концентрацией раствора можно считать 20…50%. Разводят, примерно, 500 г порошка хлорного железа в горячей кипяченой воде до получения общего объема раствора, равного 1 л. Раствор переливается в обычную ванночку (например использовать фотографический кювет). Продолжительность травления – 10…60 мин, она зависит от температуры, концентрации раствора, толщины медной фольги. Травление проводят под вытяжкой или в хорошо проветриваемом помещении.

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

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

Глава 3. Разработка программы для микроконтроллера

3.1 Разработка блок схемы программы

Алгоритм программы для работы автомата показан на рисунке 12.

По сбросу программа стартует с адреса 0000h.

Далее происходит следующее:

– Происходит настройка портов ввода-вывода.

– Включаются встроенные подтягивающие резисторы

– Включается режим отображения времени

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

– Начинается индикация текущего времени.

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

Рис. 12. Алгоритм программы

3.2 Разработка программы на Cи и программирование микроконтроллера

На основе разработанной блок-схемы была разработана программа на языке программирования Си.

Текст программы приведен в приложении 5.

Программа состоит из следующих процедур:

ь i2c_in_byte (чтение байта)

ь i2c_out_byte (запись байта)

ь i2c_nack (неподтверждение)

ь i2c_ack (подтверждение)

ь i2c_start (стартовый бит)

ь i2c_stop (стоповый бит)

ь i2c_high_sda (высокий уровень тактового импульса на линии SDA)

ь i2c_low_sda (низкий уровень тактового импульса на линии SDA)

ь i2c_high_scl (высокий уровень тактового импульса на линии SCL)

ь i2c_low_scl (низкий уровень тактового импульса на линии SCL)

ь delay_ms, delay_10us (задержки)

ь eeprom_rd (чтение данных с EEPROM)

ь eeprom_wr (запись данных с EEPROM)

ь init_DS1307 (инициализация микросхемы часов DS1307)

ь read_DS1307 (чтение данных с DS1307)

ь write_DS1307 (запись данных в DS1307)

ь indikator (вывод на индикатор)

3.3 Тестирование устройства

После изготовления платы и написания программы было произведено тестирование устройства. При этом были выявлены следующие недостатки:

· Было упущено, что вывод RA4 микросхемы PIC16F84 является выводом с открытым коллектором. В связи с этим была доработана схема. В §2.2 и приложении приведена исправленная принципиальная электрическая схема.

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

· Изначально был взят блок питания от зарядного устройства сотового телефона, и он выдавал недостаточное напряжение. С блока был выпаян резистор, создающий дополнительную нагрузку.

Заключение

Результаты, достигнутые при выполнении дипломной работы:

· Проанализирована радиотехническая литература.

· Выявлены недостатки автоматов подачи звонков разработанных студентами нашего факультета Малютина В.А. и Яцкива И.С.

· Разработана структурная схема автомата подачи звонков.

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

· Разработана и написана программа на языке программирования Си для автомата подачи звонков.

· При испытании автомата были выявлены некоторые недостатки, которые были устранены.

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

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

Список информационных источников

1. PCAD.

2. MPLAB IDE.

3. ICPROG.

4. Microsoft Excel.

5. Microsoft Word.

6. Китайгородский М.Д. Основы автоматизированного проектирования принципиальных электрических схем и печатных плат. Сыктывкар, 2001.

7. Китайгородский М.Д. Программирование микроконтроллеров. Лабораторный практикум. Сыктывкар, 2006.

8. Яценков В.С. Микроконтроллеры Microchip. Практическое руководство. – М.: Горячая линия – Телеком, 2002. – 296 с.: ил.

9. Белов А.В. Самоучитель по микропроцессорной технике. – СПб.: Наука и техника, 2003 – 224 с: ил.

10. http://kapmim.narod.ru

11. http://microchip.ru

12. http://telemaster.ru

13. http://atlastelecom.ru

Приложение 1

Принципиальная электрическая схема.

Приложение 2

Спецификация радиоэлементов.

Позиционное обозначение

Наименование

Количество

R1

R2- R11

С1

С2

С3

С4

VD2

Z1

Z2

CPU

DS1307

KR514ID2

GB

MOC3041

VD1

HLEC-F512

SB1, SB2

Резисторы:

ОМЛТ-0,125 -330 Ом

ОМЛТ-0,125 -360 Ом

Конденсаторы:

К10-7В 10 нФ

К10-7В 10 нФ

К10-7В 33 пФ

К10-7В 33 пФ

Симмистор

ТС106-10-6

Кварцевый резонатор 3.2768 кГц

Кварцевый резонатор 4 МГц

Микросхемы

PIC16F84

DS1307

KR514ID2

Гальванический элемент на 3В

Опто-симмистор

Светодиод

Индикатор

Кнопки

1

10

1

1

1

1

1

1

1

1

1

1

1

1

1

1

2

Приложение 3

Рисунки печатной платы.

Приложение 4

Фото автомата подачи звонков.

Приложение 5

Программа

#include <pic.h>

#include <string.h>

//#include <defs_f84.h> // See Notes

__CONFIG(XT & WDTDIS & PWRTEN & UNPROTECT);

// common i2c routines

unsigned char d;

unsigned char i2c_in_byte(void);

void i2c_out_byte(unsigned char o_byte);

void i2c_nack(void);

void i2c_ack(void);

void i2c_start(void);

void i2c_stop(void);

void i2c_high_sda(void);

void i2c_low_sda(void);

void i2c_high_scl(void);

void i2c_low_scl(void);

void delay_ms(long t);

void delay_10us(unsigned char t);

unsigned char eeprom_rd(unsigned char adr);

eeprom_wr(unsigned char adr, unsigned char dat);

init_DS1307();

unsigned char read_DS1307 (unsigned char adr);

write_DS1307 (unsigned char adr, unsigned char dat);

indikator(unsigned char ch, unsigned char m);

knopka6(unsigned char ch, unsigned char m);

knopka7(unsigned char ch, unsigned char m);

zvonok(unsigned char ch, unsigned char m);

#define SDA_PIN RB4 // RB.4

#define SCL_PIN RB5 // RB.5

#define SDA_DIR TRISB4

#define SCL_DIR TRISB5

// ————————————-

void main(void)

{

unsigned char ch,m,s,x,ch0,m0,i;

// unsigned char zvon[56];

PORTA = 0;

PORTB = 0;

TRISA = 0b00000000;

TRISB = 0b11000000;

RBPU = 0;

d=0;

eeprom_wr(0,0×08); eeprom_wr(1,0×15);

eeprom_wr(2,0×09); eeprom_wr(3,0×00);

eeprom_wr(4,0×09); eeprom_wr(5,0×05);

eeprom_wr(6,0×09); eeprom_wr(7,0×50);

eeprom_wr(8,0×10); eeprom_wr(9,0×00);

eeprom_wr(10,0×10); eeprom_wr(11,0×45);

eeprom_wr(12,0×10); eeprom_wr(13,0×50);

eeprom_wr(14,0×11); eeprom_wr(15,0×35);

eeprom_wr(16,0×12); eeprom_wr(17,0×15);

eeprom_wr(18,0×13); eeprom_wr(19,0×00);

eeprom_wr(20,0×13); eeprom_wr(21,0×05);

eeprom_wr(22,0×13); eeprom_wr(23,0×50);

eeprom_wr(24,0×14); eeprom_wr(25,0×00);

eeprom_wr(26,0×14); eeprom_wr(27,0×45);

eeprom_wr(28,0×14); eeprom_wr(29,0×50);

eeprom_wr(30,0×15); eeprom_wr(31,0×35);

// zao4niki

eeprom_wr(32,0×16); eeprom_wr(33,0×00);

eeprom_wr(34,0×16); eeprom_wr(35,0×45);

eeprom_wr(36,0×16); eeprom_wr(37,0×50);

eeprom_wr(18,0×17); eeprom_wr(19,0×35);

eeprom_wr(18,0×17); eeprom_wr(19,0×45);

eeprom_wr(18,0×18); eeprom_wr(19,0×30);

eeprom_wr(18,0×18); eeprom_wr(19,0×35);

eeprom_wr(18,0×19); eeprom_wr(19,0×20);

eeprom_wr(18,0×19); eeprom_wr(19,0×30);

eeprom_wr(18,0×20); eeprom_wr(19,0×15);

eeprom_wr(18,0×20); eeprom_wr(19,0×20);

eeprom_wr(18,0×21); eeprom_wr(19,0×05);

//for (i=0,i++,i<56)

//{zvon[i]=eeprom_rd(i)};

// Определение пропадания питания

s = read_DS1307(0);

if ((s & 128)==128) init_DS1307();

write_DS1307(7,128);

while(1)

{

s = read_DS1307(0);

indikator(ch,m);

m = read_DS1307(1);

indikator(ch,m);

ch = read_DS1307(2);

indikator(ch,m);

if (RB7 == 0) knopka7(ch,m);

if (RB6 == 0) knopka6(ch,m);

if (s==0)

{

for (i=0;i<56;i=i+2)

{

ch0 = eeprom_rd(i);

m0 = eeprom_rd(i+1);

if ((ch == ch0)&&(m==m0)) zvonok(ch,m);

}

}

indikator(ch,m);

}

}

//————————————

zvonok(unsigned char ch, unsigned char m)

{

unsigned int z;

for (z=0;z<700;z++)

{

PORTB= m & 0b00001111;;

PORTA=1;

delay_ms(20);

PORTB=(m >> 4) & 0b0111;

PORTA=2;

delay_ms(20);

PORTB= ch & 0b00001111;;

PORTA=4;

delay_ms(20);

PORTB=(ch >> 4) & 0b0011;

PORTA=8;

delay_ms(20);

PORTA=0;

//PORTB=15;

//write_DS1307(7,0);

//PORTA=8;

//delay_ms(20);

//write_DS1307(7,128);

}

}

knopka7(unsigned char ch, unsigned char m)

{

if ((d>9) && (ch >= 0x23))

{ch=0;

write_DS1307(2,ch);

d=0;

}

if ((d>9) && ((ch & 15)< 9))

{ch++;

write_DS1307(2,ch);

d=0;

}

if ((d>9) && ((ch & 15)>=9))

{ ch = (ch & 0xf0)+16;

write_DS1307(2,ch);

d=0;

}

d++;

}

knopka6(unsigned char ch, unsigned char m)

{

if ((d>9) && (m >= 0x59))

{m=0;

write_DS1307(1,m);

d=0;

}

if ((d>9) && ((m & 15)< 9))

{m++;

write_DS1307(1,m);

d=0;

}

if ((d>9) && ((m & 15)>=9))

{ m = (m & 0xf0)+16;

write_DS1307(1,m);

d=0;

}

d++;

}

indikator(unsigned char ch, unsigned char m)

{

PORTB= m & 0b00001111;;

PORTA=17;

delay_ms(20);

PORTB=(m >> 4) & 0b0111;

PORTA=18;

delay_ms(20);

PORTB= ch & 0b00001111;;

PORTA=20;

delay_ms(20);

PORTB=(ch >> 4) & 0b0011;

PORTA=24;

delay_ms(20);

PORTA=16;

//PORTB=15;

//write_DS1307(7,0);

//PORTA=20;

//delay_ms(20);

//write_DS1307(7,128);

}

unsigned char read_DS1307 (unsigned char adr)

{

unsigned char dat;

i2c_start();

i2c_out_byte(0xD0); // адрес микросхемы DS1307 для записи

i2c_nack();

i2c_out_byte(adr); // адрес регистра часов в микросхеме DS1307

i2c_nack();

i2c_start();

i2c_out_byte(0xD1); // адрес микросхемы DS1307 для чтения

i2c_nack();

dat=i2c_in_byte();

i2c_nack();

i2c_stop();

return(dat);

}

write_DS1307(unsigned char adr, unsigned char dat)

{

i2c_start();

i2c_out_byte(0xD0); // адрес микросхемы DS1307 для записи

i2c_nack();

i2c_out_byte(adr); // адрес регистра часов в микросхеме DS1307

i2c_nack();

i2c_out_byte(dat);

i2c_nack();

i2c_stop();

}

//————————————————————

// Инициализация DS1307

init_DS1307()

{ i2c_start();

i2c_out_byte(0xD0); // адрес микросхемы DS1307 для записи

i2c_nack();

i2c_out_byte(0); // адрес регистра секунд в микросхеме DS1307

i2c_nack();

i2c_out_byte(0); // инициализация часов и бита CH (вкл кварца)

i2c_nack();

i2c_start();

i2c_out_byte(0xD0); // адрес микросхемы DS1307 для записи

i2c_nack();

i2c_out_byte(1); // адрес регистра минут в микросхеме DS1307

i2c_nack();

i2c_out_byte(0); // инициализация минут

i2c_nack();

i2c_start();

i2c_out_byte(0xD0); // адрес микросхемы DS1307 для записи

i2c_nack();

i2c_out_byte(2); // адрес регистра часов в микросхеме DS1307

i2c_nack();

i2c_out_byte(0); // инициализация часов

i2c_nack();

i2c_stop();

}

unsigned char eeprom_rd(unsigned char adr)

{

EEADR = adr;

RD = 1;

return(EEDATA);

}

eeprom_wr(unsigned char adr, unsigned char dat)

{

EEADR = adr;

EEDATA = dat;

GIE = 0;

WREN = 1;

#asm

movlw 0x55

movwf 0x89

movlw 0xAA

movwf 0x89

#endasm

WR = 1;

while(WR);

WREN = 0;

GIE = 1;

}

// Common I2C Routines

unsigned char i2c_in_byte(void)

{

unsigned char i_byte, n;

i2c_high_sda();

for (n=0; n<8; n++)

{

i2c_high_scl();

if (SDA_PIN)

{

i_byte = (i_byte << 1) | 0x01; // msbit first

}

else

{

i_byte = i_byte << 1;

}

i2c_low_scl();

}

return(i_byte);

}

void i2c_out_byte(unsigned char o_byte)

{

unsigned char n;

for(n=0; n<8; n++)

{

if(o_byte&0x80)

{

i2c_high_sda();

}

else

{

i2c_low_sda();

}

i2c_high_scl();

i2c_low_scl();

o_byte = o_byte << 1;

}

i2c_high_sda();

}

void i2c_nack(void)

{

i2c_high_sda(); // data at one

i2c_high_scl(); // clock pulse

i2c_low_scl();

}

void i2c_ack(void)

{

i2c_low_sda(); // bring data low and clock

i2c_high_scl();

i2c_low_scl();

i2c_high_sda();

}

void i2c_start(void)

{

i2c_low_scl();

i2c_high_sda();

i2c_high_scl(); // bring SDA low while SCL is high

i2c_low_sda();

i2c_low_scl();

}

void i2c_stop(void)

{

i2c_low_scl();

i2c_low_sda();

i2c_high_scl();

i2c_high_sda(); // bring SDA high while SCL is high

// idle is SDA high and SCL high

}

void i2c_high_sda(void)

{

// bring SDA to high impedance

SDA_DIR = 1;

//SDA_PIN = 1;

//SDA_DIR = 0;

delay_10us(5);

}

void i2c_low_sda(void)

{

SDA_PIN = 0;

SDA_DIR = 0; // output a hard logic zero

delay_10us(5);

}

void i2c_high_scl(void)

{

SCL_DIR = 1; // high impedance

delay_10us(5);

}

void i2c_low_scl(void)

{

SCL_PIN = 0;

SCL_DIR = 0;

delay_10us(5);

}

// LCD routines

void delay_10us(unsigned char t)

{

#asm

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

#endasm

/*

#asm

BCF STATUS, RP0

DELAY_10US_1:

CLRWDT

NOP

NOP

NOP

NOP

NOP

NOP

DECFSZ t, F

GOTO DELAY_10US_1

#endasm

*/

}

void delay_ms(long t) // delays t millisecs

{

do

{

delay_10us(100);

} while(–t);

}

/*

void indikator{unsigned char m1,cp)

{ //Вывод на индикаторы

PORTB= m1 & 0b00001111;;

PORTA=1;

delay_ms(40);

PORTB=(m1 >> 4) & 0b0111;

PORTA=2;

delay_ms(40);

PORTB= cp & 0b00001111;;

PORTA=4;

delay_ms(40);

PORTB=(cp >> 4) & 0b0011;

PORTA=8;

//delay_ms(5);

}

*/

Поделиться статьёй
Поделиться в telegram
Поделиться в whatsapp
Поделиться в vk
Поделиться в facebook
Поделиться в twitter
Кирилл Кузнецов
Кирилл Кузнецов
Окончил факультет вычислительных систем ТУСУР. По специальности работаю три года. В свободное время занимаюсь репетиторством, беру на дополнительные занятия школьников, а также сотрудничаю с компанией «Диплом777». Беру работы по радиоэлектронике и связям цифровых приборов.

Ещё статьи

Нет времени делать работу? Закажите!
Вид работы
Тема
Email

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