Un ceas are utilitate atat timp cat functioneaza corect. Cineva spunea ca un ceas care sta are marele avantaj de a arata de doua ori pe zi ora exacta... Daca pentru un ceas electromecanic acest lucru este adevarat, pentru un ceas electronic fraza anterioara este falsa. De ce sa construim atat de dificil ( microcontroler, programator, compilator, cablaj, teste, etc ) un simplu ceas cand putem sa-l cumparam sub 1$ si va arata mult mai bine decat cel construit de noi? Pentru ca mecanismul de generare al orologiului de timp real ( Real Time Clock ) utilizand doar microcontrolerul, fara circuite integrate specializate care sa dialogheze cu el, este necesar in multe alte aplicatii ( termostate inteligente, automatizari orare/saptamanale/lunare, aparatura medicala, dataloggere ). Un bun exemplu este ansamblul ceas-termometru existent in principalele piete din marile orase care nu indica niciodata ora, data umiditatea sau temperatura reala...

Puteti sa construiti si voi un astfel de ceas, nu e nevoie sa fiti "specialisti" , chiar se recomanda sa fiti amatori, asa cum se poate vedea si in viata politica romaneasca... Un amator care se aventureaza sa-si realizeze ceasul prezentat aici va constata cu surprindere ca, reglat corespunzator ( prin software ) are o precizie mai buna de +/- 3...5S pe luna, ceea ce nu se poate obtine decat rareori cu un ceas de 1$. Ceasul din imaginea anterioara utilizeaza principiul multiplexarii. Principiul este asemanator obtinerii imaginii in salile de cinematograf si se bazeaza pe inertia ochiului ( si dupa cum vedeti si a aparatului fotografic digital de uz comun utilizat la fotografiere ) de a decela imagini care se succed cu o rata mai mare de 25 de cadre pe secunda ( 25 Hz ) . Notand digitii ( adica cele patru cifre care compun imaginea) de la stanga spre dreapta cu U1=1, U2=5, U3=1 si U4=0 ( ora afisata este 15:10 ) si segmentele ce compun imaginea conform standardizarii internationale pentru afisaje cu anod comun, multiplexarea inseamna:
 

1. U1 => B=0, C=0, A=1, D=1,  E=1,  F=1, G=1
2. totul este stins
3. U2=> A=0, F=0, G=0, C=0, D=0, B=1, E=1
4. totul este stins
5. U3=> B=0,  C=0, A=1, D=1, E=1,  F=1, G=1
6. totul este stins
7. U4=> A=0, B=0, C=0, D=0, E=0, F=0, G=1
8. totul este stins
9. goto 1.

Cu alte cuvinte, electrozii comuni sunt baleiati cu tensiunea de alimentare necesara ( in cazul nostru +5V, un timp de 3...5mS fiecare  ) iar informatia ce ilumineaza segmentele este stabila inaintea alimentarii anozilor si se modifica in timpul in care toate afisajele sunt stinse, la fiecare moment al schimbarii alimentarii digitilor U1=>U2=>U3=>U4 . Deoarece viteza de baleiere este sub limita perceputa de ochiul uman, imaginea apare ca si cum toti cei patru digiti afiseaza simultan, ceea ce este doar o iluzie. Un necunoscator va spune: "Ce smecherie beton !" Este doar o smecherie "asfalt" ( explicatie numai pentru noua generatie) , deoarece acest mod de afisare, desi este economic si necesita numai 11 pini din microcontroler (7segmente + 4anozi sau catozi) , poate fi utilizat numai in interiorul cladirii sau in locuri unde afisajul nu se afla in bataia directa a soarelui, avand o luminozitate scazuta datorita principiului de functionare. E, acu-i acu ! Sa vedem cum arata si schema electronica a cestui ceas:

"Pare cam stufoasa", va spune cel care n-a pus niciodata mana pe un letcon ( ciocan de lipit de maxim 30W incalzit electric cu rezistenta ). In esenta, o inspectie mai amanuntita va readuce suflul pe buzele novicelui. Daca stiti care este simbolul tranzistorului, care tranzistoare sunt PNP si care esteNPN atunci puteti concura cu succes la concursurile inteligente ale PRO-TeVe-ului... Daca nu, timpul nu e pierdut, la cerere organizez cursuri de electronica via internet/email, in conditiile tarifare de meditatii pentru admitere in invatamantul superior.
Partea cea mai simpatica a cestei scheme o reprezinta functia multiplexata a pinilor RB4,RB5,RB6 ai microcontrolerului. Acestia sunt atat iesiri digitale pentru segmentele E,F,G ale afisajelor, cat si intrari care citesc starea butoanelor SW1,SW2,SW3. Bineinteles ca nu pot fi intrari si iesiri simultan, ci in mod secvential, dupa cum programul scris de noi o dicteaza. Rezistentele R4 (3k9)  au rolul de a limita curentul prin segmentele E,F,H la o valoare care sa nu le aprinda chiar daca digitii au comanda anodica activa la momentul apasarii pe butoane, respectiv R5 ( 5k6 ) are rolul de a asigura nivelul logic 1 pe intrarile microcontrolerului cand butoanele nu sunt apasate. O dioda antiprost D1 protejeaza circuitul de mana neindemanatica care monteaza bateria pe dos ( si conform unuia din principiile lui Murphy, va fi protejata de arderea microcontrolerului...) Condensatorul antiparaziti, C3 se va monta in imediata apropriere a pinilor de alimentare ai microcontrolerului, daca acesta sta pe soclu, imediat sub "burta" lui, in spatiul liber dintre soclu si circuit. Asigurarea curentului necesar aprinderii corecte a tuturor segmentelor se face de catre tranzistoarele BC256. Deoarece rata de multiplexare este de 1:4 curentul calculat prin fiecare anod va trebui sa fie de 4x mai mare decat cel real, reglajul acestuia se face din rezistentele R2 care trebuiesc modificate identic pentru obtinerea unei alte luminozitati. Afisajele utilizate sunt de tipul Kingbright de 25.4 mm. Cucul acestui ceas este buzerul U6
( un mic difuzor electromagnetic cu membrana metalica de 47 ohmi). Se poate utiliza orice difuzor electromagnetic cu impedanta de 8...25 ohmi cu limitarea corespunzatoare a curentului printr-o rezistenta serie. Nu va asteptati sa auziti cantecul cucului ci un sunet asemanator cu cel al telefonului dar ceva mai simpatic. Cum se genereaza acesta, veti vedea in continuare:
 

procedure tick ( byte in ton ) is
  for 20 loop
   pin_b7 = high delay_200us ( ton )
   pin_b7 = low  delay_200us ( ton )
  end loop
end procedure

 if ! cucu_flag then
   for 5 loop tick ( 1 ) tick(2)
end loop
    cucu_flag = ! cucu_flag 
 end if

Ce parere aveti ? Este suficient de intuitiv ? Valoarea variabilei ton din procedura tick este transferata intarzierilor din bucla for...loop...end loop. Acest lucru echivaleaza cu generarea unei unde dreptunghiulare cu frecventa egala cu un  multiplu de 1/400uS * ton. Cantecul "cucului" va fi o repetare alternata a doua astfel de frecvente, dictata de un flag care devine zero logic cand exista coincidenta intre timpul real si timpul setat pentru alarmare si isi schimba starea imediat dupa ce "cucul" a cantat. Intregul cod sursa poate fi downloadat. Nu imi solicitati "bin-ul" sau fila hexazecimala. Nu il ofer decat contra cost programat intr-un microcontroler PIC16F62x ... Demonstrati-mi ca sunteti in stare sa-l compilati singuri !  Daca ati luat un 10 la vre-un proiect semestrial la disciplina "Electronica digitala" sau "Microcontrolere" cu acest cod, trimiteti-mi email-ul profesorului dvs. ca sa ne felicitam reciproc...