Sari la conținut
ELFORUM - Forumul electronistilor

Afisare mai multe informatii


Mihai Popa

Postări Recomandate

Buna ziua.Vreau sa fac un ceas cu afisare pe 6 digiti, care sa afiseze ore,minute, secunde si apoi zi, luna, an. Ceasul il fac cu DS1307.procesorul este pic16f690. Simulatea o fac in Proteus, iar codul il scriu in Picbasic Pro. Problema mea este ca inca nu stiu cum sa fac sa afisez 5 secunde, sa zicem, ora-minut-secunde, apoi 5 secunde data; si tot asa....Va rog, daca ma puteti ajuta cu metoda de afisare a unor informatii , apoialtele, revenire la primele...

Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mihai Popa

    2

  • puiu

    1

  • stefan_k

    1

  • nooob64

    1

Top autori în acest subiect

Cel mai simplu faci utilizind un delay de 5000 ms , trebuie sa aibe compilatorul asa ceva , vezi in help functie 'built in' de delay ; mai frumos ar fii sa utilizezi un timer , pe care il calculezi si iti faci un contor care se incrementeaza pina cind au trecut 5 secunde, in acest fel nu mai faci citiri infinite din acel DS1307 , ci doar intr-un interval de 5 secunde.

Link spre comentariu

Avand in vedere ca se citesc/afiseaza si secundele, cel mai simplu e sa compari secunda noua cu secunda de referinta (numeri efectiv 5 secunde). In felul acesta nu mai conteaza nici frecventa cu care citesti ora din DS1307; poti sa faci citiri incontinuu, fara pauze, si sa numeri de cate ori se schimba secundele.

Link spre comentariu

Va multumesc pentru raspunsuri.Problema mea este cam asa: ceasul vreau sa il fac cu ds1307 pentru ca are ceas si data. Deci, eu vreau sa afisez pentru o perioada, sa zicem 5 secunde, ceasul si pentru aceeasi perioada, data; apoi sa se reia afisarea.Am definit 6 variabile, cate una pentru fiecare digit.Pot afisa permanent doat una din informatii, ceasul sau data, in sa nu ma prind cum as putea sa le comut.

Link spre comentariu

1. Crezi doua stari interne una pentru care afisezi ora si una pentru afisatea datei. Comutarea intre cele doua stari se face printr-unul din sistemele descrise mai sus. De ce nu faci ceasul cu resurse interne si nu mai ai DS1307?2. Daca mi-a aduc aminte bine, DS1307 genereaza o intrerupere la fiecare secunda si o poti utiliza pentru a numara secundele.

Link spre comentariu

char secVeche='\0';char Ora[7], Data[7];//Ora[6]='\0'; Data[6]='\0';void citesteValori(){  //citesti adresele 0x00-0x07 (poti sari peste 0x03=ziua din saptamana) si le pui in Ora[] si Data[]}void arataOra(){}void arataData(){}main(){int count=0;  while(1)  {    citesteValori();    if(secVeche!=Ora[5])    {      count++;      secVeche=Ora[5];    }    if(count<=5)    {      arataOra();    } else {      arataData();      if(count>10)        count=0;    }  }}

nu ma pot expirma in basic, ti-am scris in C ca sa iti arat cum am gandit-o eu. daca sintaxa e problema nu te pot ajuta :|

Link spre comentariu
  • 3 săptămâni mai târziu...
Vizitator ics_igrec_zet

Eu am folosit ds1307 si 16f628, uite codul:

 

define i2c_sclout 1cx var portb.7dx var portb.6secunda var byteminut var byteora var byteziuaS var byteziuaF var byteluna var byteanul var byteact var biteeprom 0,[0]read 0,actif act=0 then setRTCstart:i2cread dx,cx,%11010000,0,[secunda]i2cread dx,cx,%11010000,1,[minut]i2cread dx,cx,%11010000,2,[ora]i2cread dx,cx,%11010000,3,[ziuaS]i2cread dx,cx,%11010000,4,[ziuaF]i2cread dx,cx,%11010000,5,[luna]i2cread dx,cx,%11010000,6,[anul]lcdout $fe,1,hex2 ora,":",hex2 minut,":",hex2 secundalcdout $fe,$c0if ziuaS=$1 then lcdout "Dum."if ziuaS=$2 then lcdout "Lun."if ziuas=$3 then lcdout "Mar."if ziuas=$4 then lcdout "Mie."if ziuaS=$5 then lcdout "Joi."if ziuaS=$6 then lcdout "Vin."if ziuas=$7 then lcdout "Sam."lcdout $fe,$c5,hex2 ziuaf,"/"lcdout $fe,$cb,"/20",hex2 anullcdout $fe,$c8    if luna=$1 then lcdout "Ian"    if luna=$2 then lcdout "Feb"    if luna=$3 then lcdout "Mar"    if luna=$4 then lcdout "Apr"    if luna=$5 then lcdout "Mai"    if luna=$6 then lcdout "Iun"    if luna=$7 then lcdout "Iul"    if luna=$8 then lcdout "Aug"    if luna=$9 then lcdout "Sep"    if luna=$10 then lcdout "Oct"    if luna=$11 then lcdout "Nov"    if luna=$12 then lcdout "Dec"pause 500goto startsetRTC:i2cwrite dx,cx,%11010000,0,[$00]    ;setare secunde 0-60pause 10i2cwrite dx,cx,%11010000,1,[$30]    ;setare minute 0-60pause 10i2cwrite dx,cx,%11010000,2,[$13]    ;setare ora 0-23pause 10i2cwrite dx,cx,%11010000,3,[$2]     ;setare zi saptamana 1-7pause 10i2cwrite dx,cx,%11010000,4,[$27]    ;setare zi luna 0-31pause 10i2cwrite dx,cx,%11010000,5,[$9]     ;setare luna 1-12pause 10i2cwrite dx,cx,%11010000,6,[$10]    ;setare anpause 10i2cwrite dx,cx,%11010000,7,[$10]    ;setare pin7 ds1307 1Hzpause 10write 0,1goto startend    

Salut, sper sa te ajute.

Link spre comentariu

pai faci asa :

 

definiri etc ale programului..............docitesti ceasul, care da datele in format BCDGosub verifica_secundadaca <=4 then Gosub afiseaza_ceasdaca >4 then Goto afiseaza_dataun posibil delay sa nu afiseze foarte des si sa dea efect de flicarireloopafiseaza_ceas:afisezi efectiv oraReturnAfiseaza_data:afisezi efectiv dataReturnVerifica_secunda:rutina in care pui secundele intr-o alta variabila si ii stergi cei mai semnificativi 4 biti, sa ramai doar cu primul digit bcd, adica doar unitatile numarului total de secundeReturnEND
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