ds 1302 ile haberleşme...

Başlatan hades, 28 Aralık 2005, 20:21:20

hades

Herkese selamlar...

82C55 üzerinden DS1302 kullanan bir RTC devresi yaptım. CPU olarak 6502 kullanıyorum. Devrenin, multiplex taramalı çalışan 4 displayli bir gösterge devresi var. 82C55'in A Portunu segment çıkışları olarak kullanıyorum. Arada 74HC244 var. Port B boşta. Port C'nin 0,1 ve 2 numaraları bitleri boşta. 3.biti DS1302 için SDA, 4. biti /SCLK, 5.biti /RST için kullanılıyor. Bit 6 ve Bit 7 ise 74LS139 üzerinden Dispayleri sürmek için kullanılıyor.
Devrenin display kısmını basit bir rutinle test ettim. İstediğim displayde istediğim datayı görebiliyorum. Yani display sürme rutini sağlam.
Ama RTC registerlerini okuyup kontrol ettiğimde hep 0 değerini görüyorum. Acaba okuma işleminde bir hatamı yapıyorum bilemiyorum. İngilizcem yetersiz olduğu için datasheette yazılanları tam anlayamıyorum.

Aklıma gelen ilk olasılık kristalin arızalı olması nedeniyle RTC'nin çalışmaması.

Daha önce bu entegreyi kullanan varsa bana okuma(ve yazma) mantığı hakkında yardımcı olabilirmisiniz. Yani önce şu hazırlık işlemlerini yap, sonra bir bit oku, işlem yap vs... (Örnek kod olarak pic olabilir. Fazla kullanmamış olsamda pic komutlarını kabaca biliyorum)
Şimdiden teşekkürler.

CaFFeiNe

DS1302_SaatOku:
    CE = 1
    Shout IO, SCLK, LSBFIRST, [$bf]
    Shin IO, SCLK, LSBPRE, [Saniye, Dakika, Saat, Gun, Ay, Bos, Yil, Bos]
    CE = 0
    Return


böyle bir kod versem faydası olurmu acaba? (protonda yazılmıştır)
CE, IO, SCLK ds1302 nin bacaklarına bağlanan pinler için tanımlanan isimler

6502 ile neden uğraşıyorsun merak ediyorum? envai çeşit mikrokontrolörler varken

stlg

Sevgili hades
Arkadasım asgıdaki adreste bununla ilgili bazı bilgiler var umarım işini gorur kolay gelsin


http://www.bilesim.com.tr/tr/index.nsf?lf=/tr/leftbaryayincilik.html&rf=http://www.bilesim.com.tr/mistoportal/showmakale.nsf?xd=3473.xml

       ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

teknikelektronikci

sayın stlg verdiğiniz linkteki devre çok güzel de ama ben hexini bulamadım acaba sizde varmı ya da bulabilirmiyim teşekürler
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Lütfi AYYILDIZ

Belki işine yarar. PBP kodları
DS1302 iki ile saat.

Include "MODEDEFS.BAS" 
Define LCD_DREG PORTD 
Define LCD_DBIT 4 
Define LCD_RSREG PORTb 
Define LCD_RSBIT 0 
Define LCD_EREG PORTb 
Define LCD_EBIT 1 
RST var PORTb.7 
IO var PORTb.6 
SCLK var PORTb.5 
rtcyil var byte 
rtcgun var byte 
rtcay var byte 
rtctarih var byte 
rtcsaat var byte 
rtcdak var byte 
rtcsn var byte 
rtccontrol var byte 


Low RST ' Reset RTC 
Low SCLK 
Shiftout IO, SCLK, MSBFIRST, [%10000000, 0] 


Pause 100 

Gosub SAATAYAR ' Saati ayarla

Goto BASLA ' BASLA'ya git 


SAATAYAR: 'buraya kendi değerlerini vermelisin

rtcyil = $05 
rtcgun = $29 
rtcay = $12 
rtctarih = $0A 
rtcsaat = $0E 
rtcdak = $14 
rtcsn = $00 
RST = 1 '  transfer için hazır

' Şimdi yaz
Shiftout IO, SCLK, LSBFIRST, [%10001110, 0] 

RST = 0 ' Reset RTC 

RST = 1 ' transfer için hazır

' tüm 8 adet RTC registerlerini burst mod'da yaz 
Shiftout IO, SCLK, LSBFIRST, [%10111110, rtcsn, rtcdak, rtcsaat, rtctarih, rtcay, rtcgun, rtcyil, 0] 

RST = 0 ' Reset RTC 
Return 

gettime: 
RST = 1 ' transfer için hazır

Shiftout IO, SCLK, LSBFIRST, [%10111111] ' Tüm RTC registerlerini oku
Shiftin IO, SCLK, LSBPRE, [rtcsn, rtcdak, rtcsaat, rtctarih, rtcay, rtcgun, rtcyil, rtccontrol] 

RST = 0 ' Reset RTC 
Return 

BASLA: 

gosub gettime 
lcdout $fe, 1, hex rtcay, "/", hex rtctarih, "/" , hex rtcyil 
lcdout $fe,$c0 
Lcdout hex rtcsaat, ":", hex rtcdak, ":", hex rtcsn 
pause 1000 
Goto BASLA 

End


Not: Arkadaşlar lütfen code tagını kullanalım...

hades

Yardımlarınız için teşekkürler. İlk fırsatta deneyeceğim.

stlg

Sevgili teknikelektronikci
Arkadasım bu sema ile ilgili hex kodları bendede yok ben sadece rtcc ile ilgili bilgi var diye gondermiştim bu sitede degişik sayılardada cok guzel bilgiler var bir bakın derim kolay gelsin

       ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

teknikelektronikci

Tamam oldu teşekürler sayın stlg ilginiz için saygılar
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

teketek

Arkadaşlar benimde şöyle bir problemim var;
DS1302'den aldığım kodları bu şekilde ekrana verdiğimde bir problem çıkmıyor,

LCDOUT $FE,$C0,HEX2 SAAT,":", HEX2 DAKIKA :RETURN


saat/zaman bilgisini bu şekilde (HEX2) ekrana vermenin bi sakıncası yok ama iş saate ayar yapmaya gelince bu HEX2 yüzünden saat artırımı ya da azaltımı çok mantıksız bir hale geliyor.Şöyle ki eğer bilgisayar saati "10" ise ben ekranda 16 görüyorum.Ama bu olay sadece ayar aşamasında gerçekleşiyor saatin normal çalışmasında bi problem yok.

Ds1302 ile haberleşmede bu rutini kullanıyorum;
SETTIME: 
        high RST  
        SHIFTOUT IO, SCLK, LSBFIRST, [$8E, 0] 
        SHIFTOUT IO, SCLK, LSBFIRST, [$BE, SANIYE, DAKIKA, SAAT,GUN , AY, GUNADI, YIL, 0] 
        low RST 
        PAUSE 100 

GETTIME: 
        High RST 
        SHIFTOUT IO, SCLK, LSBFIRST, [$BF ]  
        SHIFTIN IO, SCLK, LSBPRE, [SANIYE, DAKIKA, SAAT,GUN , AY, GUNADI, YIL, CONTROL] 
        LOW RST        ' RESET RTC 
        RETURN


Bu rutinde DEC-HEX ile bi ayar göremedim?? Sorun bu rutinden mi kaynaklanıyor acaba???
Bilgi fark yaratır..