Бінарний наручний годинник. Простий бінарний годинник на мікроконтролері. Схема Двійковий годинник схема

Можливо, хтось пам'ятає, як виглядали панелі управління перших електронно-обчислювальних машин (ЕОМ). Сьогодні їх можна побачити лише на архівних фотографіях. Довгі ряди лампочок, які з'являлися на перший погляд хаотично – зачаровували ентузіастів електроніки тих років.

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

Принципова схема простих бінарних годинників показана на малюнку 1. Схема побудована на базі мікроконтролера ATmega48. У схемі годинника немає зовнішнього модуля реального часу (RTC), що у свою чергу дещо знижує вартість пристрою.

При можливому збою харчування від зовнішнього джерела, відлік часу підтримується вбудованою батареєю типу CR2032, при цьому світлодіоди відключаються. Для виявлення напруги живлення від зовнішнього блоку живлення використовується схема з транзистором VT1 (BC847).

Якщо на клемах роз'єму живлення є напруга, воно проходить через діод D1 в результаті чого транзистор входить в стан насичення, а на вхід PC0 мікроконтролера подається логічний нуль, який запускає роботу світлодіодів.

Індикація поточного часу (годинник, хвилина та секунда) реалізована за допомогою трьох лінійок світлодіодів. Управління світлодіодами відбувається методом мультиплексування, що знижує споживання електроенергії та зменшує кількість використовуваних висновків мікроконтролера.

Перегляд здійснюється лише у форматі 24 години. Для відображення кількості хвилин та секунд необхідно 6 світлодіодів, а для годинника 5 світлодіодів.

Мікроконтролер ATmega48V-10AU здатний працювати при зниженому живленні до 1,8В, що є великою перевагою. Крім того, ATmega48V-10AU споживає менший струм. Частота тактового сигналу стабілізується кварцовим резонатором на 4 МГц, який є еталоном для відліку часу.

Встановлення поточного часу (години та хвилини) здійснюється за допомогою кнопок SW2 та SW1 відповідно. Лічильник секунд обнулюється при натисканні будь-якої з кнопок.

Ці кнопки неактивні при роботі від резервної батареї, щоб запобігти можливості ненавмисної зміни часу. Годинник зібраний на односторонній друкованій платі розміром 103мм×67мм.

При програмуванні мікроконтролера необхідно встановити роботу мікроконтролера від зовнішнього кварцового резонатора 4 МГц і відключити поділ тактової частоти на 8 (цей біт називається CKDIV8).

Після правильного складання годинник починає працювати відразу і повинен показати 00:00:00.

Живлення схеми здійснюється від джерела живлення з напругою +5 В. Резервне живлення – батарея типу CR2032 не є обов'язковою, вона лише підтримує відлік часу після зникнення живлення від мережі.

Споживання струму від батареї становить близько 1,5 мА. При ємності акумулятора близько 200 мАг, її має вистачити на 5 і більше днів роботи мікроконтролера, що є достатнім у типових ситуаціях.

Як згадувалося, відображення часу здійснюється у двійковій системі обчислення. Старші біти розташовані ліворуч, а молодші праворуч. На годиннику має намір немає підпису годин, хвилин і секунд, щоб людям непосвяченим було важко вгадати принцип роботи годинника.

Цей наручний електронний годинник показує час у двійковій системі, оскільки для цього потрібно менше світлодіодів для відображення часу, ніж у звичайних цифроіндикаторних годинників, та й оригінальність буде на рівні. Поширений кварц 32С417 на 32786 кГц був використаний, щоб PIC16F527 запустити в режимі низької потужності і допомогти підвищити точність хронометражу. Для носіння на зап'ясті руки використовувався відповідний матер'яний ремінь.

Мікроконтролер PIC16F527 тут використовувався тому, що він має найменший з доступних пакетів. Для живлення годинника підходять батареї типу CR2032 у спеціальному тримачі. Ця батарея має пристойну ємність, хоча вона розміром всього з монету. Щоб зменшити площу друкованої плати і вартість конструкції, було обрано один-єдиний опір, що гасить, для всього блоку SMD світлодіодів.

Збільшення зображення можна зберегти на комп'ютері. Проектування схеми тут з урахуванням типової двошарової друкованої плати.

А стандартний 20 мм ремінець якраз міститься всередині вирізів.

Алгоритм роботи годинника

Основний цикл відстежує, в якому режимі працює годинник в даний час. Перший стан - у неробочому вигляді, де годинник опитує комутатор і чекає на введення користувача. Після того, як кнопка натиснута, система рухається до другого стану, який обчислює, як довго годинник буде відображатися. Потім йде перехід на стан три, що робить більшу частину роботи з розгалуження виходячи з того, що користувач зараз робить. Годинник включає світлодіоди в такому стані. Якщо користувач утримав кнопку протягом більше 3 секунд - години переходять у стан чотири. Це стан корекції часу. Чим довше кнопка натиснута, тим швидше змінюється час.

Ідея

Почалося все з того, що захотілося зробити якесь повністю закінчене пристрій на мікроконтролер AVR. Вибір припав на бінарний годинник, т.к. вони прості у виготовленні та досить ефектно виглядають. А ще тому що мені завжди подобався плазмоїд бінарного годинника з KDE який виглядає ось так:

Що таке бінарний годинник?

Для тих хто не знає що таке бінарний годинник і як по ньому визначити час, зроблю невеликий відступ. Бінарний годинник це просто годинник, який показує час у двійковій (або бінарній) системі числення, замість звичної нам десяткової.

Бінарний годинник буває різний (як загалом і звичайний годинник) - з різною кількістю і розташуванням індикаторів, з секундами або без, з 24-х або 12-годинним форматом часу і т.д. Я вирішив зупинитися на варіанті максимально схожому на вищезгаданий плазмоїд з KDE:

Годинник складається з шести вертикальних колонок - дві колонки на годинник, дві на хвилини, і дві на секунди (зліва направо). Кожна колонка по суті є однією цифрою (тобто по дві цифри на години, хвилини і секунди).

У годиннику чотири горизонтальні рядки, тому що нам потрібно вміти показувати цифри від нуля до дев'яти (принаймні для молодшого розряду), а двійкове уявлення дев'ятки - 1001, містить чотири розряди (біта). Молодший розряд знаходиться знизу.

Найпростіше зрозуміти який час показує годинник аналізуючи "циферблат" зліва направо, знизу вгору. Запишемо значення двійкового числа представленого самим лівим стовпцем годинника зображеного на зображенні вище (умовившись, що індикатор, що горить, позначає одиницю, а згаслий - нуль): 0010 у двійковій системі числення це 2 - у десятковій. Аналогічно запишемо значення другого стовпця: 0001 у двійковій системі числення (як і в десятковій), або просто одиниця. Тобто на годиннику 21 год. Так само можна прочитати що годинник показує 35 хвилин і 28 секунд. Трохи практики і читати час з бінарного годинника буде виходити майже так само швидко, як і зі звичайних.

Реалізація

Отже, з ідеєю зрозуміло, почнемо реалізацію.

Почнемо з індикатора ("циферблата") - який є ґратами зі світлодіодів.
Оскільки в годинах 4 горизонтальних і 6 вертикальних рядів, загальна кількість необхідних світлодіодів - 6 * 4 = 24. Насправді можна обійтися меншою кількістю світлодіодів, т.к. не всі розряди будуть задіяні - наприклад старша цифра годинника (найлівіший стовпець), може показувати число не більше двох (при двадцяти годинному форматі часу), а значить можна заощадити цілих два світлодіоди. Але цього робити не став і поставив все 24 світлодіода, т.к. хотів (в майбутньому) використовувати цей годинник для показу простих текстових повідомлень.

Для налаштування часу потрібні кнопки. Їх три: перша кнопка переводить годинник у режим встановлення часу та назад. Друга кнопка, вибір розряду, перемикає стовпець в якому поточний моментналаштовується час. І нарешті, третя збільшує час у обраному стовпці на одиницю.

Як мікроконтролер використовується ATMega32. Звичайно не обов'язково використовувати такий потужний мікроконтролер для такого простого завдання, але він уже був у мене під рукою, тому я використав його.

Схема та друкована плата

Схема досить стандартна: мікроконтролер, живлення, скидання, роз'єм для підключення програматора. До TOSC1 і TOSC2 підключений годинниковий кварц від якого тикатиме годинник. Кнопки налаштування часу підтягнуті до напруги живлення. Десять виходів на світлодіоди (6 стовпців + 4 рядки). На кожний горизонтальний рядок підключено резистор для обмеження струму через світлодіод.

Друкована плата вийшла одностороння, але все ж таки з двома перемичками з іншого боку (позначені червоним) які досить просто зробити з тонкого мідного дроту.

Корпус

Напевно, це найнецікавіша частина. Але, в той же час, саме вона зайняла більшу частину часу.

Сам корпус зроблений з дерев'яних дощок скріплених цвяхами та клеєм. Після збирання дошки були ретельно відшліфовані, розкриті морилкою та кількома шарами меблевого лаку.

Світлодіоди встановлені в решітку з перегородками, виготовлену з дерев'яних лінійок за допомогою лобзика. У кожну комірку зі світлодіодом для розсіювання світла вставлено шматочок звичайної кальки (яка використовується для креслень або викрійок).

До передньої частини годинника приклеєно двостороннє матове скло. Задню частину закриває кришка на шурупах, з якої стирчать кнопки налаштування часу.

Програмна частина

Програму вирішив писати на асемблері. Не тому що це найзручніша мова розробки, а виключно з освітньою метою. Вихідні коди можна знайти в архіві нижче.

Весь код не описуватиму, т.к. його досить докладно прокоментовано. Опишу лише ключові моменти.

Розгортка проводиться по стовпцях, тобто спочатку деякий час горять світлодіоди лише першого стовпця, потім другого і т.д. Відбувається це дуже швидко і око не встигає цього помітити, тому складається враження, що всі запалені світлодіоди горять одночасно. Для відображення значення часу в стовпці використовується макрос DISPLAY_COLUMN. Перемикання стовпців здійснюється за таймером Timer0.

Зміна часу відбувається раз на секунду після переривання переповнення таймера Timer/Counter2. Оскільки частота кварцу дорівнює 32768Гц, а таймера встановлений на 128, то переповнення однобайтового таймера буде відбуватися раз на секунду (32768 / (128 * 256) = 1) що дуже зручно.

Обробка натискань на кнопки відбувається у процедурах button_stop_pressedдля кнопки переведення годинника в режим налаштування і назад, button_set_pressedдля кнопки встановлення часу та button_switch_pressedдля кнопки перемикання шпальти. Зверніть увагу, що у процедурі button_stop_pressedпоточний час зберігається у EEPROM. Це зроблено для того, щоб час не скидався якщо потрібно, наприклад, переключити годинник в іншу розетку (при включенні годинника час зчитується з EEPROM).

Class="eliadunit">

Вся основна "робота", така як - опитування стан кнопок, перемикання активного стовпця розгортки та виведення часу відбувається у main. Початкова ініціалізація виконується у reset.

Напередодні дня народження друга постало питання про вибір подарунка. Друг – любитель різних незвичайних електронних пристроїв, виробів ручної роботи. Променад по магазинах результатів не приніс: гаджети неприємно дивували або банальністю, або дорожнечею. Вже зневірившись щось знайти, кинув погляд на віджет бінарного годинника Sony. І тут я спіймав себе на думці: «Ти ж електронник із стажем, і руки з того місця ростуть!» Зроби своїми руками бінарний годинник, буде найкращим подарунком! Саме так народилася ідея виготовити нижчеописаний девайс.

Бінарний годинник призначений для представлення часу в двійково-десятковому форматі, тобто годинник, хвилини та секунди розбивається по десяткових розрядах і представляється в двійковому вигляді (див. рис. нижче).

До наступної години на етапі створення одразу були пред'явлені такі вимоги:

  • порівняно невеликі габарити як плати, і пристрої загалом;
  • використання максимально доступних компонентів;
  • презентабельний зовнішній виглядкорпуси.

У результаті було створено таку схему:

Як МК використовується, можливо, дещо застарілий, але не менш популярний ATmega8A-AU. Як мікросхема годинника реального часу - доступна DS1307. Також паралельно лініям живлення поблизу МК і на вході живлення встановлено неполярний конденсатор 100 нФ і полярний (танталовий) на 47 мкФ. Усі резистори та конденсатори - у SMD-корпусах типорозміру 0805. З вивідних компонентів - лише світлодіоди, колодка для батарейки та кнопки налаштування. Кнопки – будь-які без фіксації; для корпусного варіанта підійдуть кнопки з довгими "пімпочками", наприклад такі:

Резистори R1..R6, R14..R18 можуть змінюватись у досить широких межах. Габарити світлодіодів значення не мають, проте корпус та плата розраховані на 5 мм круглі світлодіоди. "Reserved port" - висновок на платі, який передбачений на платі для потенційного розширення функціоналу годинника, наприклад, додавання динаміка.

Нижче наведено друковану плату пристрою:

Так як число різних зв'язків між світлодіодами та МК досить велике, а велике число"Висячих" перемичок робити не хотілося, пристрій реалізовано на двосторонній ПП. Товщина склотекстоліту – 1,5 мм, габаритні розміри плати – 80 х 50 мм. Плата з органами управління (п'ятьма кнопками) виконана окремо і буде подана нижче. На платі додатково знаходяться (не вказані у схемі): роз'єм для підключення живлення + програматора; додатковий отвор для підключення проводом живлення; резистор у ланцюзі скидання; п'ятачки для конденсаторів у ланцюгу годинникового кварцу (про них буде сказано нижче).

Плата виготовлена ​​на фрезерному верстаті із ЧПУ, що дозволило отримати практично заводську якість. Фото зібраної плати наведено нижче:

Так як прозорі світлодіоди мають надто високу яскравість, їх поверхню довелося обробити грубою тканиною типу "скотч-брайт" для надання матовості, що дозволило отримати більш тьмяне і розсіяне світло.

Плата з органами управління з'єднується основний за допомогою семипровідного шлейфу (2 – живлення, 5 – кнопки); розмір – 68 х 22 мм.

Після складання плати та прошивки МК залишилося виконати останній пункт – створити гарний корпус для пристрою. Зважаючи на наявність фрезерного верстата з ЧПУ, було прийнято рішення вирізати стінки зі склотекстоліту товщиною 1,5 мм і з'єднати їх між собою за допомогою паяння; передню панель – з алюмінію товщиною приблизно 1 мм. Загальна довжина корпусу – 104 мм, висота (з ніжками та кнопками) – 77 мм, товщина – 25 мм. Розмітка корпусу з усіма отворами знаходиться в одному файлі з платою. Бічні, верхня та нижня стінки з'єднані один з одним за допомогою латунних стійок під гвинт М3:

Звичайно, попередньо у стійок була видалена гвинтова частина. Різні стадії результату складання представлені нижче ( останнє фотобуло зроблено вже після остаточного складання, тому явно видно сліди фарби):

Плата з кнопками кріпиться до верхньої панелі на дві стійки (з одного боку такої стійки – гладка поверхня, з іншого – гвинт М3) за допомогою гайок, для цього на платі передбачені отвори. Висота стійок компенсує висоту кнопок, тому над корпусом останні височать незначно:

Лицьова сторона передньої панелі була оброблена дрібнозернистою наждачкою, потім пастою ГОІ. Зворотній бік, навпаки, оброблена грубою наждачкою для кріплення до бокових стінок через 5 мм. дерев'яні брускиза допомогою епоксидної смоли. У задній стінці передбачено micro-USB роз'єм для подачі живлення, а також отвір для потенційного динаміка; кришка кріпиться на вищезгадані латунні шестигранники за допомогою чотирьох гвинтів М3 х 15 мм.

Торцеві та задня стінкабула пофарбована автомобільною фарбою з балончика.

На нижній панелі передбачено отвори для кріплення ніжок, проте потім було вирішено використовувати гумові ніжки, закріплені на суперклей.

Зібраний корпус вийшов досить міцним, неодноразові випадкові падіння не порушили цілісність конструкції. Основна плата кріпиться до стін корпусу за рахунок олова та латунних стійок. Таке рішення було прийнято у зв'язку з тим, що батарейка та роз'єм для програмування стають доступними шляхом зняття задньої кришки; тобто, зняття плати немає сенсу.

Фото пристрою в роботі показано нижче:

Правильне зібране пристрій налагодження не потребує і починає працювати відразу. Налаштування часу здійснюється наступним чином:

  • приблизно на 2,5 секунди необхідно затиснути кнопку "0" SEC/SET (знаходиться над секундами). Після цього лічильник секунд скинеться в нуль, годинник зупинить хід;
  • потім за допомогою кнопок налаштування часу необхідно встановити потрібний час;
  • потім натиснути кнопку "0" SEC на 2,5; годинник відновить свій хід із оновленим часом.

Зібраний пристрій був успішно подарований другу і служить вже більше року, зауважень щодо роботи та несправностей виявлено не було.

На закінчення хочеться описати наступну проблему (для досвідчених радіоаматорів). Не завжди вартові кварці бувають належної якості. Може вийти так, що частота вашого кварцу відрізняється від заявленої на кілька герц. Результатом такого відхилення є погана точність ходу: так, відхилення від «еталонної» частоти на 2 герці призводить до відставання в 5,27 секунди на добу, або дві з половиною хвилини на місяць.
Частоту годинникового кварцу можна підлаштувати, шляхом встановлення послідовно або паралельно кварцу конденсатора ємністю кілька пікофарад. Таким чином, автору вдалося знизити різницю частот до 0,1 Гц, що призводить до значно меншої похибки – 7 секунд на місяць.

Запитання, критику, побажання та пропозиції із задоволенням вислухаю в коментарях.

P.S. Файли з прошивкою та вихідним кодом, конфігурація FUSE-біт і проект знаходяться в архіві.

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

Позначення Тип Номінал Кількість ПриміткаМагазинМій блокнот
U1 МК AVR 8-біт

ATmega8A-AU

1 TQFP-32 До блокноту
U2 Годинник реального часу (RTC)

DS1307

1 SO-8 До блокноту
Q1-Q6 Біполярний транзистор

BC817

6 До блокноту
D1-D20 LED 20 До блокноту
R1-R6, R11-R13 Резистор

4.7 ком

6 До блокноту
R7-R10 Резистор

150 Ом

4

І продовжуючи тему, публікуємо наступний матеріал. Цей годинник справжнього радіогіка ( radiogeek- радіофанат, англ.) і відображають час у двійковому коді, в момент, коли кнопка натиснута. Пристрій показує години і хвилини шляхом миготіння двох світлодіодів у послідовності і являють собою два 4-розрядні двійкові числа. Ось опис того, як читати двійкові числа.

Перше число становить годину, а друге - кількість хвилин. Наприклад, якщо годинник блимає 0010 - 0110, це відповідає 2 - 6, що означає годинник "2" і хвилин "6". Тобто 2:30. У пристрої немає індикація "am" або "pm", але, думаємо, всім зрозуміло - це 2:30 ночі або дня.Проект передбачає також, що ви маєте досвід роботи з поверхневого монтажу електронних компонентів, і, що вам знайомі навички паяння SMD деталей.

Схема годинника

Як визначити час

Було зроблено багато варіантів та екземплярів цього годинника - ви бачите їх на фотографіях. В архіві є версії 2.5 та 3.1, яка використовує для поверхневого монтажу контролер ATtiny та міні-USB порт для програмування. У контролері ATtiny 8 контактів. Цей чіп може бути запрограмований для виконання різних функцій. ATtiny має внутрішній годинник, і підключені світлодіоди запрограмовані на миготіння для відображення часу.

Електронні компоненти схеми

  • Atmel мікроконтролер ATtiny85
  • 2 SMD світлодіода поверхневого монтажу
  • 2 SMD резистора 50 Ом
  • Маленька кнопка SMD
  • CR2032 3-х вольтова батарея типу "Таблетка"
  • Мініутримувач для акумулятора

Пайка годинника

Для цього процесу була використана тостерна піч, для оплавлення припою на дрібних SMD компонентах, таких як світлодіоди та резистори, і потім використовується звичайний паяльник щоб припаяти більші компоненти, такі як гніздо, кнопка, і тримач батареї.

Отже, годинник зібраний, але ATtiny ще не знає, як керувати світлодіодами. Тому ми маємо запрограмувати його. Існує кілька варіантів, коли справа доходить до програмування ATtiny. Ви можете зробити швидкий макет схеми і використовувати спеціальні пристрої програмування ATtiny, або, якщо ви можете зробити відмінний програматор Arduino, так що в подальшому можете легко запрограмувати будь-які контролери.

Оскільки чіп дуже невеликий, то щоб запрограмувати його, довелося додати міні-USB порт, який підключається до потрібних контактів. На інший кінець вішаємо звичайний USB-кабель, тому все, що вам потрібно зробити, це підключити годинник до програматора. Ну а ремінець вибирайте самі – хоч шкіряний, хоч силіконовий. Корпус тут не потрібен взагалі - нехай всі бачать, що це годинник справжнього радіоманіяка!

Обговорити статтю ГОДИННИК РАДІОГІКА

Поділіться з друзями або збережіть для себе:

Завантаження...