Sari la conținut
ELFORUM - Forumul electronistilor

count down - > DS1307


Vizitator utopic

Postări Recomandate

Vizitator utopic

Salut tuturor. Problema mea e un pic ciudata. Trebuie sa fac un countdown. Ora o citesc de la un RTC DS1307.

  secunde=sec;  minute=min;  ore=hrs;  current=ore*3600+minute*60+secunde;  ref=56614;  count_down=ref-current;  count_down_hrs=count_down/3600;  count_down=count_down-(count_down_hrs*3600);  count_down_min=count_down/60;  count_down=count_down-(count_down_min*60);  count_down_sec=count_down;    itoa(count_down_hrs,10,ore_string);  itoa(count_down_min,10,minute_string);  itoa(count_down_sec,10,secunde_string);    lcd_putc(ore_string);  lcd_putc("/");  lcd_putc(minute_string);  lcd_putc("/");  lcd_putc(secunde_string);

 

Driver-ul meu imi itoarece sec,min,hrs de tip BYTE. ore, minute, secunde is int-uri.

Ma gandeam sa fac cast-ul asa direct, la fel si in cazul impartirilor, castul spre int sa se faca direct (sper ca e corect).

Din pacate nu imi afiseaza deloc corect.

 

In rest codul e banal => din secunde aflu ore, minutele si secundele.

 

Poate careva a mai facut coundown-uri si imi poate spune unde gresesc (cu siguranta castul nu se face corect undeva....). Mersi anticipat.

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

Top autori în acest subiect

  • sofian

    1

Top autori în acest subiect

Vizitator utopic

Codul de mai sus e cam aiurea. Am mai lucrat si am facut ceva ce merge dar nu perfect:

 

  current=hrs*3600+min*60+sec;  ref=56614;  count_down=ref-current;  count_down_hrs=count_down/3600;  count_down=count_down-(count_down_hrs*3600);  count_down_min=count_down/60;  count_down=count_down-(count_down_min*60);  count_down_sec=count_down;    lcd_putc((count_down_hrs >> 4) + '0');  lcd_putc((count_down_hrs & 0x0F) + '0');  lcd_putc("/");  lcd_putc((count_down_min >> 4) + '0');  lcd_putc((count_down_min & 0x0F) + '0');  lcd_putc("/");  lcd_putc((count_down_sec >> 4) + '0');  lcd_putc((count_down_sec & 0x0F) + '0');
Acum imi afiseaza dar nu perfect. Mentionez ca hrs, min, sec, count_down_hrs, count_down_min, count_down_sec sunt de tip BYTE, count_down e int iar ref si current e float.
Link spre comentariu

eu cred ca logica este foarte greadeci sa zicem ca vrei sa faci countdown la 2ore, precizia de o secunda2ore * 3600Sec=7200adaugam la ora curenta exprimata in secunde 7200sa zicem ca ora este 1212*3600=4320043200+7200=5040050400 este referintaacum ora este 1313*3600=46800referinta-46800=3600 adica exact o oracare o imparti si o afisezi cum vreiproblema este cind depaseste ora 24, dar te las sa gindesti putin

Link spre comentariu
Vizitator utopic

Pai si eu nu am avut aceasi logica?

ref-ul ala e 55000 de secunde sau cat am scris....ceea ce e ora 15 si ceva.

Bun....current sa zicem ca e 12....si am scazut din ref echivalentul orei 12 in secunde. Deci unde e gresala?

Oricum nu afiseaza corect. Nu cred ca la logica sa fie gresala....dar orice este posibil.

 

Acum sunt 99% ca e de la casuri pe undeva si nush unde. Daca am declarat count_down -> float imi afiseaza ceva ce seamana mai mult a realitate :))

Da mai apar si caractere precum '<' , '='. etc.

 

afisez asa:

lcd_putc((count_down_hrs >> 4) + '0');  lcd_putc((count_down_hrs & 0x0F) + '0');  lcd_putc("/");  lcd_putc((count_down_min >> 4) + '0');  lcd_putc((count_down_min & 0x0F) + '0');  lcd_putc("/");  lcd_putc((count_down_sec >> 4) + '0');  lcd_putc((count_down_sec & 0x0F) + '0');

pt ca asa afisez si ora fara count down direct cu hrs, min, sec si merge perfect.

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