Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Часы с несколькими функциями на AVR

В этой статье я хочу вам представить собственную разработку часов с несколькими полезными функциями: будильник, календарь, таймер, а также самый простой секундомер. Проект выполнен с использованием микроконтроллера ATmega8 - 16pu. Для отображения символов используется 4 разрядный семисегментный индикатор. Управление производится с помощью 6 тактовых кнопок.

Работа и принцип работы, а также описание устройства будут продемонстрированы в видео.

Теперь, что касается на счёт схемы. Так как я использовал печатную плату 5*7 см, то дорожки там было трудно сделать, и я соединил на прямую тоненькими проводами, и из - за для этого устройства я не стал рисовать плату.

Вот как выглядит схема в Proteus.

Для PonyProg и CodeVisionAVR нужно выставлять следующие значения фьюз-битов:

Для UniProf:

Фото часов:

Прошивка и проект в proteus в архиве.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U1 МК AVR 8-бит
ATmega8-16PU
1 Поиск в магазине ОтронВ блокнот
D1 Светодиод1 зелёный (3мм)Поиск в магазине ОтронВ блокнот
C1-C3 Конденсатор22 пФ3 Поиск в магазине ОтронВ блокнот
R1-R8 Резистор
220 Ом
8 Поиск в магазине ОтронВ блокнот
R9-R11 Резистор
10 кОм
3 Поиск в магазине ОтронВ блокнот
R12 Резистор
470 Ом
1 Поиск в магазине ОтронВ блокнот
Индикаторcl5642bh1 Поиск в магазине ОтронВ блокнот
LS1 Динамик50Ом 1Вт1 Поиск в магазине ОтронВ блокнот
X1 Кварцевый резонатор4МГц1 Поиск в магазине ОтронВ блокнот
Тактовая кноппа6 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 3
Я собрал 2 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (16) | Я собрал (0) | Подписаться

0
Олег #
В эту схему бы еще прицепить м/c DS1307-часы реального времени. Чтобы при выключении сети и последующем включении не сбивались настройки и не нужно было бы тыкать опять на кнопки установок.
Ответить
0
Николай #
В схеме нет подключения двоеточия, куда они подключаются? В видео они мигают.
Ответить
0

[Автор]
Petr9067 #
Дело в том что первая точка слева не горит, а за место неё загорается двоеточие. Это я про свой индикатор, который использовал.
Отредактирован 24.01.2016 09:56
Ответить
0
Gallgreen #
Выложите пожалуйста листинг. Очень хороший проект, но мне необходимо поменять некоторые пины. Заранее благодарен.
Ответить
0
Daniar #
Так я не понял, там в схеме это заземление или общий провод?
Ответить
0

[Автор]
Petr9067 #
Общий
Ответить
+1
Khoja #
Здравствуйте можете выложить код (если бы ассемблер было бы очень круто)?
Ответить
0

[Автор]
Petr9067 #
Здравствуйте, кое-как нашел его на старом компе
Прикрепленный файл: часы - ранняя версия.c
Ответить
0
verbkinm #
И какое потребление у вашего устройства? Как долго может работать от батарейки? И ещё вопрос. Я так понимаю точность у часов не очень? Нет RTC, кварц не 4 мГц, а не на 32,768 кГц или я что-то упустил?
Ответить
0

[Автор]
Petr9067 #
Потребление наверно мА 30-50, точно не скажу. От батарейки не пробовал, но смею предположить, что на дня 2-3. Точность страдает, за день смещалось на 2 секунды.
RTC отсутствует, используется кварц на 4 мГЦ.
Ответить
0
Ришат #
Как сделать чтобы вместо будильника на выходе появлялся логическая единица на 1 минуту?
Ответить
0

[Автор]
Petr9067 #
Для начала выключить прерывание по переполнению таймера счётчика 0, чтобы убрать ШИМ на выходе.
Затем в прерывание по переполнению таймера счётчика 2 убрать строку flag_dinamik = 0 .Далее в прерывании по совпадению таймера счётчика 2 заменить это
if (bud_1 > 0)
{
flag_dinamik = 1;
}
if (((bud_2 > 0)&&(bud_2 < 60))|((bud_2 > 600)&&(bud_2 < 660))|((bud_2 > 1200)&&(bud_2 < 1260)))
{
flag_dinamik = 1;
}
if (flag_signala == 1)
{
flag_dinamik = 1;
}
на это
if ((bud_1 > 0) || (((bud_2 > 0) && (bud_2 < 60)) | ((bud_2 > 600) && (bud_2 < 660)) | ((bud_2 > 1200) && (bud_2 < 1260))) || (flag_signala == 1))
{
PORTB |= 0b00010000;
}
else {
PORTB &= 0b11101111;
}

По идее должно сработать
Ответить
0
Алекс #
Можете сделать, чтобы при срабатывании таймера был дополнительный выход на свободный вывод микроконтроллера в виде логической единицы?
В программировании не силен, поэтому, если Вам не трудно, то вышлите изменённую прошивку на почту.
Ответить
0
Andrnet #
Я понимаю, что тема старая, но часы жесть конечно. В одной минуте у этих часов 2 мин 15 сек, секундомер вообще веселый ровно в два раза быстрей считает )
Что-то не доделанный проект
Ответить
0

[Автор]
Petr9067 #
Кварц может не той частоты подобрали или фьюз-биты случайно выставили, чтобы внутренний генератор использовался. Судя по словам там частота явно на 8 МГц. А так не спорю, погрешность там будет присутствовать всегда, так как для часов лучше использовать кварц 32768 Гц.
Отредактирован 13.02.2023 14:52
Ответить
0
Tomas #
А можете подсказать в какой программе вы компилировали код?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Ветрогенератор Мультиметр DT9205A
вверх