Ce este un ceas binar. Un ceas binar simplu pe un microcontroler

Dorind să asamblez un ceas binar, nu am găsit niciodată un design acceptabil finit pe net. Cele mai multe ceasuri aveau un dezavantaj serios - atunci când alimentarea a fost oprită, setările de timp s-au rătăcit. Din fericire, cu puțin timp înainte de asta, am început să învăț limbajul C și microcontrolerele AVR. Așadar, s-a decis să se consolideze cunoștințele dobândite cu experiență practică și, în același timp, să se reinventeze roata. Îmi plac și LED-urile verzi intermitente.



Sistem



RTC

Problema salvării setărilor curente este rezolvată perfect de ceasul în timp real (RTC). Alegerea mea a căzut pe cipul DS1307.

Potrivit producătorului, atunci când alimentarea este oprită, poate păstra ora și data timp de 10 ani, consumând energia unei singure baterii cu litiu CR2032. Adică, ceasul continuă să ticăie, păstrând în același timp o acuratețe acceptabilă. Timpul nu se rătăcește, pornind din nou ceasul, primim timp real pe cadran, nu ora la momentul opririi. Microcircuitul comunică cu microcontrolerul prin „magistrala pătrată” I 2 C, raportând timpul exactși luând noi valori.

Inima dispozitivului

Alegerea microcontrolerului Mega32a a fost dictată de următorii factori:
Suficiente porturi pentru a nu folosi indicația dinamică, ceea ce nu îmi place, în primul rând pentru că este enervant pentru ochi (intermitent cu frecventa inaltaîn orice caz nefiresc). Am cunoscut-o în timp ce jucam cu microcontrolere PIC în limbajul Proton PICBasic și, dacă este posibil să nu folosesc indicația dinamică, aș prefera să o fac.
Cost relativ scăzut de 130 de ruble (Mega16a, de exemplu, costă la fel), iar cu o reducere, este în general 104 de ruble.
Pachet QPF-44 clar, cu pinout convenabil


Portul "A" afișează secunde, portul "B" - minute și portul "C" - ore. Este foarte convenabil să puteți atribui valorile de timp primite de la DS1307 porturi fără nicio modificare. Butoanele sunt conectate la portul „D” (pinii 3 - 7), pinii 0 și 1 funcționează ca o linie de ceas (SCL) și, respectiv, o linie de date seriale (SDA). Cipul RTC este configurat astfel încât să emită impulsuri la o frecvență de 1 hertz pe al șaptelea picior. Acest picior este conectat la al treilea pin al portului „D”. Acest port în sine este configurat ca intrare și, pentru orice eventualitate, pull-up-urile interne sunt incluse în power plus, duplicate de rezistențe SMD la exterior. Astfel de acțiuni protejează pe deplin împotriva oricăror surprize.

LED-uri


Am ales LED-uri într-o carcasă mată cu luminozitate scăzută. La început, au fost testate diode luminoase într-o carcasă transparentă, dar chiar și la un curent de 3 mA au strălucit prea puternic și neuniform, ceea ce a provocat din nou disconfort. Cu o cădere de tensiune pe diodă de 2 volți, o tensiune de alimentare de 5 volți și un rezistor de 1 kΩ, valoarea curentului care curge prin diodă va fi (5 - 2) / 1000 = 3 mA. Această valoare a fost aleasă empiric, iar luminozitatea strălucirii este grozavă pentru o cameră slab luminată. Dacă intenționați să setați ceasul sub o linie dreaptă lumina soarelui, atunci valoarea rezistențelor ar trebui redusă, până la 200 ohmi, pentru o strălucire mai strălucitoare (mulțumesc capac).

Butoane

Pe o placă separată cu butoane este prevăzută o „siguranță” (ne va proteja de o lovitură accidentală în cap), sub forma unui alt buton Bt6. Ora poate fi editată ținând mai întâi pe ea.

Moale

Codul este scris în mediul CodeVisionAvr.
Programul începe cu faptul că configurăm perifericele microcontrolerului.
Configurarea porturilor (A, B, C - ieșire, D - intrare)
Pentru orice eventualitate, este prevăzută o pauză de 300 ms, astfel încât DS1307 să aibă timp să „șină la conștient”
Inițializarea „autobuzului pătrat”
Configuram cipul RTC astfel incat sa produca un impuls dreptunghiular in fiecare secunda pe pinul SQW / OUT
Verificați dacă butonul CLR este apăsat. Dacă da, atunci resetați toate valorile la 0
Activați întreruperile globale
Da, câteva cuvinte despre ei. Folosim întreruperi externe INT0 pe PD2 la cădere, adică. în fiecare secundă, programul va merge la manipulatorul de întreruperi, în care citim valorile de timp de la DS1307 și le afișăm pe indicatoarele LED.
Intrăm într-o buclă nesfârșită, unde sondam butoanele
Dacă butonul este apăsat, adăugați (scădeți) o oră (minut) și trimiteți o nouă valoare prin I2C
Pe parcurs, verificăm dacă noile valori ale timpului se încadrează în intervalele de 24 de ore și 60 de minute.

Placă de circuit imprimat

Placa este realizată conform tehnologiei Great Space Laser-Iron pe un textolit unilateral. La fabricarea plăcii superioare s-a folosit hârtie simplă (un experiment nereușit).


Există multe variante ale acestei tehnologii. După părerea mea, acesta este cel mai bun:
1. Tăiem o bucată de textolit de dimensiunea potrivită.
2. Jupuim vârfurile, scăpând de bavurile dăunătoare.
3. Ungeți viitoarea placă cu pudră de curățare sau pastă de dinți și frecați-o cu partea tare a buretelui pentru a străluci.
4. Ne înmoaie piesa pentru câteva zeci de secunde într-o soluție slabă de clorură ferică caldă, până când apare o suprafață uniformă, mată, maro-visiniu. Când este scos din soluție, lichidul trebuie să ude complet suprafața.
5. Clătiți kaku, uscați ușor, fără a atinge suprafața cu degetele sau orice altceva gras. Puneți imediat pe hârtie curată cu puf de cupru pentru a evita praful sau părul.
6. Imprimăm o poză în oglindă pe hârtie subțire (!) lucioasă, o puteți decupa dintr-o revistă, de exemplu. Nu atingem desenul cu mâinile. Tăiați cu grijă, așezați modelul în jos.
7. Aplicați pe bucata de textolit pregătită, călcați prin 1-2 straturi de hârtie curată, punând fierul de călcat la temperatura maximă. 10 secunde ar trebui să fie suficiente, pentru că dacă exagerați, pistele se vor aplatiza și se vor curge unele în altele. Tonerul trebuie să adere pe deplin la cupru.
8. Înmuiați sub jet de apă caldă, îl puteți lăsa în apă timp de 10 minute. Rupeți ușor, răzuiți hârtia. Ma ajuta cel vechi Periuta de dinti. Scoateți bucățile de hârtie rămase cu un ac. Tonerul rămâne pe textolit.
9. Încălzim o soluție puternică de clorură ferică într-o baie de apă, ne aruncăm tabla acolo și stropim câteva minute (conform regulii van't Hoff, cu o creștere a temperaturii cu 10 grade, viteza de reacție crește de 2 ori Cuprul dispare chiar în fața ochilor noștri.Puteți și nu încălzi, dar va dura mai mult să așteptați.
10. De îndată ce tot cuprul inutil a dispărut, opriți gazul, scoateți (de exemplu, cu penseta) placa, încercați să spălați aragazul și degetele de clorură ferică. Clătiți-l de pe tablă cu apă curentă.
11. Luați acetonă (dispozitiv de îndepărtare a lacului de unghii) și ștergeți tonerul. Puteți încerca să o răzuiți cu un șmirghel sau un burete.
12. Facem găuri.
13. Ludim. Eu folosesc LTI ca flux și vă sfătuiesc, totuși, după cositorire și lipire, acest flux trebuie spălat (cu aceeași acetonă, și de preferință cu un amestec de alcool-benzină 1:1), deoarece LTIshka are o anumită conductivitate.
Toate lucrările trebuie efectuate într-o zonă ventilată, în proces
se eliberează o mulțime de vapori nocivi.


Plăcile sunt interconectate prin conectori PBS și PLD. Primele sunt conectate la placa de sus folosind un fir de montare subțire, acesta poate fi ales, de exemplu, dintr-un cablu sau adaptor LPT vechi.


Cele doua sunt lipite pe placa de jos, iar pinii care duc la tastatură sunt îndoiți (vezi fotografia).

Sunt incluse PCB-uri în format SprintLayout5.0. Există câteva greșeli în fotografii, dar acestea au fost deja remediate în fișierele atașate.

firmware pentru microcontroler

Pentru acest caz, a fost asamblat un programator USBasp, care poate fi văzut în fotografia de mai sus. Un lucru destul de frumos, ușor de folosit și îl poți purta oricând cu tine în buzunar (sper că nimeni nu va face asta). Pentru firmware-ul mega32, va trebui să instalați jumperul „Slow SCK”.
Siguranțe:
Siguranță scăzută = 0xC4
Siguranță mare = 0xD9
Microcontrolerul nostru este tactat de la un oscilator RC intern cu o frecvență de 8 MHz. A trebuit să dezactivez interfața JTAG pe PortC, altfel unele LED-uri nu s-ar aprinde.
Placa are un conector ISP10 pentru intermitent rapid/depanare.

panoul frontal

Fabricat din placă de aluminiu, 40 mm lățime și 1,5 mm grosime. Are 18 găuri găurite cu diametrul de 5 mm, și 4 găuri cu diametrul de 3 mm pentru atașarea rafturilor.


Mai întâi, șablonul a fost imprimat și lipit pe farfurie. În continuare, au fost forate găuri pilot cu un burghiu de 1,5 mm, după care găurile principale au fost găurite cu burghie cu diametrele necesare.


La final, placa a fost îndoită, șlefuită cu șmirghel fin și lustruită cu pastă GOI.
Șablonul este atașat fișierelor atașate ca aspect de fișier5.0

LED roșu în colțul din stânga sus

Repeta impulsurile generate de DS1307 pe al 7-lea picior, i.e. clipește în fiecare secundă. Un tranzistor MOSFET mic canal p operează într-un mod cheie, deschizându-se și închizându-se în timp cu impulsurile. La început am vrut să fac o lumină de fundal (cum ar fi Ambilight), pentru care s-a făcut un invertor CMOS pe o pereche complementară de tranzistori (ca să fiu sigur). Dar nu mi-a plăcut. Pentru un LED, un tranzistor este suficient, puteți folosi chiar și tipul pnp bc857. Am folosit irlml6402 sau irlml6302 mosfet neambalat.

Fișiere

Sursele, fișierul hex, plăcile de circuite imprimate, schemele, schemele Proteus și siguranțe sunt incluse în această imagine ca arhivă. Nu am încredere în stocarea fișierelor, nu am încă propriul meu server, prin urmare, în opinia mea amator, Habr va fi cel mai de încredere loc pentru stocare. Utilizatorii Windows pot ajunge la fișiere deschizând imaginea salvată cu WinRar.
Da, asta e poza.

Video

Concluzie

Puteți utiliza orice sursă de alimentare capabilă să furnizeze 5 volți la un curent de 70 mA. Un port USB este bine pentru asta. Principalul lucru este că puterea este „curată” și nu depășește 5 volți. Alimentarea ceasului de la un convertor DC-DC de la cipul mc34063 cu un nivel de zgomot de ~ 50 mV, am observat erori la setarea orei. Acum dispozitivul este alimentat de un comutator agățat în apropiere. Scoate exact 5 volți. Pe o notă bună, mai trebuie să faceți o diodă sigură și un fel de stabilizator liniar pentru 3,3 - 5 volți.
Lipsa funcțiilor de alarmă și afișare a datei din ceas este destul de justificată: ambele sunt prezente în telefon, ceea ce înseamnă că nimeni nu le va folosi cel mai probabil într-un ceas binar (mulțumesc unchiului Occam pentru această concluzie).

Ideea de a folosi un sistem binar pentru a reprezenta timpul a apărut odată cu apariția computerelor electronice. Copiile individuale ale ceasurilor binare de casă au fost adesea create de pasionații de electronică. Cu toate acestea, ceasurile binare au fost rareori folosite din cauza lipsei producției din fabrică și a greutății mari.

În 2008, compania britanică Anelace a lansat pentru prima dată un ceas de mână binar cu ecran LED. Acest eveniment a găsit un răspuns furtunos în rândul tinerilor. Astăzi, ceasurile binare sunt produse nu numai de producătorii de echipamente informatice, ci și de fabricile de bijuterii.

Cum să alegi

Există modele de ceasuri binare cu un număr diferit de „cadrane”. La unele, puteți înlocui lumina de fundal a diodei. Ceasurile binare pot fi împărțite în două mari categorii: bandă iluminată și indicatorul cheie aprins. În primul, trebuie să însumați puterile lui doi, în al doilea, trebuie să convertiți un număr binar în zecimal. Prima metodă este de preferată pentru persoanele care doresc să atragă atenția, a doua - pentru programatori și pentru persoanele care doresc să cunoască ora cât mai curând posibil. Pentru ușurință în utilizare, puteți cumpăra ceasuri binare cu diode semnate (1, 2, 4, 8 etc.).

De unde as putea cumpara

Există multe aplicații profitabile pentru cumpărarea de ceasuri binare în magazinele online. Pe serviciile comerciale specializate, puteți ridica modele exclusive de la materiale diferite. eBay este cea mai aglomerată piață de comerț electronic din lume. Pe site-ul eBay, în secțiunea „Accesorii”, există mii de opțiuni pentru ceasurile binare. Pentru a le plăti, veți avea nevoie de monedă electronică PayPal.

Cum se utilizează

Pentru a utiliza un ceas binar în viața de zi cu zi, trebuie să traduceți rapid numerele și să le adăugați unele la altele. Citiți instrucțiunile pentru ceasul dvs., specificați ce rând de diode este responsabil pentru ceas, care pentru minut. Dacă nu există instrucțiuni, încercați să determinați acest lucru experimental - scala minutelor se va schimba mai repede decât ora. Timpul total este alcătuită din scalele orelor și minutelor. Să presupunem că prima și a cincea diodă sunt aprinse pe scara oră, iar a treia și a patra diodă sunt pe scara minutelor. Aceasta înseamnă că scara orară afișează 2 la puterea zero și 2 la a patra, adică 1 + 16 = 17 ore. Suma minutelor: 2 pătrate plus 2 cuburi: 12 minute. Astfel, ceasul binar arată 17:12.

Beneficiile ceasurilor binare

Ceasurile binare au un efect pozitiv asupra abilităților matematice - deoarece de fiecare dată când trebuie să cunoașteți ora, va trebui să efectuați operații aritmetice simple. De asemenea, contribuie la dezvoltarea abilităților de programare - la urma urmei, sarcina de a codifica numerele binare se aplică pe deplin.

Ei atrag atenția, mulți oameni vă vor admira „abilitățile aritmetice”. În plus, ceasul binar reprezintă designul, poartă „stilul viitorului” tehnologic. Ceasul binar de perete (de birou) poate deveni parte a interiorului dumneavoastră.

Acest ceas de buzunar neobișnuit poate fi un cadou original. Indicatorul de timp din ele este construit pe doar șase LED-uri individuale. Secretul este că numărul de ore și numărul de minute ale orei curente sunt afișate de către aceștia sub formă de numere binare și numai atunci când butoanele corespunzătoare sunt apăsate, restul microcontrolerului ceasului „dormite” și indicatorul este oprit. , care reduce drastic curentul consumat de la bateria cu litiu.

Pentru a înțelege ce este sistemul de numere binar, să rulăm computerul disponibil în sistem de operare program Windows"Calculator". Pentru că în diverse versiuni sisteme, aceste programe diferă, aici îl vom lua în considerare pe cel care este inclus cu Windows XP. După rularea programului, găsiți în fereastra acestuia și faceți clic pe butonul de pe ecran „Vizualizare”, apoi selectați „Inginerie” din lista derulantă . După aceea, multe alte funcții vor fi adăugate la fostele funcții simple ale calculatorului, permițându-vă să efectuați calcule complexe. Un comutator al sistemului numeric va apărea în stânga sub indicator: „Hex” (hexazecimal), „Dec” (zecimal), „Oct” (octal) și „Bin” (binar). Imediat după pornirea programului, acesta se află în poziția „Dec”. Aceasta înseamnă că toate datele inițiale pentru calcule și rezultatele acestora vor fi prezentate în sistemul numeric zecimal care ne este familiar.

De exemplu, formați numărul 58 apăsând butoanele numerice corespunzătoare. Dacă acum mutăm comutatorul în poziția „Coș” făcând clic pe inscripția corespunzătoare, atunci în fereastra de rezultat numerele 58 se vor schimba în 111010. Acesta este același număr reprezentat în sistemul numeric binar. Pentru a verifica acest lucru, puteți utiliza tabelul care explică principiul formării numerelor binare și zecimale. Cifrele binare, spre deosebire de cele zecimale, pot lua doar două valori - 0 și 1. Greutățile cifrelor binare cresc de la dreapta la stânga de două ori și nu de 10 ori, ca în sistemul zecimal.

Sistemul binar este utilizat pe scară largă în dispozitivele digitale, deoarece vă permite să vă descurcați simplu elemente logice, distingând doar două valori - 0 și 1. Astăzi, multe companii produc astfel de ceasuri. Pentru a verifica acest lucru, este suficient să căutați pe Internet expresia „Ceas binar”.

Dar pentru un radioamator, este mult mai interesant să nu cumpere, ci să faci un ceas binar cu propriile mâini. În designul propus, există doar trei butoane de control: pornirea indicației orei curente, minutelor și corectarea orei - setarea exactă a momentului începerii orei. Ceasul este protejat de defecțiuni cauzate de apăsarea accidentală a butonului de corecție. Ele sunt construite pe elemente cunoscute și utilizate frecvent de radioamatorii.

Schema ceasului este prezentată în fig. 1. Numărătoarea inversă conduce și o afișează pe microcontrolerul cu LED-uri DD1. Frecvența sa de ceas de 32768 Hz este stabilizată de un rezonator de cuarț ZQ1 „ceas” de frecvență joasă. Dispozitivul este alimentat de o celulă de litiu G1 cu o tensiune de 3 V. După cum știți, astfel de celule se caracterizează prin autodescărcare minimă și capacitatea de a funcționa la temperaturi scăzute. Condensatorul C1 suprimă impulsurile de înaltă frecvență. Datorită frecvenței scăzute a ceasului, microcontrolerul consumă un curent mic, ceea ce face posibilă funcționarea ceasului timp îndelungat fără a schimba bateria.

LED-urile HL1-HL7 sunt conectate la ieșirile microcontrolerului RA0-RA4, RB5, RB6 prin rezistențele de limitare R1-R7. Șase dintre ele (HL2 - HL7) arată ora, pot afișa numere de la 0 (toate oprite) la 63 (toate activate). Acest lucru vă permite să afișați pe rând numărul de ore de la 0 la 23 și de la minute de la 0 la 59. Greutățile cifrelor binare cărora le corespund sunt indicate lângă LED-uri.

Porniți indicarea orelor sau, respectiv, minutelor cu butoanele SB1 și SB2, conectate la intrările RB0 și RB1 ale microcontrolerului. Deoarece indicația se aprinde doar pentru câteva secunde, timp în care butonul este apăsat, energia bateriei este consumată cu moderație, servește perioadă lungă de timp. Butonul SB3 conectat la intrarea RB7 a microcontrolerului este folosit pentru a corecta ora. Acest lucru ar trebui făcut numai la începutul următoarei ore, deoarece contoarele minutelor și secundelor sunt resetate în timpul procesului de reglare.

LED-ul HL1 când butonul SB1 sau SB2 este apăsat clipește în fiecare secundă. Acesta servește ca un indicator al activității dispozitivului și vă permite să verificați dacă funcționează la zero ore sau minute. Dacă nu ar fi acolo, ar exista situatie neplacuta când, la apăsarea butonului, niciunul dintre LED-uri nu dă „semne de viață”.

Pinul 4 al microcontrolerului, care servește de obicei ca intrare pentru resetarea MCLR, în acest caz este configurat ca o intrare digitală obișnuită RA5. Setarea inițială la pornire se face intern de către microcontroler. Pentru a elimina interferențele aleatorii, intrarea RA5 este conectată la un fir comun. Liniile rămase ale portului A sunt configurate de software ca ieșiri.

Acesta configurează liniile RB0, RB1, RB7 ale portului B ca intrări și conectează rezistențe interne la acestea, menținând un nivel logic ridicat la aceste intrări (când butoanele sunt eliberate). Liniile rămase ale portului B sunt configurate ca ieșiri. La sfârșitul procedurii de inițializare, programul aprinde fiecare LED pe rând pentru o secundă. Acest lucru vă permite să evaluați corectitudinea instalării și să vă asigurați că programul funcționează.

Timpul de numărare în microcontrolerul DD1 este temporizatorul încorporat T1. Programul îl configurează astfel încât să genereze o cerere de întrerupere în fiecare secundă. Rutina de gestionare a întreruperii generează memorie cu acces aleator microcontroler valoarea timpului curent - secunde, minute și ore.

Managerul de întreruperi la fiecare apel verifică și nivelurile logice la intrările RB0, RB1 și RB7, în funcție de starea butoanelor SB1-SB3. La niveluri scăzute la intrările RB0 sau RB1, se aprinde indicarea orelor sau, respectiv, minutelor. Cu un nivel scăzut la intrarea RB7, indicând că butonul SB3 este apăsat, și în același timp un nivel scăzut la una dintre intrările RB0 sau ​​RB1, timpul este reglat. Acest lucru se face pentru a reduce probabilitatea unei defecțiuni a ceasului ca urmare a apăsării accidentale a butonului SB3.

Programul de microcontroler este mic și necomplicat. Fără modificări, poate funcționa atât în ​​microcontrolerele PIC16F628A, cât și în PIC16F628. Textul sursă al programului, atașat articolului, este prevăzut cu comentarii detaliate care vă permit să înțelegeți algoritmul de lucru și chiar să îmbunătățiți programul. De exemplu, introduceți indicația secundelor sau modul cronometru. Pentru a face acest lucru, nu este nevoie să schimbați circuitul ceasului, deoarece puteți organiza includerea acestor funcții apăsând simultan butoanele SB1 și SB2.

Reglarea orei se face folosind butonul SB3. Când este executat, valorile minutelor și secundelor sunt resetate la zero. Dacă minutele au fost mai mici de 30, numărul de ore nu se modifică, altfel crește cu una. Dacă butonul SB3 este apăsat, atunci în fiecare secundă se va adăuga o unitate la numărul de ore. Acest lucru poate fi necesar la setarea inițială a orei curente după pornirea alimentării, precum și la trecerea de la ora de vară la cea de iarnă și invers.

Pentru a indica secundele în program, trebuie să găsiți locul în care este procesată starea butoanelor și să adăugați o ieșire acolo pentru a indica valoarea stocată în registrul contorului de secunde. Pentru a intra în modul cronometru, va trebui să utilizați un registru suplimentar. Cu două butoane apăsate, conținutul acestuia ar trebui mărit cu unul la fiecare secundă și afișat. Textul modificat al programului trebuie tradus în mediul MPLAB, iar fișierul HEX rezultat ar trebui să fie încărcat în memoria microcontrolerului.

Ceasul este asamblat pe un fragment de panou, așa cum se arată în Fig. 2. Rezistoare (montare la suprafață) montate reversul taxe. LED-urile FYL-3014SRC pot fi înlocuite cu altele. Pentru a verifica caracterul adecvat al LED-ului, conectați-l la o sursă de tensiune de 3 V printr-un rezistor de 390 ohmi și evaluați luminozitatea strălucirii.

Condensatoare, rezistențe, butoane - orice de dimensiuni mici. Este de dorit ca butonul SB3 să fie cu un împingător scurtat. Capătul acestuia nu trebuie să se ridice deasupra suprafeței carcasei ceasului și chiar să fie îngropat, astfel încât să poată fi apăsat doar cu un obiect ascuțit. O astfel de soluție constructivă servește ca o protecție suplimentară împotriva apăsării accidentale a butonului.