![]() |
![]() |
|||||||||||||||
Простые часы на tiny2313
Автор: mixon46, mixon-46@bk.ru Всегда что то с чего то начинается. История о том как я решил сделать что то на микроконтроллере.
Лет в 14 я начал увлекаться электроникой. Да сначала были простые схемки. Мультивибраторы, всякие пищалки. Потом я собирал и усилители. Были и передатчики, диммеры, преобразователи. Потом конечно же я столкнулся с такими микросхемами как контроллеры. Было вообще непонятно как их программировать и как писать к ним программы. Начал читать книгу по CodeVishion AVR от автора Белова А.В. В интернете много информации по данному языку программирования. И постепенно вник в суть. Не хочу сказать что я разбираюсь в данный момент как профессионал, но что то теперь умею. Вот и сейчас расскажу как я сделал часики на tiny2313.
Данные часы предназначались как замена штатным часам в ВАЗ2107 (хотя я их туда так и не поставил, а корпус взял от манометра). Если кто знает там что бы поменять время нужно было давить на кнопочку и минутная стрелка вращалась по часовой с шагом около 5 минут. В тех часах что я сделал принцип примерно тот же. Нажатием на кнопку время меняется по +10 минут раз в секунду по прирыванию. Я потом подробно опишу программу, а исходник вы найдете внизу страницы. Давайте взглянем на схему. Очень простая типичная схема. Индикация динамическая. Питается индикаторы и контроллер через кренку. Потребление около 100 ма. (предел кренки). В моем случае используется блок питания с сетевым трансформатором на 12 вольт с простейшим фильтром.
Давайте немного разберем алгоритм работы. Тактовый генератор микроконтроллера работает на частоте 4 мгц. Регистры 16 битного таймера настроены таким образом что бы на вход поступали тактовые импульсы через делитель на 64. Это 62500 импульсов в секунду. Что как раз входит в диапазон 16 битного таймера. Каждые 62500 тактов происходит прерывание по которому выполняется подпрограмма. В этой подпрограмме выполняется следующее: interrupt [TIM1_COMPA] void sec (void) Инкрементирование 1 в переменную которая хранит количество секунд. Проверка данной переменной на количество секунд в 12 часах. (часы работают в 12 часовом формате). Соответственно обнуление счета если больше 12. Так же сюда входит опрос кнопки и присваение по этому событию 10 минут в счет переменной. И изменение состояния младшего разряда B порта (который является двумя мигающими точками по схеме) В основной программе происходит разбивание переменной se на секунды, минуты и часы. С занесением в массив каждого значания. Далее из массива уже соответственно вывод информации на индикаторы. while (1) В программе реализованы единицы и десятки секунд. Хотя на деле выводов порта D микроконтроллера не хватило. На схеме кнопка подключена к PD.6. Я немного прикинул погрешность данного девайса. Если кварц 4.000 Мгц при максимальной погрешности в 4.000999 Мгц это около 20 минут в год. Но она же не может быть максимальной. Это маловероятно. Вот и все. На этом я хочу закончить свой рассказ. А вообще если есть вопросы то давайте задавайте. Будем улучшать часики. Есть идеи немножко их улучшить.
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |