ds1307 ye yazmak

Başlatan gogoce, 16 Aralık 2011, 15:42:47

gogoce

selamlar arkadaşlar forumda ve protonda yeniyim.

ds1307 ile ilgili olarak forumlarda çeşitli bilgilere ulaştım fakat anlıyamadığım yer oldu . Saat ayarı yapmak için çevrim tablosu oluşturamadım bu konuda bana yardımcı olabilirmisiniz acaba

saygılar




Cls
Print At 1 , 1 ,"          SAAT TARIH AYARLAMA                    "
Print At 2,16,"SAAT:",Dec SAATT,
If ART=1 Then SAATT=SAATT+1
If EKS=1 Then SAATT=SAATT-1
If SAATT>23 And ART=1 Then SAATT=00
If SAATT=0 And EKS=1 Then SAATT=23
DelayMS 300
If ENT = 1 Then GoTo AYAR1
GoTo AYA
AYAR1:
DelayMS 300
Cls
Print At 1 , 1 ,"          SAAT TARIH AYARLAMA                    "
Print At 2,16,"DAKIKA :",Dec DAKIKAA,
If ART=1 Then DAKIKAA=DAKIKAA+1
If EKS=1 Then DAKIKAA=DAKIKAA-1
If DAKIKAA>59 And ART=1 Then DAKIKAA=00
If DAKIKAA=0 And EKS=1 Then DAKIKAA=59
DelayMS 300
If ENT = 1 Then AYAR2
GoTo AYAR1

AYAR2:
DelayMS 300
Cls
Print At 1 , 1 ,"          SAAT TARIH AYARLAMA                    "
Print At 2,16,"GUN :",Dec GUNX,
If ART=1 Then GUNX=GUNX+1
If EKS=1 Then GUNX=GUNX-1
If GUNX>7 And ART=1 Then GUNX=00
If GUNX=0 And EKS=1 Then GUNX=7
DelayMS 300
If ENT = 1 Then AYAR3
GoTo AYAR2

AYAR3:
Cls
Print At 1 , 1 ,"          SAAT TARIH AYARLAMA                    "
Print At 2,16,"AY :",Dec AYY,
If ART=1 Then AYY=AYY+1
If EKS=1 Then AYY=AYY-1
If AYY>12 And ART=1 Then AYY=00
If AYY=0 And EKS=1 Then AYY=12
DelayMS 300
If ENT = 1 Then AYAR4
GoTo AYAR3

AYAR4:
Cls
Print At 1 , 1 ,"          SAAT TARIH AYARLAMA                    "
Print At 2,16,"YIL :",Dec YILL,
If ART=1 Then YILL=YILL+1
If EKS=1 Then YILL=YILL-1
If YILL>99 And ART=1 Then YILL=00
If YILL=0 And EKS=1 Then YILL=99
DelayMS 300
If ENT = 1 Then KAYDET
GoTo AYAR4

KAYDET:
I2COUT sda, scl, $D0 , $00 , [ SANIYE, DAKIKA, SAAT, GUNADI, GUN, AY, YIL ]
DelayMS 200
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

#1
Data sheet de DS1307 nin register adres tablosu ile bu registerlerin kullanım şekli detaylı olarak gösterilmiştir.
Aşağıdaki linkte ise konu tartışılmış idi. Forumda DS1307 diye aratsanız görecektiniz.

http://etepic.com/index.php?topic=113.msg938#msg938

Ben yinede basit bir mantık açıklaması yapmaya çalışayım.

Saniye registerine saniye bilgisi şöyle yazılır.
Sağdan sola doğru ilk 4 bit saniye değerinin birler basamağını tutar.
Sonraki 3 bit ise onlar basmağını tutar. Örnekle açıklayayım.
Saniye değerimiz 38 olsun. Bu sayıyı saniye değeri olarak DS1307 ye yazmak isteyelim.
Birler basmağıdna 8 sayısı yer alıyor . Binary karşılığ (4 bit olarak) %1000 şeklindedir.
Onlar basmağında ise 3 sayısı yer alıyor. Bununda 3 bit olarak binary karşılığı  %011 şeklindedir.
O halde SN registerinin değeri %0 011 1000 yada %00111000 şeklinde olmalıdır.
Bunu basic komutları ile yapmanın yolu ise;
Birler=SN Dig 0
Onlar=SN Dig 1
SN_YAZILAN=(Onlar<<4)+Birler  şeklindedir. Bu komut Onlar değerini 4 bit sola kaydırarak olması gereken yere getirir ve buna birler değerini ekleyerek sayıyı istediğimiz formata getirir.

Okuma yapılırken de tersini yapmamız gerekecektir.
DS1307 den okunan SN değeri %00111000 sayısı olsun Bunu ekranda gösterilebilir sn değerine çevirmek için;
Birler=Okunan & %00001111   (Birler=%00001000 oldu yani 8)
Onlar=(Okunan & %01110000) >> 4  (Onlar=%00000011 oldu yani 3)
SN=onlar*10+birler yani Birler=3*10+8=38 olarak elde edilmiş oldu.

Dİğer registerlerde benzer şekilde yerleştirilmişlerdir. Bazılarında ufak farklılıklar vardır onalrıda siz keşfedin bakalım.

Ete

Powered by EzPortal