Cel mai simplu ceas pe avr

Cel mai simplu ceas pe avr

Am decis să colectez un ceas pentru ziua de naștere a iubitului meu. Soldered de la vechiul bord cu microunde cu indicatorul de șapte segmente cu un colon și a mers la Internet pentru a căuta un circuit și firmware pentru o simplă repetare.







Deci, uita-te prin mine, unul câte unul mare de articol care descrie orele cu o mulțime de funcții, ceas cu alarmă, temporizator, senzor de calendar și de temperatură și cred că în ore am nevoie de a afișa numai ora, și în linii mari, celor care atârnă pe peretele meu , nu este suficient doar o lumină de noapte. Deci, am nevoie doar de funcțiile de timp. Prin urmare, schema și programul ar trebui simplificate pe cât posibil.

Tot ce ne trebuie este conectarea ecranului cu șapte segmente în modul de afișare dinamic, două butoane pentru setarea orelor și minutelor și organizarea ceasului.

Aproape am uitat! Este necesar să se facă o putere de rezervă, astfel încât atunci când sursa principală să fie deconectată, ceasul nu este resetat, dar indicația este oprită și consumul este redus la minim.

Schema este următoarea:

Afișaj Common-anod, anozi sunt conectate direct la mikokontrollera portul C, segmentele de rezistoare am pus 220 Ohm, poate fi chiar mai puțin este mai mult, pe timp de noapte este strălucire foarte luminos (de exemplu, poate fi mai mic, dar nu mai puțin de 100 ohmi, apoi pe fiecare picior al portului va încărca 35mA maxim, iar foaia de date poate fi de 40mA). Greșit numărat. Avem nevoie de mai mult. Mult mai mult ... am refacute la 560 ohmi, iar curentul este mai mare decât foaie de date. Dar funcționează.
Tranzistorul Q1 este un detector de tensiune. Ea, ca și butoanele, este conectată la linia externă de întrerupere, ATMega16 are doar trei.

Ceasul este organizat folosind modul asincron Timer2. În acest mod, timer-ul este cronometrat la un cuarț extern de la 32768 Hz și se oprește microcontrolerul în modul de repaus, pe care le vom utiliza ore de alimentare de rezervă de lucru.

Acum, să examinăm codul:
Indicarea dinamică utilizează Timer0, ceasul pe Timer2, butoanele pentru întreruperile externe Int0 și Int1, controlul puterii la întreruperea externă Int2.
Bucla principală este lăsată doar timpul de conversie în BCD și de îngrijire în hibernare, și Bin2BCD caracteristică special redus, deoarece minutele și orele nu este mai mare de 100, aceasta înseamnă că nu există nici un punct pentru a verifica 10000, 1000 și 100.
Funcția de timp în sine a fost preluată de la AVR ApNote134 și a fost tăiată la dimensiunile necesare.
Instalarea în ore și minute este introdus pentru prima dată în procesul de întrerupere secunde contra, atunci am decis ca etapa de o secundă - este prea lent și sa mutat la handler afișajul dinamic, cules empiric cantitatea de preaplin temporizator de corecție pentru viteză normală.


Mai intai am asamblat un layout pe Pinboard2:

Cel mai simplu ceas pe avr

Cel mai simplu ceas pe avr

La urma urmei câștigat, pe fericire sa răspândit rapid batista, gravat, găurite sudat, dar când am început să lipire fire să lumineze intermitent, am văzut că, după recenta lucrare cu mega8, a uitat cel mai important lucru - resetarea codului PIN))). A trebuit să post postul.
Cel mai simplu ceas pe avr

Taxa a făcut LUT. La inceput am incercat laminatorul, dar, aparent, temperatura de 170 de grade nu a fost de ajuns si totul a mers prost. La fel și fierul de modă veche. În această placă, am realizat mai întâi două piste sub rezistorul 1206. După cum puteți vedea, sa dovedit ok.

În fyuzah trebuie să setați generator intern RC la 4 sau 8 MHz și să dezactivați JTAG.







Ei bine, ca de obicei, câteva fotografii:

Cel mai simplu ceas pe avr

Cel mai simplu ceas pe avr

Cel mai simplu ceas pe avr

În atașament, sursa, schema, fișierul Proteus pentru modelare, firmware-ul.

UPD: Proiectat în shell:

Cel mai simplu ceas pe avr

Capsula a fost luată din parfumul auto. Sub indicator, puneți un sac antistatic într-un singur strat.
Apropo, parametrii distribuitorului de tensiune de alimentare la sfarsit s-au dovedit a fi 39kΩ si 6.2kΩ.
END_UPD

+5V la orice pin (mai bine decât INT) printr-un rezistor (pur pentru protecție, 1-10k). Nu este o soluție sigură. Pinul AVR are un TS cu un prag de aproximativ 1,5V. Știți cum amenință acest lucru? Descărcarea bateriei.
În cazul în care alimentarea electrică eșuează, tensiunea la punctul 5V va scădea

3V, iar apoi energia va veni de la baterie. În același timp, condensatorul de la intrare va fi descărcat foarte lent prin pinul MK configurat pentru intrare (și ar fi mai bine dacă nu au fost fixate armăturile). Și cu ea și o baterie de rezervă.
Cel puțin un divizor rezistor sau o sarcină inactivă pentru descărcarea de capacități sub nivelul de cutoff (în această schemă, ele sunt un divizor în circuitul de bază).

Chiar și prin acest divizor, indicatorul se oprește numai după o secundă sau două după ce alimentarea externă este oprită. De aceea m-am gândit la comparator.

Este suficient să micșorați puțin valorile nominale. Fă-o spună 4.7k + 1k. Apoi, când ajungeți la 3 volți pe bază va fi de 0,5V și mai puțin, ceea ce va fi suficient pentru a opri tranzistorul. În modul de operare, curentul prin bază nu este folosit la 1mA, nu merită să vă faceți griji. Iar extra milliamperele de la BP nu sunt atât de critice, având în vedere că lumina de fundal consumă mult mai mult.
În general, comparatorul nu este necesar. Trebuie doar să selectați valorile rezistorului pentru o închidere sigură la 3V (și la 4-3.5V dorit, adică acolo este cameră).
Singura problemă pe care o văd când lumina de fundal este oprită, tensiunea a crescut într-o oarecare măsură -> aprindem din nou lumina de fundal -> am căzut din nou ... (în BP, un contor mare și firele nu sunt ideale).

În primul rând, acum există un prag similar. În al doilea rând, este posibil (sau mai degrabă ar trebui) să furnizeze o descărcare rapidă a condensatoarelor atunci când alimentarea (de exemplu, în cazul în care indicatorii sunt alimentate cu ajutorul tastelor nu sunt de putere IC, și puterea externă, ei rapid vyzhrut Conder și va ieși). Ei bine, în al treilea rând, puteți include nu prin rezistor, ci prin divizor și ridica pragul la orice valoare dorită.

În primul rând, acum există un prag similar. Nu, acum amputare la 1B și un volt este atins mai rapid, deoarece există deja o anumită alimentație s circuitul de evacuare vvide divizor în bază (sau mai exact o rezistență și o tranziție de bază).
Ei bine, în al treilea rând, puteți include nu prin rezistor, ci prin divizor și ridica pragul la orice valoare dorită. Ai uitat histerezisul pinilor MK. Într-un efort de a atinge un nivel de tensiune mai mare pentru a opri iluminarea din spate, vom refuza să îl pornim atunci când se aplică energie.
În versiunea curentă, desigur, există o "zgomot", și poate fi o problemă, dar există și o anumită protecție împotriva ei sub forma pinei foarte științifică. Fluctuațiile mici ar trebui neutralizate, de la mari pentru a oferi o întârziere a includerii.
Transistor nu este superfluă :)

Nu, acum se taie la 1V Există un divider de 1: 1, pragul de tensiune al tranzistorului este de aproximativ 0.7V - este de aproximativ 1.4V. Sarcina (sau altă schemă de descărcare rapidă a sursei principale de alimentare) este da, am vrut să spun, dar am uitat de ea.
Ai uitat histerezisul pinilor MK. Într-un efort de a atinge un nivel de tensiune mai mare pentru a opri iluminarea din spate, vom refuza să îl pornim atunci când se aplică energie. Histerezisul, în măsura în care îmi amintesc, nu este atât de mare încât să împiedice comutarea fiabilă a pinului atunci când tensiunea variază între 3V și 5V.

Să aruncăm o privire. La mine aici datashe pe ATtiny2313 (ce inconvenient dashishy la avr, smochine veți găsi că este necesar).
În conformitate cu el, pentru ceea ce ar fi un nivel zero, atunci când puterea 3B avem nevoie pentru a obține 0.9V la PIN-ul pentru un nivel scăzut, care poate fi un maxim de 0.3Vcc - de atunci, nu se poate scrie :)
Ie indiferent de splitter pentru a obține un nivel scăzut de 0.3Vcc (nivel maxim de zero), nu vom folosi același separator nu obține 0.6Vcc (la nivel de unitate minim).

care sunt dashshits-ul ciudat al avr, smochine veți găsi ceea ce aveți nevoie Și asta este adevărul. Și în șita (deși, preliminar) pe mega16 datele necesare nu sunt nici măcar (deși într-o coaseră pe Tini 13 i-am găsit cu siguranță).
Dar nu arăți așa ieftin. Acestea sunt cerințele pentru nivelele logice ale semnalului digital, suntem preocupați aici de parametrii specifici ai TS la intrarea pinului.
În datele pentru ATMEGA8A, aceste date există deja. Figurile 26-37..26-39. Prag superior

2.2V, histerezisul este 0.45V. Adevărat, ele sunt legate de tensiunea de alimentare (ciudat, și în conformitate cu datashit pe mici 13 mi se părea că nu sunt atașate), aceasta complică deja sarcina. Pentru a distinge între 3V și 5V, divizorul va trebui să fie făcut de la o diodă zener la 2V și o rezistență. Ei bine, sau să fii nedumerit de descărcarea rapidă a puterii externe și nu te deranjează să distingi între 3B și 5V în general (sobsna, acum este, în ciuda tranzistorului).

Mă uit și sunt mai înclinat la comparator, se pare că utilizarea lui elimină toate aceste probleme deodată. Adevărat, trebuie să schimbi totul, taxa și programul ... Și am început deja un alt proiect interesant. Până acum.







Articole similare

Trimiteți-le prietenilor: