[ velimir_velja_velimir @ 07.03.2009. 03:19 ] @
Zanima me kako da vrsim upis u ds1307(real time clock)?Problem predstavlja to sto su mi promenljive u hexadecimalnom obliku,a kako sam ja shvatio,treba da prebacim u BCD kod.
Zanimame da li je neko radio sa tim,i kakva je imao iskustva?
[ Stojan Trifunovic @ 07.03.2009. 09:16 ] @
BCD oblik je oblik u kojem se u pojedinim niblovima (gornjih ili donjih 4 bita bajta) nalaze decimalne cifre (od .0 do .9).

Otprilike ovako (brojevi sa tackom ispred su u decimalnom formatu):
Code:

Heksadecimalni     Binarni format       Binarni oblik BCD broja
     0x1C         b'00011100' (.28)       0010 (.2) 1000 (.8)
     0x5F         b'01011111' (.95)       1001 (.9) 0101 (.5)

Ocigledno je da u BCD formatu ne mozete prikazati brojeve vece od .99. Ovo proistice iz cinjenice da se unutar jednog nibla smeju naci samo sledeca stanja:
Code:

Binarni oblik nibla
    0000 (.0)
    0001 (.1)
    0010 (.2)
    0011 (.3)
    0100 (.4)
    0101 (.5)
    0110 (.6)
    0111 (.7)
    1000 (.8)
    1001 (.9)

Unutar DS1307 gornji nibl nije uvek u potpunosti iskoriscen, jer nemate 99 vec samo 59 sekundi. Na primer za desetine sekundi i minuta unutar gornjeg nibla nemate cifru vecu od .5, a za desetine meseca vece od .1.

U Microchipovim aplication notes imate par konverzionih rutina za BCD format.

AN526
BCD to binary conversion routines
Binary to BCD conversion routines

AN544
8-bit binary to 2 digit BCD conversion
16-bit binary to 5 digit BCD conversion
5-bit BCD to 16-bit binary conversion


P.S. Podforum Elektronika - Mikrokontroleri je prikladniji za pitanja u vezi PIC-a.
Dobrodosli na forum.

[Ovu poruku je menjao Stojan Trifunovic dana 07.03.2009. u 10:33 GMT+1]