Программа для автомата подачи звонков в учебном учреждении
Введение
Во многих учебных заведениях России до
настоящего времени звонки на урок и с урока подаются вручную. Автоматическая
подача звонков позволяет более качественно вести учебный процесс.
Значение качественного учебного процесса в
подготовке будущих специалистов трудно переоценить. Своевременная подача
звонков дисциплинирует обучающихся, исключает человеческий фактор, освобождает
дежурного от напряжения. Исходя из этого, нами была выбрана данная тема в
качестве курсовой работы.
Для достижения данной цели нами был разработан
прибор на основе микроконтроллера AtMega8A-16PU и микросхемы часов реального
времени DS1307. Прибор интуитивно прост в управлении и не прихотлив в
использовании (внешний вид на рис.1.).
Разработка проекта длилась на протяжении четырех
месяцев. В течение этого времени было освоено программирование
микроконтроллеров семейства AVR на языке Си и закреплены навыки создания
печатных плат и монтажа электронных элементов.
Рис. 1. Внешний вид устройства
Корпус устройства приобретён в магазине «Чип и
Дип».
Марка корпуса для основной схемы G1022BF, для
исполнительного элемента - G1017. Монтаж выполняется на верхней и боковых
частях корпуса.
Описание устройства
Основные технические характеристики
Габариты блока управления, не более -
156х68х44мм;
Напряжение питания - от 9 до 12В;
Количество вариантов суточных программ
(количество звонков) - 16;
Длительность звонка - 3 сек;
Календарь до 2100 года с компенсацией високосных
годов;
Принципиальная схема
Рис 2. Принципиальная схема устройства
Список элементов
HG1
|
Lcd
дисплей Мэлт 2YLG
|
R1
|
10
кOм
|
R2,
R3
|
4,7
кОм
|
R4
|
330
Ом
|
R5,
R6
|
470
Ом
|
С1
|
100
мкФ
|
С2,
С3
|
0,1
мкФ
|
С4
|
47
нФ
|
С5,
С6
|
100
нФ
|
VD1
|
1N4004
|
ZQ1
|
32
768 кГц
|
Т1
|
ВТ
139
|
IC1
|
DS1307
|
IC2
|
AtMega8A-16PU
|
IC3
|
МОС3041
|
VR1
|
LM7805
|
Принцип работы устройства
При разработке нашего автомата было решено
применить микроконтроллер AtMega8A-16PU.
Применение микроконтроллеров AtMega8A-16PU
приводит к резкому уменьшению размеров устройства потребляемой мощности и
количества используемых элементов. При разработке устройств на
микроконтроллерах разработчику электронной схемы необходимо выбрать частоту
тактового генератора для поставленной задачи и следить за тем, чтобы
максимальная нагрузка на порты ввода вывода не превышала допустимую. Кристаллы
AtMega8A-16PU могут работать с четырьмя типами встроенных генераторов (1,2,4 и
8МГц). Если необходимо использовать другой генератор (не 1MГц), то в программе
необходимо предусмотреть загрузку регистра OSCCAL соответствующим калибровочным
байтом. Кристаллы AVR могут также тактироваться и от внешних источников (1 -
16МГц). Исходя из этих данных, для оптимальной работы микроконтроллера, нами
была выбрана частота 1 МГц.
Так же для точной работы часов была использована
микросхема «Часов реального времени» DS1307 (описание смотрите в приложении).
Обмен данным с микроконтроллером производится по шине I2C.
Интерфейс I2CC - двухпроводный последовательный
интерфейс, разработанный корпорацией Philips. В Первоначальном техническом
требовании к интерфейсу максимальная скорость передачи данных составляла 100
Кбит/с. Однако позже появились стандартные более скоростные режимы работы шины
I2C (400Кбит/с и 1Мбит/с). К одной шине I2C могут быть подключены устройства с
различными скоростями доступа, если скорость передачи данных будет
удовлетворять требованиям самого низкоскоростного устройства.
Протокол передачи данных по шине I2C разработан
таким образом, чтобы гарантировать надежный качественный прием/передачу данных.
При передаче данных одно устройство является "Ведущим", которое
инициирует передачу данных и формирует сигналы синхронизации. Другое устройство
"Ведомое", которое может начать передачу данных только по команде
ведущего шины. Модуль SSP микроконтроллеров Р1С16СХХХ полностью поддерживает
режим ведомого I2C, за исключением поддержки адреса общего вызова (режим
ведущего реализуется программно) Модуль MSSP аппаратно поддерживает режим
ведущего/ведомого I2C, адрес общего вызова и скорость обмена данными до
1Мбит/с. Скорость передачи данных 1Мбит/с используют некоторые микросхемы
последовательной EEPROM памяти.
Каждое устройство на шине I2C имеет уникальный
адрес. Когда ведущий инициирует передачу данных, то сначала передается адрес
устройства, к которому выполняется обращение. Остальные устройства проверяют
переданный ведущим адрес. В состав байта адреса устройства входит бит
направления передачи данных (выполняется чтение из ведомого или запись).
Ведомый и ведущий шины всегда находятся в противоположном режиме работы, что
можно представить в виде двух состояний
Ведущий передатчик - ведомый приемник.
Ведомый передатчик- ведущий приемник.
В обоих случаях ведущий формирует тактовый
сигнал.поддерживает обмен данными по протоколу I2C по двухпроводной двунаправленной
шине. Устройство, которое передаёт данные на шину, является передатчиком, а
устройство, принимающее данные, - приёмником. Устройство, управляющее передачей
данных, называется ведущим. Устройство, которым управляет ведущий, называется
ведомым. Ведущее устройство генерирует синхроимпульсы (serial clock - SCL),
управляет доступом к шине и генерирует условия START и STOP. DS1307 работает на
шине как ведомое устройство. Типовая конфигурация шины с использованием
протокола I2C показана на рис. 3.
Рис. 3. Типовая конфигурация двухпроводной шины
На рис. 4, 5 и 6 подробно показан процесс
передачи данных по двухпроводной шине.
Основные принципы передачи данных по шине I2C:
) Передача данных может быть инициирована только
когда шина свободна.
) Во время передачи данные на линии 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.
* - бит
чтения/записи или бит направления
Рис. 4. Передача данных по двухпроводной
последовательной шине
В зависимости от состояния бита возможны
два типа передачи данных:
) Передача данных от ведущего передатчика
ведомому приёмнику.
Первый байт, передаваемый ведущим, - это адрес
ведомого. Далее следует некоторое количество байтов данных. Ведомый возвращает
подтверждающий бит после каждого принятого байта. Данные передаются, начиная со
старшего бита (most significant bit - MSB).
) Данные передаются от ведомого передатчика
ведущему приёмнику.
Первый байт (адрес ведомого) передаётся ведущим.
Ведомый возвращает подтверждающий бит. За ним следует передаваемое ведомым
некоторое количество байтов данных. Ведущий возвращает подтверждающий бит после
всех принимаемых байтов кроме последнего байта. В конце последнего принятого
байта возвращается "неподтверждение". Ведущее устройство генерирует
все последовательные синхроимпульсы, а также условия START и STOP. Передача
заканчивается условием STOP или повтором условия START. Поскольку повторение
условия START также является и началом следующей последовательной передачи, шина
не освобождается. Данные передаются, начиная со старшего бита.может работать в
следующих двух режимах:
) Режим ведомого приёмника (режим записи
DS1307).
Последовательные данные принимаются по SDA и
синхронизируются по SCL. После каждого принятого байта передаётся бит
подтверждения. Условия START и STOP распознаются как начало и конец
последовательной передачи. Распознавание адреса выполняется аппаратно после
приёма адреса ведомого и бита направления (см. рис. 5).
Байт адреса - это первый байт, принятый после
генерации ведущим условия начала. Он содержит 7 битов адреса DS1307, который
имеет значение 1101000, и следующий за ним бит направления (),
который для записи равен 0. После приёма и декодирования адресного байта DS1307
выдаёт на линию SDA подтверждение, после чего ведущий передаёт в устройство
адрес регистра. Это установит регистровый указатель. Затем ведущий начинает
передачу байтов данных, каждый из которых будет подтверждаться DS1307. Чтобы
завершить запись данных, ведущий генерирует условие окончания.
Рис. 5. Запись данных - режим ведомого приёмника
2) Режим ведомого передатчика (режим чтения
DS1307).
Первый байт принимается и обрабатывается так же,
как и в режиме ведомого приёмника. Однако в этом режиме бит направления будет
указывать, что направление передачи инвертировано. DS1307 передаёт
последовательные данные по линии SDA пока на линию SCL поступают
последовательные синхроимпульсы. Условия START и STOP распознаются в начале и в
конце последовательной передачи (см. рис. 6).
Байт адреса - первый байт, принимаемый после
стартового условия, генерируется ведущим. Байт адреса состоит из 7-битного
адреса DS1307, который равен 1101000, и следующего за ним бита направления
передачи (), который для
чтения равен 1. После приёма и декодирования байта адреса, устройство выдаёт
подтверждение на линию SDA. Затем DS1307 начинает передавать данные, начиная с
указанного адреса, находящегося в регистровом указателе. Если перед началом
чтения указатель регистра не записан, то первый читаемый адрес - это адрес,
который был сохранён в нём последним. DS1307 должен принять
"неподтверждение" для окончания чтения.
Рис. 6. Чтение данных - режим ведомого
передатчика
Удобства применения шины I2C очевидны - малое
количество соединительных линий и высокая скорость обмена, простота аппаратной
реализации линии связи. Наиболее широко поддерживает шину I2C, конечно же,
фирма Philips, производящая множество ИС различной сложности с управлением по
I2C. В первую очередь, можно выделить микросхемы энергонезависимой памяти
(EEPROM) серии 24Схх в 8-ми выводных корпусах, фактически ставшие промышленным
стандартом. Из широко распространенных ИС можно выделить: микросхемы часов
PCF8583, параллельный порт PCF8574, 4-х канальный 8-ми разрядный АЦП PCF8591.
Существует множество модификаций этих ИС и более специализированные
контроллеры.
С использованием I2C разработано множество
продуктов, особенно в области бытовой электроники.
Разработка, изготовление печатной платы
С помощью программы Sprint-Layout по
принципиальной электрической схеме нами была разработана печатная плата
автомата.
Система Sprint-Layout может быть использована
для решения большого числа задач, которые ставятся перед разработчиками
радиоэлектронной аппаратуры. В данном случае нами будут рассмотрены задачи,
которые мы решали при проектировании автомата. Во-первых, это проектирование
принципиальной электрической схемы и получение ее изображения на бумаге.
Во-вторых, это проектирование печатной платы по изображению принципиальной
схемы и получение изображений печатной платы с помощью принтера.
Для создания и вывода на печать изображения
печатных плат использовался лазерный принтер и фотобумага.
Заготовка печатной платы вырезается из медного
стеклотекстолита. Она шлифуется наждачной бумагой №0 и стиральной резинкой,
после этого промывается водой и обезжиривается спиртом или ацетоном.
После того как готова заготовка печатной платы.
Мы переносим изображение с фотобумаги на стеклотекстолит при помощи утюга.
После этого производят травление платы. Травят
плату обычно в растворе персульфата аммония. Нормальной концентрацией раствора
можно считать 20…50%. Разводят, примерно, 500 г порошка персульфата аммония в
горячей кипяченой воде до получения общего объема раствора, равного 1 л.
Раствор переливается в обычную ванночку (например использовать фотографический
кювет). Продолжительность травления - 10…60 мин, она зависит от температуры,
концентрации раствора, толщины медной фольги. Травление проводят под вытяжкой
или в хорошо проветриваемом помещении.
Промытую плату просушивают, залуживают,
рассверливают отверстия под выводы радиоэлементов (при этом используются сверла
диаметром 0,6…0,8мм.)
Заключительным этапом является монтаж
радиоэлементов. Перед монтажом на плату потемневшие выводы радиоэлементов
следует зачищать до блеска, лудить их не обязательно. В качестве флюса лучше
пользоваться канифольным лаком, а не твердой канифолью. Схема печатной платы
изображена на рис 7.
Рис. 7. Схема печатной платы устройства
Разработка программы для микроконтроллера
Разработка блок схемы программы
По сбросу программа стартует с адреса 0000h.
Далее происходит следующее:
Происходит настройка портов ввода-вывода.
Включаются встроенные подтягивающие резисторы
Выводится приветствие
Начинается индикация текущего времени и даты.
После инициализации программа работает
циклически. Постоянно опрашивается состояние кнопок, обслуживается дисплей,
проверяется не подавать ли звонок, после чего цикл повторяется.
Код программы автомат
звонок микроконтроллер
/** Программа для автомата подачи звонков в
учебном учреждении
Разработчики: Гудков Владислав, Соленов Андрей
МОГК 2012 Группа 4АСУ/09 */
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
#include "ds1307.h"
#define MENU (PINC&(1 <<
PC2))==0 && PINC&(1 << PC0) && PINC&(1 <<
PC1) && PINC&(1 << PC3)
#define OK (PINC&(1 <<
PC3))==0 && PINC&(1 << PC0) && PINC&(1 <<
PC1) && PINC&(1 << PC2)
#define HOUR (PINC&(1 <<
PC0))==0 && PINC&(1 << PC1) && PINC&(1 <<
PC2) && PINC&(1 << PC3)
#define MIN (PINC&(1 <<
PC1))==0 && PINC&(1 << PC0) && PINC&(1 <<
PC2) && PINC&(1 << PC3)
int main(void)
{
// Инициализация портов
_delay_ms(100);
DDRC = 0x00;= 0xFF;|=(1 <<
PB2);|=(0 << PB2);_init(); // Инициализация
LCD
I2CInit(); // Инициализация шины I2C
// Запускаем ход часов
uint8_t
temp;Read(0x00,&temp);&= ~(1 << 7); // обнуляем
7 битWrite(0x00,temp);
// Инициализация
и
объявление
переменныхchar
hour_za, minute_za, second_start, second_stop;char hour_zb, minute_zb;char
hour_zc, minute_zc;char hour_zd, minute_zd;char hour_ze, minute_ze;char
hour_zf, minute_zf;char hour_zj, minute_zj;char hour_zh, minute_zh;char
hour_zi, minute_zi;char hour_zg, minute_zg;char hour_zk, minute_zk;char
hour_zl, minute_zl;char hour_zm, minute_zm;char hour_zn, minute_zn;char
hour_zo, minute_zo;char hour_zp, minute_zp;char v, i, menu, ok, k, a, c, e,
zvon_vkl, f;=0;=0;=0;=0;=0;=0;=1;=1;_vkl=1;=1;_start = 0;_stop = 3;_za = 8;_za
= 15;_zb = 9;_zb = 00;_zc = 9;_zc = 5;_zd = 9;_zd = 50;_ze = 10;_ze = 5;_zf =
10;_zf = 50;_zj = 10;_zj = 55;_zh = 11;_zh = 40;_zi = 12;_zi = 15;_zg = 13;_zg
= 0;_zk = 13;_zk = 5;_zl = 13;_zl = 50;_zm = 14;_zm = 00;_zn = 14;_zn = 45;_zo
= 14;_zo = 50;_zp = 15;_zp = 35;
// Ввывод
приветствия(i=0;
i<1; i++)
{_com(0x01);
_delay_ms(100);_string(0x85,
"SolGud");
_delay_ms(1500);_com(0x01);
_delay_ms(100);_string(0x86,
"2012");
_delay_ms(1500);_com(0x01);
_delay_ms(100);_string(0x86,
"MOЎK");
_delay_ms(1500);_com(0x01);
_delay_ms(100);
}(1)
{ char hour, minute, second, day,
date, month, years, temp;
// Читаем данные и преобразуем из BCD в двоичную
системуRead(0x00,&temp); // Чтение регистра секунд
second = (((temp & 0xF0)
>> 4)*10)+(temp & 0x0F);
DS1307Read(0x01,&temp); // Чтение регистра
минут
minute = (((temp & 0xF0)
>> 4)*10)+(temp & 0x0F);
DS1307Read(0x02,&temp); // Чтение регистра
часов
hour = (((temp & 0xF0) >>
4)*10)+(temp & 0x0F);
DS1307Read(0x03,&temp); // Чтение регистра
дней
day = (temp & 0x0F);Read(0x04,&temp);
// Чтение
регистра
даты=
(((temp & 0xF0) >> 4)*10)+(temp & 0x0F);
DS1307Read(0x05,&temp); // Чтение регистра
месяца
month = (((temp & 0xF0) >>
4)*10)+(temp & 0x0F);
DS1307Read(0x06,&temp); // Чтение регистра
года
years = (((temp & 0xF0) >>
4)*10)+(temp & 0x0F);
if(v==1)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим=0;
}
// Вывод часов и календаря_string(0xC1, " -
-20 / "); // дата_com(0xC1); (date, 2); // Выводим на экран дату
if(month == 1) lcd_string(0xC4,
"ЗЅі");if
(month == 2) lcd_string(0xC4, "дeі");
if (month == 3) lcd_string(0xC4, "јap");
if (month == 4) lcd_string(0xC4, "aѕp");
if (month == 5) lcd_string(0xC4, "јa№");
if (month == 6) lcd_string(0xC4, "ёЖЅ");
if (month == 7) lcd_string(0xC4, "ёЖ»");
if (month == 8) lcd_string(0xC4, "aіґ");
if (month == 9) lcd_string(0xC4, "ceЅ");
if (month == 10) lcd_string(0xC4, "oєї");
if (month == 11) lcd_string(0xC4, "ЅoЗ");
else lcd_string(0xC4, "гeє"); //
Выводим на экран месяц_com(0xCA); (years, 2); // Выводим на экран год
if(day == 1) lcd_string(0xCD,
"BC");if (day == 2) lcd_string(0xCD, "ЁH");
if (day == 3) lcd_string(0xCD, "BT"); if (day == 4) lcd_string(0xCD,
"CP"); if (day == 5) lcd_string(0xCD, "«T"); if (day == 6)
lcd_string(0xCD, "ЁT");
else lcd_string(0xCD, "C "); //
Выводим на экран день недели
lcd_string(0x84, " : :
");_com(0x84);
LCDWriteInt(hour, 2); // Выводим на экран
часы_com(0x87); (minute, 2); // Выводим на экран минуты_com(0x8A); (second, 2);
// Выводим на экран секунды_com(0x8E);(zvon_vkl == 1) lcd_data(0xED); //
Выводим на экран индикатор включения/выключения звонка(MENU) // если кнопка
"меню" нажата
{((PINC & (1 << PC2))==0){}=1;
}
// Вход в меню(menu)
{1: // Настройка времени(1)
{((v==0)||(k==0)||(a==1))
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
v=1;=1;=0;
}_string(0x86,
"MEH°");_string(0xC1, "Hacїp.
Аacoі
>");
if(OK) // Если кнопка "ок" нажата
{((PINC & (1 << PC3))==0){}=1;
}(MIN) // Если нажата кнопка "Минуты+"
{((PINC & (1 << PC1))==0){} // Ждем
отпускания кнопки
menu=2;;
}(ok==1)
{(k==1)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
k=0;
}_string(0x81, "HACTPO¦KA
«ACOB");_string(0xC5, " : ");_com(0xC5);
LCDWriteInt(hour, 2); // Выводим на экран
часы_com(0xC8); (minute, 2); // Выводим на экран минуты(HOUR) // Если нажата
кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки++; // Увеличиваем часы на 1(hour > 23) hour = 0;
// Преобразуем из двоичной системы в BCD и
записываем в DS1307
uint8_t temp;= ((hour/10) <<
4)|(hour%10);Write(0x02, temp);
_delay_ms(100);
}(MIN) // Если нажата кнопка "Минуты+"
{((PINC & (1 << PC1))==0){} // Ждем
отпускания кнопки++; // Увеличиваем минуты на 1(minute > 59) minute = 0;
// Преобразуем из двоичной системы в BCD и
записываем в DS1307
uint8_t temp;= ((minute/10) <<
4)|(minute%10);Write(0x01, temp);
_delay_ms(100);
}
/**Выход из настроек часов **/(OK) // Если
кнопка "ок" нажата, то выход
{((PINC & (1 <<
PC3))==0){}=0;=1;
}(ok==0)
{break;}
}
/** Выход из меню **/(MENU) // если кнопка
"меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}(menu=0){break;}
};2://Настройка
даты(1)
{((a==0)||(v==0))
{_com(0x08);
// полное выключение дисплея
lcd_com(0x01);
// очистка дисплея
_delay_us(100);
lcd_com(0x06);
// сдвиг курсора вправо_com(0x0C); // включение дисплея, курсор не видим
v=1;=1;
}_string(0x86,
"MEH°");_string(0xC1, "< Hacїp.
гaїГ
>");
if(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки=1;;
}(MIN) // Если нажата кнопка "Минуты+"
{((PINC & (1 << PC1))==0){} // Ждем
отпускания кнопки=3;;
}(OK) // Если кнопка "ок" нажата
{((PINC & (1 <<
PC3))==0){}=1;
}(ok==1)
{(a==1)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
a=0;
}_string(0x80, "Hacїpo№єa
Аёc»a");_string(0xC4,
" / / ");_com(0xC4);
LCDWriteInt(date, 2); // Выводим на экран дату
if(month == 1) lcd_string(0xC7,
"ЗЅі");if
(month == 2) lcd_string(0xC7, "дeі");
if (month == 3) lcd_string(0xC7, "јap");
if (month == 4) lcd_string(0xC7, "aѕp");
if (month == 5) lcd_string(0xC7, "јa№");
if (month == 6) lcd_string(0xC7, "ёЖЅ");
if (month == 7) lcd_string(0xC7, "ёЖ»");
if (month == 8) lcd_string(0xC7, "aіґ");
if (month == 9) lcd_string(0xC7, "ceЅ");
if (month == 10) lcd_string(0xC7, "oєї");
if (month == 11) lcd_string(0xC7, "ЅoЗ");
else lcd_string(0xC7, "гeє"); //
Выводим на экран день месяц_com(0xCB); (years, 2); // Выводим на экран год
//настройка даты(MENU) // если кнопка
"меню" нажата
{((PINC & (1 <<
PC2))==0){}++;(date > 31) date=1;_t temp;= ((date/10) <<
4)|(date%10);Write(0x04, temp);
_delay_ms(100);
}(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем отпускания
кнопки++; // Увеличиваем часы на 1(month > 12) month = 1;
// Преобразуем из двоичной системы в BCD и
записываем в DS1307
uint8_t temp;= ((month/10) <<
4)|(month%10);Write(0x05, temp);
_delay_ms(100);
}
(MIN) // Если нажата кнопка "Минуты+"
{((PINC & (1 << PC1))==0){} // Ждем
отпускания кнопки++; // Увеличиваем минуты на 1(years > 99) years = 0;
// Преобразуем из двоичной системы в BCD и
записываем в DS1307
uint8_t temp;= ((years/10) <<
4)|(years%10);Write(0x06, temp);
_delay_ms(100);
}
/**Переход в настройку дня недели **/(OK) //
Если кнопка "ок" нажата, то выход
{((PINC & (1 <<
PC3))==0){}=2;
}(ok==2)
{break;}
}(ok==2)
{(v==1)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
v=0;
}_string(0x82, "аeЅД
Ѕeгe»ё");(day
== 1) lcd_string(0xC7, "BC");if (day == 2) lcd_string(0xC7, "ЁH");
if (day == 3) lcd_string(0xC7, "BT"); if (day == 4) lcd_string(0xC7,
"CP"); if (day == 5) lcd_string(0xC7, "«T"); if (day == 6)
lcd_string(0xC7, "ЁT");
else lcd_string(0xC7, "C "); //
Выводим на экран день недели(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки++; // Увеличиваем день на 1(day > 7) day = 1;
// Преобразуем из двоичной системы в BCD и
записываем в DS1307
uint8_t temp;= (day%10);Write(0x03,
temp);
_delay_ms(100);
}
/**выход из настроек даты и дня недели**/(OK) //
Если кнопка "ок" нажата, то выход
{((PINC & (1 <<
PC3))==0){}=0;
}(ok==0)
{break;}
}
/** Выход из меню **/(MENU) // если кнопка
"меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}
};3: // Настройка вкл/выкл звонков
while(1)
{((c==1)||(e==0)||(v==0))
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
c=0;=1;=1;
}_string(0x86,
"MEH°");_string(0xC0, "< Bє».
·іoЅєoі
>");
if(MENU) // если кнопка "меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}
(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки=2;;
}(MIN) // Если нажата кнопка "Минуты+"
{((PINC & (1 << PC1))==0){} // Ждем
отпускания кнопки=4;;
}(OK) //Если кнопка "ок" нажата
{((PINC & (1 <<
PC3))==0){}=1;
}
(ok==1)
{(e==1)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
e=0;=1;
}_string(0x82, "Bє».
·іoЅєoі");(zvon_vkl
== 1) lcd_string(0xC2, "< Bє»ЖАeЅГ
>");if (zvon_vkl == 0) lcd_string(0xC2, "< BГє»ЖАeЅГ
>");
if(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки_vkl++; // Увеличиваем часы на 1
if(zvon_vkl > 1) zvon_vkl = 0;
_delay_ms(100);
}(OK) //Если
кнопка
"ок"
нажата
{((PINC & (1 <<
PC3))==0){}=0;
}(ok==0)
{break;}
}
/** Выход из меню **/(MENU) // если кнопка
"меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}
};4: // Информация о разработчиках(1)
{((a==0)||(f==1)||(e==1))
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
a=1;=0;=0;=1;
}_string(0x86,
"MEH°");_string(0xC1, "< Pa·paІoїАёєё");
if(MENU) // если кнопка "меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}(HOUR) // Если нажата кнопка "Часы+"
{((PINC & (1 << PC0))==0){} // Ждем
отпускания кнопки=3;;
}(OK) //Если кнопка "ок" нажата
{((PINC & (1 <<
PC3))==0){}=1;
}(ok==1)
{(f==0)
{_com(0x08); // полное выключение
дисплея_com(0x01); // очистка дисплея
_delay_us(100);_com(0x06); // сдвиг курсора
вправо_com(0x0C); // включение дисплея, курсор не видим
f=1;
}_string(0x84, "4
AC©/09");_string(0xC1, "Ўyгєoі
Co»µЅoі");
if(OK) // если кнопка "ок" нажата
{((PINC & (1 <<
PC3))==0){}=0;
}(ok==0)
{break;}
}
/** Выход из меню **/(MENU) // если кнопка
"меню" нажата
{((PINC & (1 <<
PC2))==0){}=0;;
}
};: ;
}
// Проверка когда звонить
// 1 урок((hour==hour_za)
&& (minute==minute_za) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_za) &&
(minute==minute_za) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 5 минут((hour==hour_zb)
&& (minute==minute_zb) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zb) &&
(minute==minute_zb) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 2 урок((hour==hour_zc)
&& (minute==minute_zc) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zc) &&
(minute==minute_zc) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
// перемена((hour==hour_zd)
&& (minute==minute_zd) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zd) &&
(minute==minute_zd) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 3 урок((hour==hour_ze)
&& (minute==minute_ze) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_ze) &&
(minute==minute_ze) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
//5 минут((hour==hour_zf)
&& (minute==minute_zf) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zf) &&
(minute==minute_zf) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 4 урок((hour==hour_zj)
&& (minute==minute_zj) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zj) &&
(minute==minute_zj) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// перемена((hour==hour_zh)
&& (minute==minute_zh) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zh) &&
(minute==minute_zh) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 5 урок((hour==hour_zi)
&& (minute==minute_zi) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zi) &&
(minute==minute_zi) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 5 минут((hour==hour_zg)
&& (minute==minute_zg) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zg) &&
(minute==minute_zg) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 6 урок((hour==hour_zk)
&& (minute==minute_zk) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zk) &&
(minute==minute_zk) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// перемена((hour==hour_zl)
&& (minute==minute_zl) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zl) &&
(minute==minute_zl) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 7 урок((hour==hour_zm)
&& (minute==minute_zm) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zm) &&
(minute==minute_zm) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
//5 минут((hour==hour_zn)
&& (minute==minute_zn) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zn) &&
(minute==minute_zn) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// 8 урок((hour==hour_zo)
&& (minute==minute_zo) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zo) &&
(minute==minute_zo) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
// окончание((hour==hour_zp)
&& (minute==minute_zp) && (second == second_start) &&
(day!=1) && (day!=7) && (zvon_vkl==1))
{|= _BV(PB2);
}((hour==hour_zp) &&
(minute==minute_zp) && (second == second_stop) && (day!=1)
&& (day!=7) && (zvon_vkl==1))
{&= ~_BV(PB2);
}
}
}
Заключение
Результаты, достигнутые при выполнении курсовой
работы:
Проанализирована радиотехническая литература.
На основе структурной схемы спроектирована
принципиальная электрическая схема автомата, разработана и изготовлена печатная
плата устройства.
Разработана и написана программа на языке
программирования Си для автомата подачи звонков.
При испытании автомата были выявлены некоторые
недостатки, которые были устранены.
Цель курсовой работы была достигнута: разработан
и создан автомат подачи звонков. Он будет использоваться в учебных заведениях.
Также он может использоваться в других целях, т.е. там, где нужно подавать
напряжение на различные источники питания в соответствии со временем, но при
этом нужно будет задавать соответствующее время подачи сигнала.
Данный автомат подачи звонков может программно
дорабатываться и совершенствоваться.
Список информационных источников
Синдеев
Ю.Г. Электротехника с основами электроники. Ростов-на Дону. 2010.
Шмаков
С.Б. Энциклопедия радиолюбителя. Санкт-Петербург. 2010.
Подбельский
В.В., Фомин С.С. Курс программирования на языке СИ. Москва. 2012
Керниган
Б., Ритчи Д. Язык программирования СИ. Москва. 2012
Приложение А
Микросхемы часов реального времени (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.
Классификация- 8-выводный DIP (300 миллидюймов -
7.62 мм)Z - 8-выводный SOIC (150 миллидюймов - 3.81 мм)N - 8-выводный DIP
(промышленный)ZN - 8-выводный SOIC (промышленный)
Расположение выводов
DS1307 8-выводный DIP (300 миллидюймов)
DS1307 8-выводный SOIC (150 миллидюймов)
Назначение выводов- первичный источник питания;,
X2 - подключение 32.768 кГц кварцевого резонатора;- вход батареи +3 В;- общий
минус;- последовательные данные;- последовательные синхроимпульсы;/OUT - выходной
сигнал с прямоугольными импульсами.
Описание
Часы реального времени с последовательным
интерфейсом DS1307 - это малопотребляющие полные двоично-десятичные
часы-календарь, включающие 56 байтов энергонезависимой статической ОЗУ. Адреса
и данные передаются последовательно по двухпроводной двунаправленной шине.
Часы-календарь отсчитывают секунды, минуты, часы, день, дату, месяц и год.
Последняя дата месяца автоматически корректируется для месяцев с количеством
дней меньше 31, включая коррекцию високосного года. Часы работают как в
24-часовом, так и в 12-часовом режимах с индикатором AM/PM. DS1307 имеет
встроенную схему наблюдения за питанием, которая обнаруживает перебои питания и
автоматически переключается на питание от батареи. Для измерения времени в качестве
задающего генератора используется кварцевый резонатор частотой 32.768 кГц.
Типовая схема включения
Работана последовательной шине работает как
ведомое устройство. Доступ к нему достигается установкой условия START и
передачей устройству идентификационного кода, за которым следует адрес
регистра. К следующим за ним регистрам доступ осуществляется последовательно,
пока не будет выполнено условие STOP.
Если VCC падает ниже 1.25 * VBAT, DS1307
прерывает процесс доступа и сбрасывает счётчик адреса, причем в это время
внешние сигналы не воспринимаются (чтобы предотвратить запись ошибочных
данных).
Если VCC падает ниже VBAT, DS1307 переключается
в низкоточный режим батарейной поддержки.
При включении питания DS1307 переключается от
батареи к Vcc, когда значение Vcc превышает VBAT + 0.2 В. Входящие сигналы
начинают восприниматься тогда, когда Vcc превышает 1.25 * VBAT.
Блок-схема на рисунке 8 показывает основные
элементы RTC с последовательным интерфейсом.
Рис. 8. Блок-схема DS1307
Описание выводов, GND - на эти выводы подается
питание.- это вход +5 В. Когда питающее напряжение выше 1.25 * VBAT, устройство
полностью доступно, и можно выполнять чтение и запись данных. Когда к
устройству подключена батарея на 3 В, и VCC ниже, чем 1.25 * VBAT, чтение и
запись запрещены, однако функция отсчёта времени продолжает работать. Как
только VCC падает ниже VBAT, ОЗУ и RTC переключаются на батарейное питание
VBAT.- вход для любой стандартной трёхвольтовой литиевой батареи или другого
источника энергии. Для нормальной работы DS1307 необходимо, чтобы напряжение
батареи было в диапазоне 2.0... 3.5 В. Литиевая батарея с ёмкостью 48 мА/ч или
более при отсутствии питания будет поддерживать DS1307 в течение более 10 лет
при температуре 25°C.(Serial Clock Input - вход последовательных
синхроимпульсов) - используется для синхронизации данных по последовательному
интерфейсу.(Serial Data Input/Output - вход/выход последовательных данных) -
вывод входа/выхода для двухпроводного последовательного интерфейса. Вывод SDA -
с открытым стоком и требует внешнего подтягивающего резистора./OUT (Square
Wave/Output Driver - сигнал с прямоугольными импульсами) - когда включен, т.е.
бит SQWE установлен в 1, вывод SQW/OUT выдаёт прямоугольные импульсы с одной из
четырёх частот (1 Гц, 4 кГц, 8 кГц, 32 кГц). Вывод SQW/OUT - с открытым стоком
и требует внешнего подтягивающего резистора. SQW/OUT будет работать как при
питании от VCC, так и при питании от VBAT., X2 - выводы для стандартного
кварцевого резонатора с частотой 32.768 кГц.и карта адресации памяти
Карта адресов для RTC и регистров ОЗУ
представлена на рисунке 9. Регистры RTC расположены в ячейках адресов от 00h до
07h. Регистры ОЗУ расположены в ячейках адресов от 08h до 3Fh. В процессе
многобайтного доступа, когда адресный указатель достигает 3Fh (конец
пространства ОЗУ), он перемещается на ячейку 00h - начало пространства RTC.
Рис. 9. Карта адресов DS1307
Часы и календарь
Информация от часов и календаря получается
чтением соответствующих байтов регистра. Регистры RTC показаны на рисунке 10.
Время и календарь устанавливаются или инициализируются записью соответствующих
байтов регистра. Содержимое регистров времени и календаря имеет двоично-десятичный
формат. Бит 7 регистра 0 - это бит останова часов (clock halt - CH). Когда этот
бит установлен в 1, тактовый генератор выключен. Когда сброшен в 0, - тактовый
генератор включен.
Имейте в виду, что при включении питания
начальное состояние всех регистров не определено. Поэтому необходимо
принудительно включать тактовый генератор (бит CH = 0) во время начальной
инициализации.может работать и в 12-часовом, и в 24-часовом режимах. Бит 6
регистра часов отвечает за выбор 12- или 24-часового режима. Когда он
установлен в 1, выбран 12-часовой режим. В этом режиме бит 5 - это бит AM/PM,
при этом высокий логический уровень означает PM. В 24-часовом режиме бит 5 -
это бит второго десятка часов (20 - 23 часа).
При появлении на двухпроводной шине условия START,
текущее время копируется во второй набор регистров. Информация о времени
читается из этих вспомогательных регистров, в то время как часы могут
продолжать работать. Это устраняет необходимость перечитывать регистры DS1307 в
случае обновления их содержимого во время чтения.
Рис. 10. Регистры хронометра DS1307
Управляющий регистр
Управляющий регистр используется для управления
работой вывода SQW/OUT. Биты управляющего регистра представлены в таблице 1.
Таблица 1. Биты управляющего регистра
БИТ
7
|
БИТ
6
|
БИТ
5
|
БИТ
4
|
БИТ
3
|
БИТ
2
|
БИТ
1
|
БИТ
0
|
OUT
|
0
|
0
|
SQWE
|
0
|
0
|
RS1
|
RS0
|
(Output control - управление выходом) - этот бит
управляет логическим уровнем на выводе SQW/OUT, когда выход сигнала с
прямоугольными импульсами отключен. Если SQWE = 0, то логический уровень на
выводе SQW/OUT равен 1, если OUT = 1, и 0, если OUT = 0.(Square Wave Enable -
включение сигнала с прямоугольными импульсами) - когда этот бит установлен в 1,
включается генерация прямоугольных импульсов. Их частота зависит от значения
битов RS0 и RS1. (Если частота выходного сигнала установлена в 1Гц, регистры
часов обновляются по заднему фронту этих импульсов).(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
кГц
|
Приложение Б
ATmega8, ATmega8L
-разрядные микроконтроллеры с 8 Кбайтами
внутрисистемно программируемой Flash памяти
Отличительные особенности:
-разрядный высокопроизводительный AVR
микроконтроллер с малым потреблением
Прогрессивная RISC архитектура
высокопроизводительных команд, большинство
команд выполняется за один тактовый цикл
8-разрядных рабочих регистра общего назначения
Полностью статическая работа
Приближающаяся к 16 MIPS (при тактовой частоте
16 МГц) производительность
Встроенный 2-цикловый перемножитель
Энергонезависимая память программ и данных
8 Кбайт
внутрисистемно
программируемой
Flash памяти
(In-System Self-Programmable Flash)
Обеспечивает 1000 циклов стирания/записи
Дополнительный сектор загрузочных кодов с
независимыми битами блокировки
Обеспечен режим одновременного чтения/записи
(Read-While-Write)
байт EEPROM
Обеспечивает 100000 циклов стирания/записи
Кбайт встроенной SRAM
Программируемая блокировка, обеспечивающая
защиту программных средств пользователя
Встроенная периферия
Два 8-разрядных таймера/счетчика с отдельным
предварительным делителем, один с режимом сравнения
Один 16-разрядный таймер/счетчик с отдельным
предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным
генератором
Три канала PWM
-канальный аналого-цифровой преобразователь (в
корпусах TQFP и MLF)
каналов с 10-разрядной точностью
канала с 8-разрядной точностью
-канальный аналого-цифровой преобразователь (в
корпусе PDIP)
канала с 10-разрядной точностью
канала с 8-разрядной точностью
Байт-ориентированный 2-проводный
последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий/ведомый)
Программируемый сторожевой таймер с отдельным
встроенным генератором
Встроенный аналоговый компаратор
Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый
детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Пять режимов пониженного потребления: Idle,
Power-save, Power-down, Standby и снижения шумов ADC
Выводы I/O и корпуса
программируемые линии ввода/вывода
-выводной корпус PDIP, 32-выводной корпус TQFP и
32-выводной корпус MLF
Рабочие напряжения
,7 - 5,5 В (ATmega8L)
,5 - 5,5 В (ATmega8)
Рабочая частота
- 8 МГц (ATmega8L)
- 16 МГц (ATmega8)
Блок-схема:
Рис. 11. Блок-схема микроконтроллера AtMega8
Рис. 12. Расположение выводов в различных
корпусах МК AtMega8
Приложение В
Вам представлен RS-232(COM) программатор
совместимый с PonyProg и имеющий 10 пиновый ICSP разъём STKxxx.
Характеристики:
Подключение к ПК через RS-232 (через переходники
USB - RS-232 не работает!)
Не требует внешнего питания
Использует Atmel-овский 2x5 пиновый ICSP разъём
Габариты 45x30 мм (1.7x1.2") + 20 см
(8") кабель
Программируемые микросхемы:S1200,
AT90S2313, AT90S2323,S2343, AT90S4414, AT90S4434,S8515, AT90S8535,
AT90S2323,S2343, AT90S2333, AT90S4433,S4434, AT90S8535, AT90S8534,, ATmega161,
ATmega163,, ATmega128, ATmega8,, ATmega64, ATtiny12 and ATtiny15
Схема программатора
Рис. 13. Принципиальная схема
внутрисхемного программатора
Рис. 14. Распиновка разъёма
программатора
Рис.15. Схема платы с панелькой для
AtMega8