Ceas pe un microcontroler AVR cu DS1307. Cum se utilizează ceasurile binare

Scor 1 Scor 2 Scor 3 Scor 4 Scor 5

Idee

Totul a început cu dorința de a face un dispozitiv complet terminat pe microcontrolerul AVR. Alegerea a căzut pe ceasuri binare, pentru că Sunt ușor de făcut și arată destul de impresionant. Și, de asemenea, pentru că întotdeauna mi-a plăcut plasmoidul de ceas binar de la KDE, care arată astfel:

Ce este un ceas binar?

Pentru cei care nu știu ce este un ceas binar și cum să determine timpul din el, voi face o mică digresiune. Un ceas binar este pur și simplu un ceas care arată timpul în sistemul numeric binar (sau binar), în loc de sistemul numeric zecimal cu care suntem obișnuiți.

Ceasurile binare sunt diferite (ca în general ceas obișnuit) - Cu cantități diferiteși locația indicatorilor, cu sau fără secunde, cu format de timp de 24 sau 12 ore etc. Am decis să merg cu opțiunea care este cât mai asemănătoare cu plasmoidul menționat mai sus de la KDE:

Ceasul este format din șase coloane verticale - două coloane pentru ore, două pentru minute și două pentru secunde (de la stânga la dreapta). Fiecare coloană reprezintă în esență o cifră (adică două cifre pentru ore, minute și secunde).

Ceasul are patru linii orizontale, deoarece trebuie să putem arăta numerele de la zero la nouă (cel puțin pentru cifra cea mai puțin semnificativă), iar reprezentarea binară a nouă - 1001, conține patru cifre (biți). Cea mai puțin semnificativă cifră este în partea de jos.

Cel mai simplu mod de a înțelege ce oră arată ceasul este prin analiza „cadranului” de la stânga la dreapta, de jos în sus. Să notăm valoarea numărului binar reprezentat de coloana cea mai din stânga a ceasului din imaginea de mai sus (presupunând că un indicator aprins înseamnă unu, iar unul stins înseamnă zero): 0010 în sistemul numeric binar este 2 în zecimală sistem de numere. Într-un mod similar, scriem valoarea celei de-a doua coloane: 0001 în sistemul numeric binar (ca și în sistemul numeric zecimal), sau pur și simplu unul. Adică ceasul spune ora 21. În același mod, puteți citi că ceasul arată 35 de minute și 28 de secunde. Cu puțină practică, vei putea citi ora dintr-un ceas binar aproape la fel de repede ca dintr-un ceas obișnuit.

Implementarea

Deci, ideea este clară, să trecem la implementare.

Să începem cu indicatorul („dial”) - care este o rețea de LED-uri.
Deoarece ceasul are 4 rânduri orizontale și 6 verticale, numărul total de LED-uri necesare este de 6 * 4 = 24. De fapt, te poți descurca cu mai puține LED-uri, deoarece nu vor fi folosite toate cifrele - de exemplu, cea mai semnificativă cifră a ceasului (coloana din stânga) poate afișa un număr de cel mult două (cu un format de timp de douăzeci de ore), ceea ce înseamnă că puteți salva până la două LED-uri. Dar nu am făcut asta și am instalat toate cele 24 de LED-uri, pentru că... doreau (în viitor) să folosească acest ceas pentru a afișa mesaje text simple.

Veți avea nevoie de butoane pentru a seta ora. Există trei dintre ele: primul buton comută ceasul în modul de setare a orei și înapoi. Al doilea buton, selectarea cifrelor, comută coloana în care ora este în prezent ajustată. Și, în sfârșit, al treilea mărește timpul din coloana selectată cu unul.

ATMega32 este folosit ca microcontroler. Desigur, nu este necesar să folosesc un microcontroler atât de puternic pentru o sarcină atât de simplă, dar aveam deja unul la îndemână, așa că l-am folosit.

Schemă și PCB

Circuitul este destul de standard: microcontroler, alimentare, resetare, conector pentru conectarea unui programator. Un ceas cuarț este conectat la TOSC1 și TOSC2 de la care ceasul va bifa. Butoanele de setare a orei sunt conectate la tensiunea de alimentare. Zece ieșiri LED (6 coloane + 4 rânduri). Un rezistor este conectat la fiecare rând orizontal pentru a limita curentul prin LED.

Placa de circuit imprimat s-a dovedit a fi unilaterală, dar totuși cu două jumperi pe cealaltă parte (marcate cu roșu), care sunt destul de simplu de realizat din sârmă subțire de cupru.

Cadru

Aceasta este probabil partea cea mai neinteresantă. Dar, în același timp, ea a fost cea care a ocupat majoritatea timpului.

Corpul în sine este realizat din scânduri de lemn prinse cu cuie și lipici. După asamblare, scândurile au fost șlefuite cu grijă, acoperite cu pată și mai multe straturi de lac pentru mobilă.

LED-urile sunt instalate într-o grilă cu pereți despărțitori, realizate din rigle de lemn cu ajutorul unui ferăstrău. O bucată de hârtie de calc obișnuită (care este folosită pentru desene sau modele) este introdusă în fiecare celulă cu un LED pentru a difuza lumina.

Un cu două fețe sticlă mată. Partea din spate este acoperită cu un capac montat cu șuruburi, din care ies butoanele de setare a timpului.

Partea software

Am decis să scriu programul în assembler. Nu pentru că este cel mai convenabil limbaj de dezvoltare, ci doar în scopuri educaționale. Codurile sursă pot fi găsite în arhiva de mai jos.

Nu voi descrie întregul cod, pentru că... este comentat suficient de detaliat. Voi descrie doar punctele cheie.

Scanarea se face pe coloane, adica mai intai se aprind o vreme LED-urile doar de la prima coloana, apoi a doua etc. Acest lucru se întâmplă foarte repede și ochiul nu are timp să-l observe, așa că se pare că toate LED-urile aprinse sunt aprinse în același timp. Pentru a afișa valoarea timpului într-o coloană, utilizați o macrocomandă DISPLAY_COLUMN. Coloanele sunt comutate utilizând temporizatorul Timer0.

Schimbarea orei are loc o dată pe secundă când Timer/Counter2 este întrerupt. Deoarece frecvența cristalului este de 32768 Hz și prescalerul cronometrului este setat la 128, temporizatorul de un octet se va depăși o dată pe secundă (32768 / (128 * 256) = 1) , ceea ce este foarte convenabil.

Clicurile pe butoane sunt procesate în proceduri butonul_stop_apăsat pentru butonul pentru comutarea ceasului în modul de setare și înapoi, buton_set_apăsat pentru butonul de setare a orei și buton_comutator_apasat pentru butonul de comutare a coloanei. Vă rugăm să rețineți că în procedură butonul_stop_apăsat ora curentă este stocată în EEPROM. Acest lucru se face astfel încât ora să nu fie resetată dacă este necesar, de exemplu, să comutați ceasul pe o altă priză (când ceasul este pornit, ora este citită din EEPROM).

Class="eliadunit">

Toate „lucrarea” principală, cum ar fi interogarea stării butoanelor, comutarea coloanei de scanare activă și afișarea orei, au loc în principal. Inițializarea inițială se face în resetare.

Rezultat

Rezultatul poate fi văzut în videoclipul de mai jos. Unele etape ale procesului de fabricație sunt, de asemenea, surprinse acolo.

După ce am vrut să asamblez un ceas binar, nu am găsit niciodată un design acceptabil gata făcut pe Internet. Majoritatea ceasurilor aveau un dezavantaj serios - atunci când alimentarea a fost oprită, setările de timp s-au pierdut. Din fericire, cu puțin timp înainte de asta, am început să stăpânesc limbajul C și microcontrolerele AVR. Așadar, s-a decis să se consolideze cunoștințele acumulate experiență practică, și în același timp reinventează roata. De asemenea, îmi plac foarte mult 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, dacă alimentarea este oprită, se poate economisi ora și data timp de 10 ani, consumând energia doar a unei baterii cu litiu CR2032. Adică, ceasul continuă să ticăie, menținând o precizie acceptabilă. Ora nu se rătăcește, pornind din nou ceasul, primim în timp real pe cadran, și nu ora în momentul închiderii. Microcircuitul comunică cu microcontrolerul prin intermediul „magistralei pătrate” I 2 C, raportând ora exactă și acceptând noile sale valori.

Inima dispozitivului

Alegerea microcontrolerului Mega32a a fost dictată de următorii factori:
Sunt suficiente porturi pentru a evita utilizarea afișajului dinamic, ceea ce nu-mi place, în primul rând pentru că irită ochii (oricum clipitul la o frecvență înaltă este nenatural). M-am familiarizat cu el în timp ce jucam cu microcontrolere PIC în limbajul Proton PICBasic și, dacă este posibil să nu folosesc un afișaj 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ă secundele, portul „B” afișează minutele, iar portul „C” afișează orele. Este foarte convenabil să puteți atribui valori de timp preluate 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ă producă 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, sunt incluse pull-up-uri interne la sursa de alimentare plus, duplicate cu 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ă. În primul rând, au fost testate diode luminoase într-o carcasă transparentă, dar chiar și cu 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 kOhm, valoarea curentului care curge prin diodă va fi egală cu (5 – 2)/1000 = 3 mA. Această valoare a fost selectată empiric, iar luminozitatea strălucirii este perfectă pentru o cameră slabă. Dacă intenționați să setați ceasul direct lumina soarelui, atunci valoarea rezistorului 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, există o „siguranță” (ne va proteja de o lovitură accidentală în cap), sub forma unui alt buton Bt6. Ora poate fi editată ținând-o mai întâi apăsată.

Software

Codul este scris în mediul CodeVisionAvr.
Programul începe cu noi setarea perifericelor microcontrolerului.
Configurați porturile (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ă „își revină în fire”
Inițializarea „autobuzului pătrat”
Configuram cipul RTC astfel incat sa produca impulsuri dreptunghiulare in fiecare secunda pe pinul SQW/OUT
Verificăm 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 pe marginea de 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 noua valoare prin I2C
În același timp, verificăm dacă noile valori ale timpului se încadrează în intervalele de 24 de ore și 60 de minute.

PCB

Placa este realizată folosind tehnologia Great Cosmic Laser-Ironing pe un textolit unilateral. La realizarea plăcii superioare s-a folosit hârtie simplă (experiment nereușit).


Există multe variante ale acestei tehnologii. După părerea mea, acesta este cel mai bun:
1. Tăiați o bucată de PCB la dimensiunea necesară.
2. Slefuim capetele, scapandu-se de bavurile daunatoare.
3. Ungeți viitoarea placă cu pudră de curățare sau pastă de dinți și frecați-o cu partea tare a buretelui până când strălucește.
4. Înmuiați piesa noastră 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. Spălați excrementele, uscați-le cu grijă, fără a atinge suprafața cu degetele sau orice altceva gras. Puneți-l imediat pe hârtie curată cu partea de cupru în jos pentru a evita praful sau părul.
6. Imprimați desenul în oglindă pe hârtie lucioasă subțire(!), îl puteți tăia dintr-o revistă, de exemplu. Nu atingem desenul cu mâinile. Decupați cu grijă și plasați modelul în jos.
7. Aplicați-l pe bucata de textolit pregătită, călcați-l prin 1-2 straturi de hârtie curată, punând fierul de călcat pe temperatura maxima. 10 secunde ar trebui să fie suficiente, pentru că dacă exagerați, șenile se vor aplatiza și curge una peste alta. Tonerul trebuie să adere complet la cupru.
8. Înmuiați sub jet de apă apă caldă, poate fi lăsat în apă timp de 10 minute. Rupeți cu grijă și răzuiți hârtia. O periuță de dinți veche mă ajută cu asta. Scoateți bucățile de hârtie rămase cu un ac. Tonerul rămâne pe PCB.
9. Încălziți o soluție puternică de clorură ferică într-o baie de apă, aruncați placa noastră în ea și stropiți câteva minute (după regula lui 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. Nu puteți încălzi, dar va trebui să așteptați mai mult.
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 placa și degetele de clorură ferică. O spalam de pe tabla cu apa curenta.
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 șmirghel sau cu un burete.
12. Găuriți găuri.
13. Hai să trișăm. Eu folosesc LTI ca flux și vă sfătuiesc, totuși, după cositorizare și lipire, acest flux trebuie spălat (cu aceeași acetonă, sau mai bine cu un amestec 1:1 de alcool și benzină), deoarece LTIshka are o anumită conductivitate.
Toate lucrările trebuie efectuate într-o zonă ventilată, în timpul
se eliberează o mulțime de vapori nocivi.


Plăcile sunt conectate între ele folosind conectori PBS și PLD. Primele sunt conectate la placa de sus folosind un fir de montare subțire, acesta poate fi scos, 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 plăci de circuite imprimate în format SprintLayout5.0. Există câteva greșeli în fotografii, dar acestea au fost deja corectate în fișierele atașate.

Firmware-ul microcontrolerului

În acest scop, a fost asamblat un programator USBasp, care poate fi văzut în fotografia de mai sus. Este un lucru destul de frumos, ușor de folosit și îl poți purta cu tine în buzunar tot timpul anului (sper că nimeni nu va face asta). Pentru a flashi 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.


În cele din urmă, placa a fost îndoită, șlefuită cu șmirghel fin și lustruită cu pastă GOI.
Șablonul este inclus cu fișierele atașate ca fișier layout5.0

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

Repetă impulsurile generate de DS1307 pe al 7-lea picior, adică clipește în fiecare secundă. Un tranzistor MOSFET mic canal p funcționează în modul de comutare, deschizându-se și închidendu-se în timp cu impulsuri. La început am vrut să fac o lumină de fundal (cum ar fi Ambilight), pentru care am construit 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 mosfet open-frame irlml6402 sau irlml6302.

Fișiere

Sursele, fișierul hex, plăcile de circuite imprimate, circuitele, circuitele în proteus și siguranțe sunt incluse în această imagine sub forma unei arhive. Nu am încredere în stocarea fișierelor, nu am încă propriul meu server, așa că, în opinia mea amator, cel mai de încredere loc pentru stocare ar fi Habr. Utilizatorii Windows pot accesa fișierele prin deschiderea unei imagini salvate folosind 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 destul de potrivit 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. Iese strict 5 volți. Pe partea bună, trebuie, de asemenea, să faceți o protecție sigură sub formă de diodă și un fel de stabilizator liniar pentru 3,3 - 5 volți.
Absența ceasului cu alarmă și a funcțiilor de afișare a datei în ceas este destul de justificată: ambele sunt prezente în telefon, ceea ce înseamnă că, cu un grad mare de probabilitate, nimeni nu le va folosi într-un ceas binar (mulțumesc unchiului Occam pentru această concluzie) .

Și diverse componente radio pentru a se familiariza cu microcontrolere, autorul a decis să facă ceva interesant și în același timp util. Avand in stoc număr mare LED-uri, a venit ideea de a crea un ceas binar.

Din partea electronică, ceasurile binare nu sunt deosebit de complexe, dar autorul a complicat sarcina și a decis să nu salveze butoanele și LED-urile. Inițial, proiectul trebuia să folosească 22 de LED-uri, 6 butoane și un buzzer. A existat și o idee de a asambla un ceas pe Arduino Mega pentru că mai multa cantitate pini, dar registrele de deplasare 74HC595 s-au dovedit a fi o salvare.

Materiale:
- Arduino Uno
- 2 plăci de dezvoltare full-size
- LED-uri roșii 7 buc
- LED-uri verzi 7 buc
- LED-uri albastre 6 buc
- LED-uri galben si alb 2 buc.
- Rezistoare 220 ohm 25 buc
- Tweeter piezo 1 bucată
- Butoane Tact 6 buc
- Registre de deplasare de ieșire 74HC595 în pachet DIP-16 3 buc
- Fire de conectare 90 buc
- Modul de ceas în timp real bazat pe cip DS1307 RTC

Cum va funcționa totul.
Există aproximativ 10 tipuri de ceasuri binare. Unele arată ora în format zecimal codificat binar (BCD), altele în numere binare. Deoarece autorului nu-i plac în mod deosebit ceasurile BCD, a decis să-și creeze propriul său sistem pur binar. Ele pot fi mai greu de citit pentru unii, dar nu au nicio diferență deoarece conversia numerelor din binar în zecimal este ușoară. Asemenea condiție prealabilă Creatorul ceasului a fost indicația secundelor de pe ceas.

În plus, ceasul are 6 butoane:
Set - este responsabil pentru setarea ceasului/ceasul alarmă și salvarea parametrului în modul de setare.
Mod - este responsabil pentru comutarea între modurile ceas, alarmă și cronometru.
Sus - la setarea ceasului/alarma/temporizatorului, parametrul crește cu unul. Într-un ceas cu alarmă și cronometru, acesta este responsabil pentru activarea și oprirea modului selectat. Când se declanșează un semnal, acesta va opri semnalul de alarmă/temporizator.
Jos - în setările ceas/alarma/temporizator, va scădea parametrul cu unul. Cronometrul îl va întrerupe fără a reseta numărătoarea inversă. Când alarma se stinge, aceasta va amâna alarma cu 5 minute.
24/12 - schimbați formatul orei.
Dim - este responsabil pentru aprinderea și stingerea LED-urilor (când LED-urile sunt stinse, celelalte butoane nu mai funcționează).
Diagrama poziției LED:

Componentele de conectare
Autorul va conecta toate LED-urile în serie și cu un rezistor. Rezistorul este lipit la unul dintre bornele LED, nu contează care. LED-urile vor fi conectate prin registre de deplasare, acest cip are 16 pini. Acest număr de pini vă permite să utilizați un număr mare de pini, ocupând doar 3 pini pe Arduino.


74HC595 pinout registru de schimbare:
Q0-Q7 sunt pinii de registru la care vor fi conectate LED-urile.
Vcc - pinul de alimentare va furniza 5V.
GND - masă conectată la GND pe Arduino.
OE - pinul este responsabil pentru activarea inversată a pinii, dar nu va fi folosit, este pur și simplu scurtcircuitat la masă.
MR este un registru inversat clar, nu trebuie controlat, deci va fi conectat la o sursă de alimentare de 5V.
ST_CP - pinul este responsabil pentru actualizarea stării registrului. Când scrieți o stare, trebuie să îi aplicați LOW, după ce scrieți - HIGH, pentru a actualiza starea pinii. Trebuie să fie conectat la un pin de pe Arduino. Puteți conecta acest pin la trei registre în paralel.
SH_CP - pin, responsabil pentru deplasarea registrului cu 1 bit. Trebuie să fie conectat la un pin de pe Arduino. De asemenea, sunt conectate pe microcircuite în paralel.
DS - datele sunt furnizate la acest pin este conectat la un pin de pe Arduino.
Q7" - acest pin este folosit pentru conectarea în cascadă cu restul registrelor 74HC595.

Schema de conectare:

Tweeter-ul piezo va fi conectat la al treilea pin al Arduino în serie cu un rezistor. Înainte de a include tweeter-ul în circuit, autorul s-a uitat la ce pini acceptă PWM, deoarece acest lucru este obligatoriu pentru acesta. Pe Arduino Uno, PWM este suportat de pinii 3, 5, 6, 9, 10 și 11.

Conectarea butoanelor folosește rezistențe încorporate în Arduino, cu o parte a butoanelor conectată la masă și cealaltă la pinii Arduino.

Iată cum arată designul final:

Asamblare pe Breadboard
După achiziționarea de piese suplimentare, autorul a început asamblarea proiectului pe o placă conform diagramelor. Aspectul era aproximativ așteptat, deoarece Breadboard-ul limitează libertatea de a plasa componente, iar firele proeminente nu au creat plăcere estetică. Dar placa de dezvoltare este destinată prototipurilor și nu dispozitivelor finite.

Cod program.
Având experiență în programare, autorul a decis să scrie singur codul, fără a folosi munca altora. Primul pas a fost să scrieți o subrutină care este responsabilă pentru clipirea tuturor diodelor și trimiterea unui semnal de la tweeterul piezo când este pornit. Această funcție ajută la verificarea integrității circuitului, aceasta este implementată pe multe dispozitive.

Funcționare LED.
Deoarece LED-urile sunt accesate printr-un registru de deplasare, în primul rând a fost necesar să se implementeze mai multe subrutine pentru LED-uri. Pentru a facilita lucrul cu diode, au fost implementate o serie de funcții suplimentare. Implementat diverse efecte animații cu diode. Când ceasul nu este setat, diodele responsabile pentru ore și minute vor începe să clipească (cum clipește un ceas obișnuit când nu este setat). LED-urile responsabile pentru secunde au și propria animație, dioda se poate deplasa la stânga și la dreapta în modul alarmă sau în modul de setare a ceasului.

Ciclul principal.
Programul este configurat să funcționeze după cum urmează: ceasul afișează informații în funcție de starea actualăși își schimbă starea în funcție de utilizarea butoanelor și a evenimentelor. Totul arată ca un număr considerabil de condiții imbricate. Starea diodelor este actualizată de fiecare dată după verificarea stării temporizatoarelor și a butoanelor și apelarea operatorului acestora.

Lansarea unui aspect
După pornirea proiectului, la prima vedere, dispozitivul a funcționat corect și stabil. Dar autorul a descoperit un defect: ceasul era în urmă cu o secundă pe oră, pt perioadă lungă de timp asta ar fi o mare greseala.

După ce am studiat această problemă, s-a constatat că originalul Arduino Uno folosește un rezonator ceramic și nu are acuratețea de a măsura timpul în pe termen lung. Cele mai multe decizie rațională Am achiziționat un ceas în timp real, plus datorită acestui modul, ora de pe ceas nu se va pierde la deconectare. Autorul a achiziționat modulul Grove RTC de la Seeed Studio. Este o placă gata făcută cu un cip de ceas. Autorul a conectat pinii modulului SDA și SCL la Arduino pe pinii A4 și A5, GND la masă. Deoarece sursa de alimentare de 5V este ocupată de placa ceasului, nu a existat unde să conectați modulul. Autorul a decis să alimenteze modulul de la unul dintre pinii digitali, care va fi alimentat constant. De asemenea, autorul trebuia să modifice codul sursă și să adauge o bibliotecă de ceasuri în timp real.

Asamblare ceas
După ce ați finalizat o muncă lungă asupra codului, este timpul să dați dispozitivului o completare aspect, și transferați-l de pe placa de breadboard pe placa de circuit imprimat. În primul rând, a fost necesar să se facă cablajul pentru placă. Pentru aceasta, a fost folosit Fritzing, deoarece autorul avea deja o idee despre aspectul ceasului și avea o diagramă a dispozitivului. Autorul a trasat tabla și manual, ceea ce a durat mult.
Proiect de producție PCB:

Producția plăcii de circuit imprimat a fost comandată în China. Seeed Studio are un serviciu pentru producerea plăcilor Fusion PCB. Prin Fritzing, fișierul a fost exportat în formatul Extended Gerber, mulți producători de plăci lucrează cu acesta. Două săptămâni mai târziu, autorul a primit plata mult așteptată prin poștă.

Tot ce a rămas a fost să lipim părțile ușor prafuite pe placă. Rezultatul final după lipire arăta mult mai bine decât aspectul de pe Breadboard.

Autorul proiectului a lucrat mult timp și a obținut ceea ce și-a dorit - un ceas binar unic cu cronometru și alarmă. Folosind compartimentul bateriei, ceasul poate fi amplasat oriunde. Arduino a fost la înălțimea așteptărilor și a făcut față complet sarcinii.

În ajunul zilei de naștere a unui prieten, a apărut întrebarea despre alegerea unui cadou. Un prieten este un iubitor de diverse dispozitive și produse electronice neobișnuite făcut singur. O promenadă de cumpărături nu a adus niciun rezultat: gadgeturile au fost neplăcut surprinzătoare fie pentru că erau banale, fie pentru că erau scumpe. Deja disperat să găsesc ceva, m-am uitat la widget-ul de ceas binar Sony. Și apoi m-am surprins gândindu-mă: „Ești un inginer electronic cu experiență, iar mâinile îți cresc de acolo!” Faceți un ceas binar cu propriile mâini, așa va fi cel mai bun cadou! Așa s-a născut ideea de a realiza dispozitivul descris mai jos.

Ceasurile binare sunt concepute pentru a reprezenta timpul în format zecimal binar, adică ore, minute și secunde sunt împărțite în zecimale și reprezentate în formă binară (vezi figura de mai jos)

În etapa de creare, următoarele cerințe au fost imediat prezentate viitoarelor ceasuri:

  • dimensiuni relativ mici atât ale plăcii, cât și ale dispozitivului în ansamblu;
  • utilizarea maximului de componente disponibile;
  • aspectul prezentabil al cazului.

Ca urmare, a fost creată următoarea diagramă:

ATmega8A-AU, poate oarecum învechit, dar nu mai puțin popular, este folosit ca MK. DS1307 disponibil este folosit ca cip de ceas în timp real. De asemenea, un condensator nepolar de 100 nF și un condensator polar (tantal) de 47 µF sunt instalate paralel cu liniile de alimentare lângă MK și la intrarea de alimentare. Toate rezistențele și condensatorii sunt în pachete SMD de dimensiunea 0805. Singurele componente de ieșire sunt LED-urile, un conector pentru baterie și butoanele de setare. Butoane - oricare fără fixare; Pentru versiunea cu carcasă, sunt potrivite butoanele cu „coșuri” lungi, de exemplu acestea:

Rezistoarele R1..R6, R14..R18 pot varia în limite destul de largi. Dimensiunile LED-urilor nu contează, dar carcasa și placa sunt proiectate pentru LED-uri rotunde de 5 mm. „Port rezervat” este un pin de pe placă care este furnizat pe placă pentru potențial extindere a funcționalității ceasului, de exemplu, adăugarea unui difuzor.

Mai jos este placa de circuite a dispozitivului:

Deoarece numărul de conexiuni diferite dintre LED-uri și MK este destul de mare și nu am vrut să fac un număr mare de jumperi „atârnate”, dispozitivul este implementat pe un PCB cu două fețe. Grosimea fibrei de sticlă - 1,5 mm, dimensiunile de gabarit plăci - 80 x 50 mm. Placa cu comenzi (cinci butoane) este realizata separat si va fi prezentata mai jos. Placa conține suplimentar (nu este indicat în diagramă): un conector pentru conectarea puterii + programator; orificii suplimentare pentru conectarea cablului de alimentare; rezistență în circuitul de resetare; puncte pentru condensatoare din circuitul de cuarț al ceasului (vor fi discutate mai jos).

Placa a fost realizată pe o mașină de frezat CNC, ceea ce a făcut posibilă obținerea unei calități aproape de fabrică. O fotografie a plăcii asamblate este prezentată mai jos:

Deoarece LED-urile transparente sunt prea luminoase, suprafața lor a trebuit să fie tratată cu o cârpă Scotch-Brite aspră pentru a-i oferi un finisaj mat, rezultând o lumină mai slabă și mai difuză.

Placa principală este conectată la comenzi folosind un cablu cu șapte fire (2 - alimentare, 5 - butoane); dimensiune - 68 x 22 mm.

După asamblarea plăcii și flash-ul firmware-ului MK, ultimul pas rămas este crearea unei carcase frumoase pentru dispozitiv. Datorită disponibilității unei mașini de frezat CNC, s-a decis tăierea pereților din fibră de sticlă de 1,5 mm grosime și conectarea lor împreună prin lipire; Panoul frontal este din aluminiu cu grosimea de aproximativ 1 mm. Lungimea totală a carcasei este de 104 mm, înălțimea (cu picioare și nasturi) - 77 mm, grosime - 25 mm. Dispunerea carcasei cu toate găurile este într-un singur fișier cu placa de circuit imprimat. Pereții laterali, de sus și de jos sunt legați unul de celălalt folosind suporturi din alamă pentru un șurub M3:

Desigur, partea cu șurub a suporturilor a fost îndepărtată anterior. Etape diferite Rezultatele asamblarii sunt prezentate mai jos ( ultima fotografie a fost realizat după asamblarea finală, astfel încât urmele de vopsea sunt clar vizibile):

Placa cu butoane este atașată la panoul superior pe două suporturi (pe o parte a unui astfel de suport există o suprafață netedă, pe cealaltă există un șurub M3) folosind piulițe în acest scop, sunt prevăzute găuri pe placă. Înălțimea suporturilor compensează înălțimea butoanelor, astfel încât aceștia din urmă se ridică ușor deasupra corpului:

Partea frontală a panoului frontal a fost tratată cu șmirghel cu granulație fină, apoi cu pastă GOI. Partea inversă, dimpotrivă, prelucrat cu șmirghel grosier pentru fixare pe pereții laterali la fiecare 5 mm blocuri de lemn folosind rășină epoxidică. Peretele din spate are un conector micro-USB pentru alimentare, precum și un orificiu pentru un potențial difuzor; Capacul este atașat la hexagoanele de alamă menționate mai sus folosind patru șuruburi M3 x 15 mm.

Pereții de la capăt și din spate au fost vopsiți cu vopsea spray auto.

Panoul de jos are găuri pentru atașarea picioarelor, dar apoi s-a decis să se folosească picioare de cauciuc fixate cu superglue.

Carcasa asamblată s-a dovedit a fi destul de puternică căderile accidentale repetate nu au deteriorat integritatea structurii. Placa principală este atașată de pereții carcasei folosind stalpi de tablă și alamă. Această decizie a fost luată din cauza faptului că bateria și conectorul de programare devin accesibile prin îndepărtarea capacului din spate; adică eliminarea taxei nu are sens.

O fotografie a dispozitivului în funcțiune este prezentată mai jos:

Un dispozitiv asamblat corect nu necesită ajustare și începe să funcționeze imediat. Setarea orei se efectuează după cum urmează:

  • Pentru aproximativ 2,5 secunde trebuie să țineți apăsat butonul „0”SEC/SET (situat deasupra secundelor). După aceasta, contorul de secunde se va reseta la zero și ceasul se va opri;
  • apoi folosind butoanele de setare a orei pe care trebuie să le setați momentul potrivit;
  • apoi apăsați butonul "0"SEC timp de 2,5 s; ceasul va relua funcționarea cu ora actualizată.

Dispozitivul asamblat a fost dăruit cu succes unui prieten și a fost în uz de mai bine de un an nu au fost identificate comentarii privind funcționarea sau probleme.

În concluzie, aș dori să descriu următoarea problemă (pentru radioamatorii cu experiență). Nu există întotdeauna cuarțuri de ceas de calitate corespunzatoare. Se poate dovedi că frecvența cuarțului tău diferă de cea declarată cu câțiva herți. Rezultatul unei astfel de abateri este o precizie slabă: de exemplu, o abatere de la frecvența „de referință” cu 2 herți duce la o întârziere de 5,27 secunde pe zi sau două minute și jumătate pe lună.
Frecvența cuarțului ceasului poate fi reglată prin instalarea unui condensator cu o capacitate de câteva picofaradi în serie sau paralel cu cuarțul. Astfel, autorul a reușit să reducă diferența de frecvență la 0,1 Hz, ceea ce duce la o eroare mult mai mică - 7 secunde pe lună.

Voi fi bucuros să aud întrebări, critici, dorințe și sugestii în comentarii.

P.S. Fișiere cu firmware și cod sursă, configurația FUSE-bit și proiectul sunt în arhivă.

Lista radioelementelor

Desemnare Tip Denumire Cantitate NotaMagazinBlocnotesul meu
U1 MK AVR pe 8 biți

ATmega8A-AU

1 TQFP-32 La blocnotes
U2 Ceas în timp real (RTC)

DS1307

1 SO-8 La blocnotes
Q1-Q6 Tranzistor bipolar

BC817

6 La blocnotes
D1-D20 LED 20 La blocnotes
R1-R6, R11-R13 Rezistor

4,7 kOhm

6 La blocnotes
R7-R10 Rezistor

150 ohmi

4
Ideea de a folosi un sistem binar pentru a reprezenta timpul a apărut odată cu apariția calculatoare pe cele electronice. Exemple individuale de ceasuri 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 companie britanică Anelace a lansat binarul pentru prima dată ceas de mână cu ecran LED. Acest eveniment a găsit un răspuns puternic î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 numere diferite de „cadrane”. La unele, puteți înlocui iluminarea de fundal LED. Ceasurile binare pot fi împărțite în două mari categorii: grup iluminat și indicator luminos cu cheie. În primul trebuie să însumați puterile a doi, în al doilea trebuie să convertiți un număr binar în unul zecimal. Prima metodă este de preferată pentru persoanele care doresc să atragă atenția, a doua - pentru programatori și persoanele care doresc să cunoască ora cât mai repede posibil. Pentru ușurință în utilizare, puteți cumpăra ceasuri binare cu diode etichetate (1, 2, 4, 8 etc.).

De unde să cumpăr

Există multe aplicații profitabile pentru cumpărarea de ceasuri binare în magazinele online. Pe serviciile de tranzacționare specializate puteți selecta modele exclusive din diferite materiale. eBay este cel mai aglomerat site 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 ceasurile binare în viața de zi cu zi, trebuie să convertiți rapid numerele și să le adăugați unele la altele. Citiți instrucțiunile pentru ceasul dvs., aflați ce rând de diode este responsabil pentru ore și care pentru minut. Dacă nu există instrucțiuni, încercați să determinați acest lucru experimental - citirile scalei minutelor se vor schimba mai repede decât scala orelor. Timp total constă din citirile scalei orelor și minutelor. Să presupunem că prima și a cincea diodă sunt pe scara oră, iar a treia și a patra pe scara minutelor. Aceasta înseamnă că scara orară afișează 2 la puterea zero și 2 la puterea a patra, adică 1 + 16 = 17 ore. Suma minutelor: 2 pătrate plus 2 cuburi: 12 minute. Astfel, ceasul binar arată 17:12.

Avantajele ceasurilor binare

Ceasurile binare au un efect pozitiv asupra abilităților matematice - deoarece de fiecare dată când trebuie să aflaț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.

Ele atrag atenția, mulți oameni îți vor admira „abilitățile aritmetice”. În plus, ceasurile binare reprezintă design și poartă un „stil al viitorului” tehnologic. Ceasurile binare de perete (de masă) pot deveni parte din interiorul tău.

Vizualizări