Часовник с 4-digit LED дисплей / TM1637 и DS1307, под управление на Arduino

    Преди няколко месеца, за да допълня поръчката си с нужни компоненти, бях си купил за бъдещо използване посочения 4 digit LED дисплей. Динамичното управление на 7 сегментните индикатори е организирано от ИС ТМ1637. На пръв поглед - безполезно устройство. Харесвам си повече за експерименти информативните LCD дисплеи с ниско потребление 16x1/16x2, но предвид цената, дежурният отговор е: "Вземам го, да има! Някой ден ще ми потрябва."

    Намерена е библиотека за управление с Arduino, устройството е тествано с експерименталния sketch и прибрано на съхранение за "други времена".

    Изминалата седмица ми "донесе" от братски Китай часовников модул с ИС DS1307 и 3V батерийка. Красиво изработена конструкция, почистена от флюс, добра антистатична и противоудара опаковка. Тестове не бяха правени, устройството беше прибрано като работещо на доверие. Мини-устройство от серията "Да има!" .

    Преди години аз лично (и като помагач) сме правили не един часовник, изпълнен къде с TTL интегрални схеми, къде с ИС от CMOS серия (tnx за емоциите, г-н Илиев!). Няма да забравя горчивия опит при работа с българската часовникова интегрална схема (генератор на 1 Hz ?) CM204.

    ИС СМ204 дефектираха от статично електричество. Не една, не няколко, а много! Облечен си с прекрасен, зимен пуловер, пипнеш чипа ... и пух-х-х, замине си чипа. Пипнеш с върха на човката на поялника да оправиш кривата и грозна спойка .. и пух-х-х, замине си чипа.
    Още си пазя интегрална схема като свиден спомен, с прилежно увити изводи ( ... пфу, 20 мин я търсих из "боклуците" за фото сесията, но я намерих! ).

    После се появиха специализираните интегрални схеми, с които часовник се изграждаше с една, две, три интегрални схеми, точността се поддържаше или от делене на честотата от мрежата, или от кварцов резонатор на 32 768 Hz. После се появиха китайските радио-часовници, работещи "на магия", но работещи! и всякакви конструкции на тема "Направи си сам часовник" бяха безсмислени.

    ***

    Та в петъчния скучен следобед (като последен ден от кратката ми отпуска) реших да запоявам, да направя някаква схема, да конструирам нещо. Реших да обединя тестовете на двете горни устройства в един. Така се роди идеята за  часовник с LED дисплей: за 10-15 мин "мъдруване" срещу компютърния монитор (и почесване по главата от време на време) устройството "някак си" зафункционира .

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

    Принципната схема е копие на компонентите и нахвърляните връзки от breadboard платката. Лично за мен схемата така ми е по-четима и разбираема, отколкото примерно нагледното опроводяване с други програми (Fritzing).

arduino_clock_4d_led_01.zip [ino,spl7,gif,txt,h,cpp][66kb]

    Програмният код няма да описвам. Той е на база двата примера към библиотеките. Последните съм добавил в текущата папка и пътят им е към нея. Не е необходимо да се инсталира нищо друго допълнително. Подредбата в този вид ми е по-прегледна, независимо, че понякога стават бъркотии с чужди кодове, упорито отказващи компилация.

    Ще обърна внимание в програмния код само на две подробности:

    1. Настройка на яркостта на светене на LED дисплея се избира от библиотеката за управление. Представлява число / или израз / и е подбрано в 33 ред. При моите условия LED дисплея комфортно свети на максимална яркост, макар че вечер светлината му леко заслепява.

    2. При първоначално стартиране е необходимо ( или по-късно: принудително ) сверяване на часовниковата интегрална схема с точни дата и време от компютъра. За целта отмаркирайте веднъж 30 ред, заредете програмата в Arduino (Nano) и след като дисплея сработи, маркирайте отново ред 30 като коментар и отново заредите програмата в Arduino.

    Така при последващо пускане на часовника  (вече без наличие на USB връзка към компютъра) часовниковата ИС не се нуждае от друго действие по сверяване, а 3V батерия поддържа хода на времето при липса на захранване (при загасен LED дисплей!). При нищожната консумация, цитирана в справочните данни, това се очаква да е дълъг период от време.

    Лично мен тези коментари в примерите докъде ги осмисля, ми костваха 15-20 мин "ровене" из програмния код на библиотеките. Часовникът не искаше и не искаше да поддържа времето след гасене на захранването и последвалото пускане. Все едно се задействаше "машина на времето" с час: часът на компилация и изпращане на програмата към Arduino .

    То и си пише, но на този "чуждоземски" (разбирай английски) език ... който лично аз много не владея ... Затова повторението му е майката на знанието!

    При изработване схемата на часовника на печатна платка (или при вграждане в кутия заедно с друга апаратура) е добре да предвидите развръзка на схемата по захранване с помощта (примерно) на единичен (или по-добре двоен) C-L-C филтър. При изпитания без такъв филтър, с подаденото захранващо напрежение 12 волта на входа на ИС 7805, с два блокиращи кондензатора вход 100nF / изход 100nF се чуваха звукови ефекти ( дефекти ) от сканирането на светодиодните сегменти в разположен на 30 см нискочестотен усилвателен блок с ИС A2030. Имаше ефект на шумово присъствие и по висока честота в любителските диапазони 14-21-28 MHz.


  *** Допълнение 1:

    Като добавка ми се искаше часовниковата схема да е независима от връзката към компютър. Следващият прост вариант на схемата е с добавени два бутона за сверяване: + часове и + минути.

    Отказах се от вариант на "зануляване" на индикатора с натискане на двата бутона - нешумоустойчиво се получи. Може би в бъдеще ще добавя други възможности. Хубавото на Arduino-проектите е, че остават отворени във времето за добавки и изменения до безкрайност.

arduino_clock_4d_led_03.zip [ino,spl7,gif,txt,h,cpp][69kb]

    Няколко дневните експерименти с конструкцията показаха, че китайският модул с поддържащата времето батерийка работи задоволително точно и не се нуждае от донастройка. Часовничето "цепеше секундата" .  Време е за прехвърляне всичко от breadboard на платка, изработка на собствено захранване и затваряне в кутийка.
 

    Пожелавам успехи в експериментирането!
 

    Използвани материали:

    1. GitHub.com: A fork of Jeelab's fantastic RTC library

    2. GitHub.com: Arduino library for TM1637 (LED Driver)

LZ2WSG, KN34PC
24 юни 2016 година, доп. 1 юли 2016 година