Цифровые часы atmega328: создание своими руками

Записки программиста

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

Думается, не повредит привести пример того, как, используя имеющиеся у нас на данный момент знания, сделать что-то сравнительно полезное. Например, электронные часы.<\p>

Честно говоря, поначалу я хотел сделать электронные часы основанными на микросхемах стандартной логики 74xx и таймере 555.

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

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

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

Первая версия часов, основанная уже на ATmega328P, выглядела так:

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

Принцип работы следующий. Раз в 50 мс микроконтроллер просыпается, шлет всем счетчикам Reset, а затем посылает каждому из них сигналы инкремента в количестве, соответствующем цифре, которую должен отобразить индикатор, подсоединенный к счетчику. То есть, на самом деле индикаторы сбрасываются и выставляются заново 20 раз в секунду, но визуально это совершенно незаметно.

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

Код прошивки:

#include

/* inc/dec buttons */

const int HINC_PIN = A5;
const int HDEC_PIN = A4;
const int MINC_PIN = A3;
const int MDEC_PIN = A2;

/* pin to 4026 IC's reset inputs */

const int RESET_PIN = 5;

const int DOT_PIN = 8;

/* pins to 4026 IC clock inputs */

const int HPIN_H = 10;
const int HPIN_L = 9;
const int MPIN_H = 7;
const int MPIN_L = 6;

/* current time */

int hour = 0;
int min = 0;
int sec = 0;
int msec = 0;

bool hinc_released = true;

bool hdec_released = true;
bool minc_released = true;
bool mdec_released = true;

unsigned long prevMillis;

void setup()

{
  pinMode(HDEC_PIN, INPUT);
  pinMode(HINC_PIN, INPUT);
  pinMode(MDEC_PIN, INPUT);
  pinMode(MINC_PIN, INPUT);

  pinMode(RESET_PIN, OUTPUT);

  pinMode(DOT_PIN, OUTPUT);

  pinMode(HPIN_H, OUTPUT);

  pinMode(HPIN_L, OUTPUT);
  pinMode(MPIN_H, OUTPUT);
  pinMode(MPIN_L, OUTPUT);

  prevMillis = millis();

}

void displayTime()

{
  digitalWrite(RESET_PIN, HIGH);
  digitalWrite(RESET_PIN, LOW);

  digitalWrite(DOT_PIN, (sec & 1) ? HIGH : LOW);

  for(int i = 0; i<\p>

Источник: https://eax.me/atmega328p-clock/

Наручные часы на Atmega328 и OLED дисплее

Дата публикации: 14 ноября 2013.

Рейтинг:  5 / 5

Будильники– Активация до 10 будильников.- Количество будильников ограничено только количеством доступных EEPROM и RAM.

– У каждого будильника настраиваются часы, минуты и в какие дни недели он должен быть активным.

Игры

Побег АвтомобильDodge

Приложения

Фонарик. Включаетвсе пикселиOLEDисветодиоды, а также имеетрежимстробоскопа Стопкадр

Некоторые возможности:– 3 канала регулировки громкости для:Основного режима;Будильника;

Почасового сигнала.

– Режим ожидания- Регулировка яркости дисплея

– Анимация

Вы же не собираетесь, от этого отказываться, или может g shock купить спб ?

Энергосбережение

В активном режиме микроконтроллер пытается уйти в режим сна при каждой возможности.

В режиме сна контроллер просыпается на миллисекунду чтобы посмотреть нуждается устройство в обновлении, если нет, то он возвращается в режим сна, это обычно занимает менее 100 us, если дисплей не нуждается в обновлении. В этом режиме ток потребления может быть примерно от 0,8 мА до 2 мА, в зависимости от того, как долго высвечивается кадр.

В режиме сна микроконтроллер отключает OLED дисплей и уходит в спящий режим, где его разбудит только нажатие кнопки, сигнал от RTC или при подключении к USB. В этом состоянии микроконтроллер потребляет ничтожные 100 nА.

В спящем режиме общий ток потребления часов 6 uA. В активном режиме ток может варьироваться от 2 мА до более чем 70 мА, средний ток потребления 10 mA.

Общее потребление тока, емкость аккумулятора: 150mAh

Минимальный(В режиме сна) Нормальный(Индикация главных часов) Высокий(Фонарик)
6uA2.85 years 10mA15 hours 64mA2 hours, 20 minutes

Если часы находятся в активном режиме в среднем 1 минуту в день (с 5-секундный тайм-аутом сна и проверкой времени 12 раз в день), то они должны работать около 1 года 4 месяцев на одной зарядке. (30 дней, если часы просыпаются на 1 минуту в час).

Потребление тока для отдельных компонентов

Компонент Потребление тока
ATmega328P (сон/активный) 100nA / 1.5mA
OLED (сон/активный) 500nA / 8.5mA
DS3231M RTC 2.5uA
Диод Шоттки (D1) (ток обратной утечки) 1uA
Регулятор (ток покоя) 1uA
Другие (MOSFET и конденсаторы и т.п. утечки) 1uA
Всего (сон/активный) 6.1uA / 10mA

Дальнейшее совершенствование проекта– Программирование через USB. На данный момент используются 4 провода для SPI программирования, при частом подключении к разъему программирования, боюсь что он расшатается.- Добавить другой метод измерения заряда батареи.

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

Текущая прошивка использует примерно 28 KB из 32 KB свободного места памяти  ATmega328P, при использовании других микроконтроллеров с большим объемом памяти, необходимо будет добавить больше возможностей, например калькулятор.

Тем не менее, ATmega328P имеет самое большое количество памяти для AVR в 32 контактных TQFP корпусах, чтобы иметь больше памяти я должен был бы использовать 44 контактный AVR. ATmega1284 выглядит очень интересно.- Импульсный стабилизатор, регулятор подкачки заряда или может быть гибридное решение?

Линейный регулятор который используется в данный момент не является особо эффективным, импульсный регулятор, кажется, не очень хорош при низком токе. Может есть возможность использования регулятора подкачки заряда или гибридное решение – линейным регулятор для неактивного режима и импульсный стабилизатор для активного режима?

Может кто знает?

Фотогалерея проекта

Источник: https://radioparty.ru/device/avr/505-clock-atmega328-oled

Электронные часы своими руками

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

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

Схема работает как часы и как термометр – режимы переключаются кнопкой или автоматически.

Схема электрическая самодельных часов с термометром

   Микроконтроллер PIC18F25K22 берёт на себя всю обработку данных и отсчёт времени, а на долю ULN2803A остаётся согласование его выходов со светодиодным индикатором.

Небольшая микросхема DS1302 работает как таймер точных секундных сигналов, частота её стабилизирована стандартным кварцевым резонатором 32768 Гц.

Это несколько усложняет конструкцию, зато вам не придётся постоянно подстраивать и корректировать время, которое будет неизбежно запаздывать или спешить, если обойтись случайным ненастроенным кварцевым резонатором на несколько МГц. Подобные часы скорее простая игрушка, чем качественный точный хронометр.

   При необходимости, датчики температуры могут быть расположены далеко от основного блока – они соединяются с ним трёхпроводным кабелем. В нашем случае один температурный датчик установлен в блок, а другой расположен снаружи, на кабеле длинной около 50 см. Когда пробовали кабель 5 м, то тоже прекрасно функционировало.

   Дисплей часов изготовлен из четырех больших светодиодных цифровых индикаторов. Первоначально они были с общим катодом, но изменены на общий анод в финальной версии.

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

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

   Сама электроника запускается от 5 В, но для яркого свечения светодиодов необходимо использовать 12 В.

Из сети, питание поступает через понижающий трансформатор адаптер на стабилизатор 7805, который образует напряжение строго 5 В.

Обратите внимание на небольшую зелёную цилиндрическую батарейку – она служит источником резервного питания, на случай пропадания сети 220 В. Её не обязательно брать на 5 В – достаточно литий-ионного или Ni-MH аккумулятора на 3,6 вольта.

   Для корпуса можно задействовать различные материалы – дерево, пластик, металл, либо встроить всю конструкция самодельных часов в готовый промышленный, например от мультиметра, тюнера, радиоприёмника и так далее. Мы сделали из оргстекла, потому что оно легко обрабатывается, позволяет увидеть внутренности, чтоб все видели – эти часы собраны своими руками. И, главное, оно было в наличии 🙂

   Здесь вы сможете найти все необходимые детали предлагаемой конструкции самодельных цифровых часов, в том числе схему, топологию печатной платы, прошивки PIC и исходный код.

   Схемы на микроконтроллерах

Источник: http://elwo.ru/publ/skhemy_na_mikrokontrollerakh/ehlektronnye_chasy_svoimi_rukami/9-1-0-712

Часы на 2.7 дюймовых индикаторах своими руками

Я уже писал подобный обзор здесь. Было сделано 2 экземпляра часов как в том обзоре, но с одними случилось что-то непонятное, и я, обрадовавшись поломке, решил радикально переделать их.

Что-то непонятное — это убегание на 2 минуты, которое я не смог связать ни с наводками, ни с неисправностью микроконтроллера, ни с неисправностью таймера ds1307. Видимо виной всему плата, так как на плате второго экземпляра контроллер с таймером работали исправно.

К моменту поломки я активно игрался с ардуино нано, поэтому мозгом будет служить она.

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

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

Максимум к нему можно подключить 64 светодиода (ну или, соответственно, восемь семисегментных односимвольных индикаторов). Драйвер управляется по интерфейсу SPI, а так же имеет программное управление яркостью свечения индикаторов или светодиодов.

Читайте также:  Rgb-светодиоды: адресуемая светодиодная лента - arduino+

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

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

Вот посылка пришла. Так же в посылке, помимо MAX7219, были smd транзистоы MMBT3906 и MMBT3904, позже я использую их для изготовления конечного устройства, и еще четырехсимвольные 7-сегментные индикаторы с общим катодом, которые будут служить временным дисплеем для отладки часов.

Большие индикаторы покупал когда-то давно здесь. На фото прототип, собранный мной для отладки программы, которая будет управлять всем этим хозяйством. Вторая arduino nano в верхнем правом углу макетки не относится к проекту и торчит там просто так, внимание на нее можно не обращать.

Немного о принципе работы: ардуино берет данные у таймера DS323, перерабатывает их, определяет уровень освещенности с помощью фоторезистора, затем все посылает на MAX7219, а она в свою очередь зажигает нужные сегменты с нужной яркостью. Так же с помощью трех кнопок можно выставить год, месяц, день, и время по желанию. На фото индикаторы отображают время и температуру, которая взята с цифрового термодатчика ds18s20

Основная сложность в моем случае — это то, что 2.7 дюймовые индикаторы с общим анодом, и их надо было во первых как то подружить с max7219, которая заточена под индикаторы с общим катодом, а во вторых решить проблему с их питанием, так как им нужно 7,2 вольта для свечения, чего одна max7219 обеспечить не может.

Попросив помощи на одном форуме я получил таки ответ. Решение на скриншоте:
К выходам сегментов из max7219 цепляется микросхемка uln2003a, которая инвертирует сигнал, а к каждому выводу, который должен подключаться к общему катоду дисплея цепляется схемка из трех транзисторов, которые так же инвертируют его сигнал и повышают напряжение.

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

Часы будут состоять из блока дисплея и блока питания и управления. Последний было решено собрать первым. Эстетов и бывалых радиолюбителей прошу не падать в обморок из-за жестокого обращения с деталями.

Покупать принтер ради ЛУТа нет никакого желания, поэтому делаю по старинке — тренируюсь на бумажке, сверлю отверстия по шаблону, рисую маркером дорожки, затем травлю.

Принцип крепления индикаторов оставил тот же, как и на прошлом экземпляре.

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

Процесс разметки

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

Ещё

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

В этот раз я лишился SMD-девственности, и включил 0805 компоненты в схему. Худо-бедно первые резисторы и конденсаторы были припаяны на места. Думаю дальше набью руку, будет легче.

Для пайки использовал флюс, который купил здесь.

Паять с ним одно удовольствие, спиртоканифоль использую теперь только для лужения.

Вот готовые платы.

На плате управления имеется посадочное место для ардуино нано, часов, а так же выходы для подключения к плате дисплея и датчики (фоторезистор для автояркости и цифровой термометр ds18s20) и блок питания на lm317 с регулировкой выходного напряжения (для больших семисегментников) и l7805 для питания часов и ардуино, на плате индикации находятся посадочные гнезда для дисплеев, панельки для max2719 и uln2003a, решение для питания четырех больших семисегментников и куча перемычек.

Ещё

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

Не светился последний большой индикатор, а остальные светились тускло. С первой проблемой расправился пропаиванием ножки смд-транзистора, со второй — регулировкой напряжения, выдаваемого lm317.

ОНО ЖИВОЕ!

Делаем подставку

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

Ну вот и всё. Осталось только причесать код.Некоторые наверное скажут, что легче купить и вид эстетичнее, и будут правы, но это же хобби.

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

Традиционное животное

Источник: https://mysku.ru/blog/ebay/32542.html

Makerbot – необычные часы – отладочная плата на базе микроконтроллера ATmega328

Журнал РАДИОЛОЦМАН, сентябрь 2011

В статье описывается проект на микроконтроллере Atmel AVR, представляющий собой компактную отладочную плату и, по совместительству, необычные часы на светодиодах, получивший название Makerbot. Это Arduino проект, и микроконтроллер имеет собственный загрузчик, который работает по UART интерфейсу. Сам загрузчик программируется с помощью программатора в среде Arduino.

Спецификация:

  • устройство выполнено на микроконтроллере ATmega328;
  • кварцевый резонатор 16 МГц;
  • 3 кнопки для управления (пользовательские кнопки);
  • динамик (буззер);
  • 6-контактный разъем для обновления ПО с помощью Arduino;
  • 6-контактный разъем внутрисхемного программирования;
  • 4-контактный разъем для расширения возможностей (подключение дополнительных датчиков).

Устройство выполнено на двухсторонней печатной плате в форме окружности с диаметром около 50 мм. Питание осуществляется от батареи, напряжение питания 3.3 В. Схема и печатная плата разработаны в среде проектирования Eagle, файлы проекта доступны для скачивания в разделе загрузок.

Для отображения текущего времени используются светодиоды:

  • 12 светодиодов для индикации часов;
  • 12 светодиодов, каждый из которых соответствует 5 минутам;
  • 4 дополнительных светодиода индикации минут, каждый из которых соответствует 1 минуте (т.е. для индикации 4 дополнительных минут).

К примеру, если текущее время 12:04, будет светиться светодиод, обозначающий часы – в 12 позиции, светодиод, обозначающий минуты – в 12 позиции, и будут светиться 4 дополнительных светодиода, обозначающих минуты.

Принципиальная схема

Кликните для увеличения

Все примененные компоненты для поверхностного монтажа, за исключением разъемов и держателя батареи. Разъемы не обязательно оставлять на плате, они нужны лишь для программирования и обновления ПО микроконтроллера.

№п/п Количество Обозначениев схеме Наименование Номинал Корпус
1 3 S1, S2, S3 Кнопки SMT
2 4 R1, R9, R10, R11 Резисторы 10 кОм SMT 0805
3 12 LED13-24 Зеленые светодиоды SMT 1206
4 12 LED1-12 Красные светодиоды SMT 1206
5 4 LED25-28 Желтые светодиоды SMT 1206
6 6 R2, R3, R4, R5,R6, R7 Резисторы 75 Ом SMT 0805
7 1 Crystal Кварцевый резонатор 16 МГц SMT
8 2 C1, C2 Конденсаторы 15 пФ SMT 1206
9 1 C5 Конденсатор 1 мкФ SMT 1206
10 1 C3 Конденсатор 10 мкФ SMT 1206
11 2 C4, C6 Конденсаторы 100 нФ SMT 1206
12 1 SG1 Буззер SMT
13 1 IC1 Микроконтроллер ATmega328P-AU-ND TQFP
14 ICSP Коннектор внутрисхемногопрограммирования DNS
15 BK-OUT Коннектор расширения DNS
16 TTL Коннектор для обновления ПОс использованием загрузчика
17 R8 Резистор 1 МОм DNS
18 Держатель батареи типа CR2032

Также разработана вторая, усовершенствованная версия часов. Основные отличия от первой версии:

  • питание осуществляется от Li-Polymer аккумулятора емкостью 110 мА•ч;
  • встроенная схема заряда аккумулятора;
  • порт microUSB для питания часов и заряда аккумулятора;
  • количество кнопок сокращено до 2;
  • микроконтроллер тактируется от кварцевого резонатора 8 МГц;
  • отсчет времени ведется специализированной микросхемой DS1337, которая подключена к микроконтроллеру по шине I2C.

Схема зарядки аккумулятора в данном варианте конструкции часов выполнена на микросхеме MCP73831 производства компании Microchip, которая предназначена для зарядки одной ячейки Li-Po или Li-Ion аккумулятора.

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

со встроенными аккумуляторами, например, карманные приборы, сложные USB изделия, медицинская техника.

Вид печатной платы, второй вариант:

Вид печатной платы в 3D:

При конструировании данных часов потребуется редактирование текстового файла в среде Arduino.

В данном текстовом файле прописаны основные конфигурации платформ Arduino: протокол программирования, размер Flash-памяти микроконтроллера (в соответствии с платформой Arduino), конфигурация загрузчика, Fuse- и Lock-биты, тактовая частота и пр.

Редактирование потребуется, в связи с тем, что микроконтроллер тактируется от кварцевого резонатора и питание осуществляется от батареи 3 В, а уровень Brown-Out детектора установлен на 2.8 В, что в данной конструкции неприемлемо.

Загрузки

  • Схема
    • Принципиальная схема первого варианта (pdf) – скачать
    • Печатная плата (Eagle) – скачать
    • Второй вариант конструкции (с DS1337) в формате Eagle – скачать 
  • Программное обеспечение
    (Header-файл с определением класса MakerBotWatch, исходный код класса MakerBotWatch, тестовый проект простых часов с использованием класса MakerBotWatch, модифицированный Header-файл с определением класса MakerBotWatch (версия 1.1), модифицированный исходный код класса MakerBotWatch (версия 1.1), тестовый проект усовершенствованных часов с использованием класса MakerBotWatch, примеры) – скачать
     
  • Дополнительные ресурсы:
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Фрагменты обсуждения: Полный вариант обсуждения »
  • А что я разве не смогу прошить эти часы без Ardruino? вроде МК AVR программатор есть но при чем тут Андруино?
  • Почему же, прошить без Arduino можно. Для этого на плате есть разъем внутрисхемного программирования (IСSP). Под Arduino здесь понимается проект программного обеспечения микроконтроллера (прошивка), используемые библиотеки и загрузчик (bootloader) по последовательному интерфейсу.
  • Понятно спасибо а есть полное описание работы часов, за что отвечают кнопки зачем нужен буззер? Для будильника? Возможно кто то уже собирал и есть видео обзор часов.
  • Да, гора рождает мышь. По мере развития аппаратных возможностей, программные проекты становятся все менее и менее эффективными. Сейчас. ATmega328: 32 Кб Flash, 2 Кб SRAM, 16 МГц Freq – на выходе простейшие часы с циферблатом. Несколько лет назад. PIC16F84: 1 Кб Flash, 0.5 Кб SRAM, 4 МГц Freq – интересные часы-пропеллер. MClock.

При перепечатке материалов с сайта прямая ссылка на РадиоЛоцман обязательна.

Приглашаем авторов статей и переводов к публикации материалов на страницах сайта.

Источник: https://www.rlocman.ru/shem/schematics.html?di=110677

Многофункциональные цифровые часы на микроконтроллере Attmega8. Схема и описание

Данная статья описывает конструкцию цифровых часов на микроконтроллере Attmega8, которые снабжены секундомером, будильником, таймером обратного отсчета. В часах реализована функция отображения дня недели и даты с возможностью комбинированного отображения даты и времени. Имеется автоматическое переключение на летнее и зимнее время, а так же учет високосного года.

Читайте также:  Уроки ардуино: создаем игру крестики-нолики своими руками

Дисплей построен на шести 7-сегментных светодиодных индикаторов с регулировкой яркости. Часы также оснащены резервным питанием от батарей.

Описание конструкции микроконтроллерных часов

Как уже было сказано выше, часы имеют шестизначный дисплей, состоящий из двух трехзначных дисплеев T-5631BUY-11, работающий в мультиплексном режиме. Аноды индикаторов сгруппированы по разрядам и переключаются с помощью транзисторов Т1…Т6.

Катоды сгруппированы в сегменты и питаются непосредственно от микроконтроллера IO1 Attmega8. Частота мультиплексирования составляет 100Гц.

Часы контролируется низкочастотным кварцевым резонатором X1 с частотой 32768 Гц. В результате активации бита CKOPT, разрешающего использование внутренних конденсаторов 36пф для кварца, отпадает необходимость в использовании внешних конденсаторов.

В случае возникновении проблем с запуском генератора, можно попробовать подключить 2 конденсатора по 22пф. Для еще большей точности часов можно вообще отключить внутренние конденсаторы (сбросить бит СKOPT) и оставить только внешние.

Пъезоизлучатель REP1 издает звуковой сигнал будильника и сигнализирует о завершении работы таймера. Во время звукового сигнала на выводе 16 (порт PB2) появляется лог.1. Этот сигнал можно использовать для управления какой-либо нагрузкой.

Управление часами производится тремя кнопками — минуты, часы и режим. Кнопки подключены через резисторы, которые защищают порты микроконтроллер Attmega8. Схема питается от источника 5 вольт (7805). Потребление тока в основном зависит от числа активных индикаторов, а так же от степени настройки яркости.

При максимальной яркости ток потребления доходит до 60 мА. Часы снабжены резервной батареей питания. Во время работы от батареи, часы переходят в экономичный режим, при котором дисплей выключен. Так же в этом режиме не активны и кнопки за исключением случая, когда необходимо отключить звуковой сигнал.

Напряжение резервного питания от 3 до 4,5 В. Это может быть одна батарея на 3В, три NiMH или NiCd по 1,2 В или один аккумулятор Li-Pol или Li-Ion (от 3,6 до 3,7 В). Ток потребления от 3В батареи составляет всего лишь 5…12мA. Время автономной работы часов в экономичном режиме от батареи 3В типа CR2032 со стандартной емкостью 200mAh теоретически должно хватить примерно на 2,5 — 3 лет.

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

Управление часами

Часы управляются с помощью TL1-минута, час-TL2 и TL3-режим. Кнопки часы и минуты используются в режиме часов для назначения часов и минут. В других режимах они имеют различные функции. Кнопка режима переключает между различными режимами, которых в общей сложности 8:

Режим 1-й — Часы

В этом режиме на дисплее отображается текущее время в формате «ЧЧ.ММ.СС». Кнопка часов используется для установки часов. Кнопка минут для установки минут. При ее нажатии происходит сброс секунд.

Режим 2-й — Включение перехода на летнее время и установки года

Здесь Вы можете включать и выключать автоматический переход между летним и зимним временем и установить год. Данные следующего формата «AC ‘RR» (АС – автоматическое время, пробел, последние две цифры года).

 Режим 3-й — Таймер обратного отсчета

Это режим позволяет организовать обратный отсчет от заданного значения до нуля. По истечении этого времени раздастся звуковой сигнал и светится светодиод LED1. Звуковой сигнал может быть остановлен нажатием кнопки Режим. Данные следующего формата «ЧЧ.ММ.СС». Максимально возможное значение составляет 99.59.59 (почти 100 часов).

Режим 4-й – Комбинированный вывод информации

В этом режиме, попеременно показывается:

  1. текущее время в формате «ЧЧ.ММ.СС»
  2. дата в формате «AA.DD.MM.» 

Каждый формат отображается в течение 1 секунды. В этом режиме используются кнопки Часов и Минут, для регулировки яркости дисплея (Часы-, Минуты+). Яркость изменяется логарифмически в 6 этапов: 1/1, 1/2, 1/4, 1/8, 1/16 и 1/32-й. По умолчанию установлено 1/2

Режим 5-й — Установка дня недели и режим работы будильника

В этом режиме можно установить день недели — с понедельника по воскресенье (отображается как пн, вт, ср, чт, пт, сб, вс), включать будильник и выбирать его режим работы. Данные следующего формата «AA AL._» (день недели, пробел, AL., Настройка будильника).

Кнопка часов устанавливает день недели. Кнопка минут используется для включения/выключения звукового сигнала будильника и выбора режима его работы: «AL._» = будильник не активный, «AL.1″ = будильник сигналит 1 раз (затем автоматически переходит в положение»AL._»), «AL.5» = сигнал будильника только в будние дни (пн-пт, кроме сб-вс), «AL.7» = будильник звонит каждый день

Режим 6-й – Установка дня недели и даты

Кнопка часов позволяет установить день месяца. Кнопка минут позволяет установить месяц.

Режим 7-й — Секундомер

Секундомер позволяет измерять время с точностью 0,1 сек. Максимальное время измерения составляет 9.59.59.9 (почти 10 часов). Данные следующего формата «H.MM.SS.X». Кнопка минут используется для запуска и остановки секундомера. Кнопка часов используется для сброса.

Режим 8-й — Будильник

Этот режим используется для отображения и установить время будильника (ALARM). Данные следующего формата «HH.MM.AL». Кнопка Минуты устанавливает минуту будильника, кнопку Часы устанавливает час будильника.

https://www.youtube.com/watch?v=CYLlddJHo14

Ниже приведена схема аналогичных часов, имеющие индикатор с общим катодом

Скачать прошивку с общим анодом (скачено: 743)

Скачать прошивку с общим катодом (скачено: 247)

http://danyk.cz

Источник: http://fornk.ru/1273-mnogofunkcionalnye-cifrovye-chasy-na-mikrokontrollere-atmega8/

Часы пропеллер на Atmega8

Роман Галимов

Привет всем! Хочу предложить Вашему вниманию простые часы-пропеллер, которые я собрал на контроллере Atmega8. Они изготовлены из доступных деталей и их легко повторить и изготовить. Единственное что – необходим программатор для прошивки контроллера часов и пульта управления.

Для основания часов был использован обычный вентилятор 120 мм (кулер).

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

Схема самих часов довольно простая и собрана на микроконтроллере Atmega8, для синхронизации работы которого использован часовой кварц с частотой 32768 Гц.

Часы питаются от приёмной катушки, энергия на которую передаётся с генератора с передающей катушкой. Обе эти катушки составляют воздушный трансформатор.

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

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

При включении генератора в первый раз, ширину импульсов (скважность) ставим на минимум (ручка регулятора в верхнем по схеме положении, то есть 4 нога через резистор R7 притянута к 14, 15, 2 ноге TL-494).

Частоту генератора крутим, пока не исчезнет писк, это примерно 18-20 Кгц (настройка на слух), а если есть чем измерить частоту, то настраиваем её соответственно в этих пределах.

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

. Посмотрите демонстрационное видео работы часов.

Видео

Плата самих часов крепится к основанию вентилятора. Я закрепил её двухсторонним скотчем.

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

Резистор вместо 2к поставил 100к.

Ответственными моментами при изготовлении часов являются – изготовление воздушного трансформатора и центровка ( вернее балансировка) платы часов на основании вентилятора.

К этим моментам отнеситесь серьёзнее.

Воздушный трансформатор

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

Придумал такую конструкцию не я, просто взял эту идею из инета. Для намотки трансформатора делается основа из кабельного канала.

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

Далее на оправку из кабельного канала, наматываем 100 витков эмалированного провода, диаметром 0.25. Ток потребления собранного трансформатора, у меня получился 200 мА (это с довольно заметным зазором между катушками).

В целом вместе с двигателем вентилятора, ток потребления получается  в районе 0.4-0.5А. Первичную (передающую) катушку делаем также, но стараемся сделать минимальный зазор между катушками. Передающая катушка тоже содержит 100 витков провода 0.

3 (можно тем-же 0.25).

На схеме у меня немного другие моточные данные этих катушек.

Плата часов

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

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

Плату со светодиодами соединил с платой часов обычным эмалированным (намоточным) проводом, он более жёсткий по сравнении с монтажным и не трепится при вращении.

Для балансировки всей платы, с другой её стороны приклеиваем термоклеем винт, диаметром 3-4 мм, накручивая с другой стороны на винт различные гайки – добиваемся минимальной вибрации. Для проверки работоспособности платы часов – коротим фоторезистор отверткой, пинцетом, светодиоды при этом должны моргнуть.

Часы начинают работать при появлении 5В (логическая единица) на 5 ноге атмеги. То есть при освещении фоторезистора – на 5 ноге должно быть 5В, Когда фоторезистор не освещён, на 5-й ноге атмеги должен быть логический 0 (около 0В), для этого подбираем резистор на землю с 5 ноги.

На схеме стоит 2 кОм, у меня получилось 2.5 Ком.

Внизу на основании вентилятора приклеиваем светодиод так, чтобы при каждом обороте двигателя вентилятора – фоторезистор проходил как можно ближе к источнику света (светодиоду).

Пульт управления

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

Схема пульта собрана на микроконтроллере ATTINY2313. На плате установлен сам МК с обвязкой и шесть кнопок, предназначенных для управления часами.

Корпус для пульта собирать не стал, поэтому только фото самой платы.

Информация по назначению кнопок пульта; H+ и  Н- настройка часов М+ и М- настройка минут R/L смена направления (для винтов крутящихся по часовой и против часовой) font  смена шрифта (тонкий, жирный и надпись VPRL.ru)

Читайте также:  Уроки аrduino: подсоединяем микроконтроллер к bluetooth

при надписи VPRL.ru кнопками H+ и H – регулируется ширина надписи.

В прикреплённом архиве содержатся все необходимые файлы для сборки часов; Архив

Архив для статьи

Если у Вас возникнут какие либо вопросы по конструкции часов, задавайте их ЗДЕСЬ на форуме, постараюсь по возможности помочь и ответить на возникшие вопросы.

 

Источник: http://vprl.ru/publ/cifrovaja_tekhnika/mikrokontrollery/chasy_propeller_na_atmega8/15-1-0-116

Простые часы на микроконтроллере AVR

Схема и программа очень простых часов на микроконтроллере AVR с использованием микросхемы реального времени DS1307

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “Радиолюбитель“

Сегодня, уважаемые радиолюбители, вашему вниманию предлагается очень простая схема часов на микроконтроллере AVR и часов реального времени с последовательным интерфейсом I2C DS1307.

Конструкция собрана на микроконтроллере ATyni26 (просто именно этот МК был под рукой). Но вы можете применить любой другой МК, главное чтобы у него было 13 свободных входов – 11 для вывода текущего времени на четырехразрядный семисегментный светодиодный индикатор и 2 вывода – на кнопки установки и коррекции времени.

Схема часов:

В схеме применены следующие детали:
– Микроконтроллер – ATyni26 в DID корпусе
– Часы реального времени – DS1307 в DIP корпусе
– Кварц – 32,768 кГц, с входной емкостью 12 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов
– резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032
– 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения)
– все транзисторы – NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
– микросхемный стабилизатор напряжения типа 7805
– все резисторы мощностью 0,25 ватт
– полярные конденсаторы на рабочее напряжение 50 вольт
Ток потребления устройством составляет до 30 мА.
Для питания конструкции можно использовать любое ненужное зарядное устройство от телефона или подходящий блок питания с выходным напряжением 7-9 вольт.
Общение микроконтроллера с часами DS1307 происходит по шине I2C и организовано программным путем.
Батарейку резервного питания часов DS1307 можно и не ставить, но в этом случае, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц) служит для разделения часов и минут в конструкции.

Работа программы.
Тактовая частота работы микроконтроллера – 1 мГц (заводская установка, FUSE-биты трогать и устанавливать не надо). Размер программы – 1 килобайт.

При запуске программы происходит:
– запуск таймера Т0 с предустановленной частотой СК/8 и вызовом прерывания по переполнению (при такой предустановленной частоте вызов прерывания происходит каждые 2 миллисекунды)
– инициализация портов (порты РА0-6 и РВ0-3 настраиваются на вывод, РА7 и РВ6 на ввод)
– инициализация шины I2C (выводы РВ4 и РВ5)
– при первом запуске, или повторном запуске при отсутствии резервного питания DS307, проверяется 7 бит (СН) нулевого регистра DS1307 и происходит переход в первоначальную установку текущего времени. При этом, кнопка S1 – для установки времени, кнопка S2 – переход к следующему разряду. Установленное время – часы и минуты записываются в DS1307 (секунды устанавливаются в ноль), а также вывод SQW/OUT (7-й вывод) настраивается на генерацию прямоугольных импульсов с частотой 1 Гц
– разрешается глобальное прерывание
– программа переходит в цикл с опросом копки S2
При переполнения счетчика таймера Т0 программа переходит к обслуживанию прерывания (каждые 2 мс):
– считывается текущее время с DS1307 которое записывается в четыре переменные SRAM (десятки часов, единицы часов, десятки минут, единицы минут)
– подпрограммой вывода текущего времени производится динамическая индикация текущего времени на светодиодном индикаторе
– при нажатии кнопки S2 программа запрещает глобальное прерывание и переходит в подпрограмму коррекции времени (кнопками S1 и S2 устанавливаются десятки и единицы минут, затем, с 0 секунд, нажатием кнопки S2 происходит запись уточненного времени в DS1307, разрешение глобального прерывания и возвращение в основную программу).

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

Если в схеме вместо светодиодных индикаторов применить LCD дисплей, к примеру WH0802 (двухстрочный, с выводом восьми символов в строке) или аналогичный, то можно организовать полноценные часы с полным выводом текущего времени, а питание устройства организовать от гальванических элементов или аккумуляторных батарей.

Расположение выводов микроконтроллера ATyni26:

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

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

Рекомендуемая схема подключения кварца к DS1307:

Общение микроконтроллера с часами реального времени DS1307 организовано программным путем, поэтому в схеме можно применить микроконтроллер у которого нет аппаратного модуля I2C.

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

  Даташит DS1307 на русском (312.1 KiB, 1,726 hits)

  Часы на ATyni26 в Algorithm Builder (8.2 KiB, 1,648 hits)

  Программа часов на ATyni26 в HEX коде (3.1 KiB, 1,491 hits)

  Схема часов в формате sPlan7 (119.3 KiB, 2,639 hits)

Источник: http://radio-stv.ru/mikrokontrolleri/radiolyubitelskie-shemyi-na-mikrokontrollerah/prostyie-chasyi-na-mikrokontrollere-avr

Пример прошивки atmega328. Таймер для шашек

Сегодня не большая статья о готовом проекте — это таймер для игры в быстрые шашки.

Устройство получилось простое, на его панели располагаются два светодиода, указывающие на ход первого или второго игрока, 7-сегментный индикатор с один разрядом, на котором происходит отсчет секунд от 9 до 0, а также несколько кнопок управления и две кнопки для передачи хода сопернику. Работу готового устройства можно посмотреть на видео ниже.

Схема подключения atmega328 к arduino uno для прошивки

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

Вместо привычной платы ардуино использовались atmega328 и кварц на 16 Mhz. В идеале еще необходимо добавить два конденсатора по 22 пФ, но их я не нашел на тот момент, хотя в следующем подобном проекте обязательно их добавлю.

Ниже приведена официальная схема подключения микроконтроллера, кварца и конденсаторов. Также на картинке изображено как, подключить arduino uno к МК atmega328 для загрузки скетча. При таком подключении arduino uno будет выступать в роли программатора.

Как заливать прошивку я писать не буду, об этом и так много статьей, если кому-то нужно, то можно посмотреть в мануале: тут.

Пример работы с atmega328

Оказалось что, работать с atmega328 также просто, как и с любой ардуиной. Достаточно отладить программу использую arduino, а уже готовый скетч просто залить в atmega328, которая имеет все те же самые пины и точно также с ними работает. Ниже находится картинка, с подписанными ножками микроконтроллера.

Логика работы устройства

Как работает устройство, наглядно показывает видео в начале статьи. Для реализации проекта помимо atmega328 использовался 7-сегментный индикатор, принцип работы подобного индикатора я уже описывал с статье « 4-разрядный 7-сегментный индикатор hs420561k-32».

Управлять индикатором помогал сдвиговый регистр 74hc595. Так же было задействовано 5 кнопок, три из которых используются для настройки и запуска таймера, а две для передачи хода между игроками.

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

Корпус устройства

Корпус был напечатан на 3D принтере, но с размерами платы и корпуса я как обычно накосячил, и пришлось еще печатать удлинители для кнопок, поскольку после сборки устройства, достать до кнопок пальцами, не было возможности.

Что использовалось в проекте:

Код скетча таймера для шашек на atmega328

Посмотреть код скетча приведен ниже, так же его можно скачать тут.

//Пин подключен к ST_CP входу 74HC595 int latchPin = 10; //Пин подключен к SH_CP входу 74HC595 int clockPin = 12; //Пин подключен к DS входу 74HC595 int dataPin = 11; // Кнопка увеличения таймера int btn_up = 2; bool status_btn_up = false; // Кнопка уменьшения таймера int btn_down = 3; bool status_btn_down = false; // Кнопка старта/паузы int btn_select = 4; bool status_btn_select = false; // Кнопка 1 игрока int btn_red_1 = 5; // положение кнопки bool status_btn_red_1 = false; // Кнопка 2 игрока int btn_red_2 = 7; // положение кнопки bool status_btn_red_2 = false; // пин пищалки int pin_beep = 9; // Светодиод 1 int led_1 = 6;//A0; // Светодиод 2 int led_2 = 8;//A1; // количество секунд в таймере, по умолчанию 5 сек int countSeconds = 5; // флаг таймера, запущен или нет bool startGame = false; // отсчет итераций, считаем миллисекунды, по 100 за итерацию int timer = 0; // количество установленных секунд для таймера int currentSec = 5; // функция вывода цифры на 7-сегментом индикаторе void writeNum(int num){ byte arrayNums[] = { B10111111, B00001100, B01011011, B01011110, B01101100, B01110110, B01110111, B00011100, B11111111, B11111110 }; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, arrayNums[num]); digitalWrite(latchPin, HIGH); } // функция пищалки void beep(unsigned char delayms){ analogWrite(pin_beep, 20); delay(delayms); analogWrite(pin_beep, 0); delay(delayms); } void setup() { // настройка пинов pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(btn_up, INPUT); pinMode(btn_down, INPUT); pinMode(btn_select, INPUT); digitalWrite(btn_up, LOW); digitalWrite(btn_down, LOW); digitalWrite(btn_select, LOW); pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); pinMode(pin_beep, OUTPUT); } void loop() { if(startGame){ writeNum(currentSec); }else{ writeNum(countSeconds); } if(digitalRead(btn_up)){ if(!status_btn_up) { if(countSeconds < 9) countSeconds++; } status_btn_up = true; }else{ status_btn_up = false; } if(digitalRead(btn_down)){ if(!status_btn_down){ if(countSeconds > 1) countSeconds–; } status_btn_down = true; }else{ status_btn_down = false; } if(digitalRead(btn_select)){ if(!status_btn_select){ startGame = !startGame; timer = 0; currentSec = countSeconds; if(startGame){ digitalWrite(led_1, HIGH); digitalWrite(led_2, LOW); }else{ digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); } } status_btn_select = true; }else{ status_btn_select = false; } if(startGame){ timer++; // прошла секунда if(timer > 10){ timer = 0; if(currentSec > 0) { currentSec–; beep(50); } } if(currentSec == 0){ beep(50); } if(digitalRead(btn_red_1)){ if(!status_btn_red_1) { timer = 0; currentSec = countSeconds; digitalWrite(led_1, LOW); digitalWrite(led_2, HIGH); } status_btn_red_1 = true; }else{ status_btn_red_1 = false; } if(digitalRead(btn_red_2)){ if(!status_btn_red_2) { timer = 0; currentSec = countSeconds; digitalWrite(led_1, HIGH); digitalWrite(led_2, LOW); } status_btn_red_2 = true; }else{ status_btn_red_2 = false; } } delay(100); }

Послесловие

Использование в данном устройстве atmega328 — это большое расточительство, тут будет даже много и atmega8. Но цель была — использовать микроконтроллер отдельно от платы arduino, а не экономия ресурсов, заниматься оптимизаций пока нет возможности.

Так же схема собрана не совсем правильно — не были добавлены конденсаторы, для более стабильной и корректной работы МК.

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

Источник: https://vk-book.ru/primer-proshivki-atmega328-tajmer-dlya-shashek/

Ссылка на основную публикацию
Adblock
detector