Sari la conținut
ELFORUM - Forumul electronistilor

Ceas cu alarmă - AT89C2051


XAN77

Postări Recomandate

Vă prezint un ceas banal cu bătrînul 89C2051. Nu contează motivele pentru care am făcut un ceas cu acest mcu, să zicem pentru completarea colecției de ceasuri de pe forum :d

Personal vreau să înlocuiesc cu acest ceas telefonul mobil de la capul patului.

În arhivă se află proiectul Proteus și MikroC PRO for 8051, pentru ultima versiune free/demo de la mikroe.

Folosesc 6 digiți, anod comun, 4+2. un modul super bright red model CA56-21SRWA și un digit dublu albastru model LD-D036UB-C. Pe digitul dublu albastru afișez ora alarmei dacă e activă sau un ”--” dacă e inactivă.

Există 3 taste: minute, ore, alarmă. La apăsare scurtă pe tastele minute/ore, se incrementează, la apăsare peste 1/2 secundă se decrementează. La apăsare scurtă pe alarmă se activează/dezactivează alarma iar la apăsare lungă se intră/iese din mod setare alarmă. În mod setare alarmă cei 2 digiți pîlpîie. Ora și minutul alarmei se setează din cele 2 taste ore și minute. Pentru a se face diferența între afișarea minute sau ore pe cei 2 digiți, ora este afișată ” x x .” iar minutul ” x x ”, adică fără punct. Se poate incrementa/decrementa minutul sau ora alarmei indiferent de ordine, după fiecare apăsare de tastă afisajul indică ultima variabilă modificată fie ea minute sau ore cu diferența punctului susmenționat. La ieșirea din mod setare alarmă (apăsare lungă tastă alarmă) pe digiții alarmei este afișată întotdeauna ora alarmei.

Pe segmente am rezistori serie de 470 pentru lumină puternică, dar pe montajul final voi pune de 2k, am probat, e ok pentru noapte adică pentru ce vreau eu. Anozii sunt comandați de tranzistori PNP de 100mA (Emitor la +Vcc, Baza la mcu printr-un rezistor serie de 1-2k iar Colectorul vine la anodul comun al digitului). Pinul ce comandă buzerul necesită un pull_up extern de 1k nefigurat în proteus. Am folosit un buzer de pe o placă ups, care nu cîntă singur (ca cel din proteus). Nu sunt foarte încîntat de sunet dar e ok, deci e loc și de mai bine.

Quarțul este de 12MHz. A nu se uita de resetul la aceste MCU, necesită rezistor la masă și C electrolitic la plus.

Programarea am făcut-o cu Blowit programmer pe LPT, din windows7 și nu am folosit bascom, că e mai prost decît utilitarul din arhiva blowit. Am folosit acel utilitar din comand prompt cu comanda: py2051 ceas.hex

În caz de lipsă programator sau alte probleme acel utilitar dă o eroare, bascom însă îmi programează fără să zică nimic chiar și fără programator conectat.

LPT e setat în bios ca ECP+EPP.

 

http://i58.tinypic.com/b4xquc.jpg

Editat de XAN77
Link spre comentariu

Azi am construit un astfel de ceas, mîine sper să mă trezească...

Alimentarea de backup este cu un acumulator de telefon mobil. Consumul ceasului la 5V este de <15mA iar la 3,6V este de <8mA. O baterie bună de 800mA ar duce teoretic cam 4 zile. În foto 2 se vede în fundal sursa de alimentare reglată la 5,00 iar jos consumul în mA.

http://i60.tinypic.com/25rkmz6.jpg

http://i60.tinypic.com/mh3x2u.jpg

Ulterior acestor poze am mai montat buzerul cu tranzistorul.

Link spre comentariu

actualizare

De aseară e în funcțiune. Cu tot cu consumu ăla mic de 15mA m-a spart aznoapte, prea puternic displayul.

Eu folosesc pentru afișarea multiplexată Timer0, format din TH și TL căruia îi preîncarc TH cu valoarea 252, astfel am întreupere la (256-252TH) x 256TL=1024. Un anod stă activ de la ultima întrerupere pînă la următoarea, fiind stins la începutul funcției de afișare cînd se trece la digitul următor. M-am gîndit să scurtez timpul cît este activ un anod ca să pot diminua luminozitatea afișajelor.

Am introdus niște linii noi în program de la linia 105 la 109 unde, pe timpul nopții, am ales eu niște ore cum mă interesa pe mine, funcție de valoarea lui TH, sting anozii. Eu îi sitng cînd ajunge TH la 253 adică scurtez la 1/4 timpul activ al unui anod, față de cum era înainte și e foarte mulțumitor. pentru alte nivele se poate umbla la valoarea TH de la linia 106.

 

Nu am zis nimic de precizie. Am folosit metoda zero cumulative errors. La linia 8 este o definire:

unsigned long osecunda = 1000000 ;

Acea valoare de 1.000.000 trebuie ajustată funcție de cum se mișcă ceasul. Se poate calcula matematic funcție de abaterea ceasului.

Posted Image

89C2051 ceas alarma cu T la anozi.rar

Editat de XAN77
Link spre comentariu

Deci... foarte bine ca nu folosesti bascom ... felicitari pentru partea de programare in care ceasul tau consuma doar 15mA , la cati MHz ...12 ?  e cam mult  si pune-i DS1307 cu baterie si cuart ai sa vezi ca e foarte precis .

Editat de unuldinei
Link spre comentariu

Da consumul este cu display cu tot, ambele. Cel de 4 digiți e super bright, celălalt albastru e strident prin definiție.

12 MHz nu e mult, înseamnă 1 MIPS la procesoarele 8051.

Cît despre precizie, no comment, eu sunt pretențios.

Editat de XAN77
Link spre comentariu

La mine merge de 8 zile fara abatere inca ... sunt curios MIPShi astia ... care-i calculeaza si cum ? cred ca e prea mult marketing acolo ... In fine , pentru calcularea secundei perfecte stim bine ca oscilatorul ala variaza cu temperatura si tensiunea de alimentare si nu prea ai cum sa compensezi asa usor . Ceea ce am observat eu cand am facut ceasuri cu cuarturi e faptul ca in jurul valorii de 8 MHz aveam cea mai buna stabilitate si ca modelele cuarturilor mari formatul mare, nu cel mic , e cel mai precis in functionare ( sub 2 secunde abatere / 24 ore). 

Nu iau pe nimeni de sus , doar am impartasit din experienta mea , sper sa nu va suparati ca m-am adaugat acestui topic.

Link spre comentariu

Nu am de ce să mă supăr. Fiecare se bazează pe experiențele personale. Am făcut ceasuri cu DS la care am folosit diverse cuarțuri, recuperate sau cumpărate. Am studiat datașetul lui DS1307 și vedeam că dădea ceva indicații referitor la cuarțul potrivit. Poate nu nimeream ce cristal trebuie, dar eu nu am fost mulțumit de precizie. În plus de asta eu cred că la un ”aparat” ce este doar un ceas, dacă este posibil software, este de preferat un ceas software. Nu mi-ar fi adus nici un avantaj mie în acest montaj un integrat în plus. Din contră, ar fi fost risipă și de hard și de memorie.

La o construcție mai complexă, unde mcu ar avea prea multe sarcini, sau unde este posibil ca mai multe dispozitive de pe magistrală să acceseze ceasul, da se justifică.

Referitor la MIPS. La 8051, cum e cazul lui 89c2051, ciclul instrucțiune are 12 perioade de ceas, nu 1 ca la AVR, nu 4 ca la PIC. Multe instrucțiuni ale procesorului sunt executate în 1 ciclu instrucțiune, dar nu toate întradevăr. Așa spun producătorii, presupunînd execuția numai a instrucțiunilor de 1 ciclu, viteza de calcul este de pînă la 1 MIPS la 12MHz clock.

Editat de XAN77
Link spre comentariu

Am progresat la carcasă. Nu am intenționat să iasă ca un TV da așa a ieșit :rade:

Posted Image

 

Posted Image

 

Posted Image

 

Încă nu e chiar gata, mai rămîne de pus spatele și să văd cum pun butoanele externe, cele de reglaj minute/ore nu e musai dar cel de activare dezactivare alarmă aș vrea unu roșu sus pe mijloc ca la un ceas mecanic clasic :d

Link spre comentariu

Descoperit un bug, la setare alarmă, cîteodată, o dată cu incrementarea orei/minutului se incrementa și ora/minutul ceasului.

Soft corectat.

P.S. în proteus afișarea pîlpîie datorită faptului că ora implicită e 00.00 la care e activ modul de noapte cu contrast redus. La ora 6.00 e mod normal.

 

Ceas alarma - 89C2051.rar

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări