Устройство для подачи школьных звонков на микроконтроллере Атмега 8

Цель этой работы: изготовление простого доступного устройства для подачи школьных звонков. Оно не имеют выхода на индикацию часов, ручной корректировки хода часов. Это простое устройство для подачи звонков в школе. Все необходимые данные заносятся в программу в ходе составления самой программы. В случае необходимости можно редактировать саму программу, получить новую прошивку и залить ее в микроконтроллер. Тем более микроконтроллер Атмега8 имеет режим внутрисхемного программирования, т.е. не вынимая микроконтроллер можно его прошить прямо в схеме, для этого имеется специальный разъем.
Немного о программе для подачи школьного звонка. Программа написана на языке СИ, применительно для микроконтроллеров Атмега8. Язык СИ применяется в виду наличия специальных инструментальных программ, в нашем случае CodeVisionAVR Compiler для написания, редактирования и получения готовой прошивки. Язык Си как и многие языки высокого уровня использует синтаксис английского языка и изучения языка Паскаль в школе способствует изучению языка Си.
Микроконтроллер Атмега8 имеет память для программ емкостью 8 кбайт, что для нас вполне достаточно. Еще одной особенностью этого микроконтроллера является наличие таймера-счетчика, который может работать в асинхронном режиме, т.е. он может тактироваться от внешнего генератора, в нашем случае от специального часового кварца, т.е. работать вне основной тактовой частоты самого микроконтроллера. Часовой кварц рассчитан на частоту 32768 Гц – в 1 секунду число колебаний составляет 32768 .Почему выбрана такая частота – исходя из того, что 2 в 15-ой степени равняется 32768 и путем деления на 2 легко получить частоту в 1 Гц для хода секунд в наших часах. Этот кварц установлен на всех материнских платах и доступен для применения после последующей выпайки.
В Атмега 8 этот таймер счетчик идет под номером 2. Он восьмиразрядный. Посмотрев описание (даташит) данного микроконтроллера, мы можем узнать, что у этого счетчика есть прерывание по переполнению и предделители. Мы используем предделитель на 128 и прерывание по переполнению этого счетчика, получается 128*256=32768, т.е. что нам и нужно: на выходе мы получаем прерывание через каждые секунды, то, что нам и надо. В программе прерывания мы организуем ход часов: увеличиваем секунды на 1, если секунды =60, то увеличиваем минуты на 1, сбрасываем секунды в 0, если минуты =60, то увеличиваем часы на 1, сбрасываем минуты в 0, если часы равны 24, то сбрасываем часы в 0 и увеличиваем значение переменной day (день) на 1, если day равно 7 (воскресенье), то его сбрасываем в 1 (понедельник)
В основной программе устанавливаем начальное время 8:00:00, день понедельник (day=1).
Исходя из этого, для корректной работы мы должны впервые включить наше устройство в понедельник в 8:00:00. Далее он будет работать корректно, подавать звонки с понедельника по субботу, в воскресенье звонки не поддаются. Расписание подачи звонков заносятся в программу, и далее в основной программе сравнивается текущее время и расписание подачи звонков, при совпадении данных вызывается программа подачи звонков и в течении сами секунд (продолжительность звонка можно изменить в программе) звенит звонок.
Данное устройство работает в нашей в школе в течении последних двух лет, освободив техперсонал школы от необходимости подачи звонков в ручном режиме. Выход устройства подключается параллельно кнопке ручной подачи звонка, и в случае необходимости можно подать звонки и в ручном режиме.