Vizitator utopic Postat Martie 15, 2010 Partajează Postat Martie 15, 2010 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
Vizitator utopic Postat Martie 15, 2010 Partajează Postat Martie 15, 2010 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
sofian Postat Martie 15, 2010 Partajează Postat Martie 15, 2010 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 Postat Martie 16, 2010 Partajează Postat Martie 16, 2010 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum