Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

16f877 ve ds1307 I2c problem

Başlatan safaka123, 19 Eylül 2013, 12:51:47

safaka123

Devrem isiste çalışıyor. devreyi protoboard da çalıştırmak istediğimde tüm program çalışıyor sadece ds1307 çalışmıyor pull up dirençleri tamam  3V pil tamam xtal 2 kez değişti. DS1307 yedek yok şimdilik fakat ilginç gelen bir şey var. okunan değer tümü saat 10:10:10 çıkıyor tarih te 10.10.10 çıkıyor. Ben bunu değiştirmek için I2c komutunu gönderdiğimde yine okurken aynı değerleri alıyorum. xtal çalışmıyorsa bana anlamsız karakterler gelmezmiydi diye düşünüyorum. Acaba başlangıç değeri olarak bu değerler mi set edildi diye düşünüyorum, o zaman doğru okuyorum. Fakat yazma komutu verdiğimde ise yazamıyorum. Xtal çalışmazsa ben pic gibi düşündüğümden karşı taraftan cevap alamam diye düşünüyorum. Yanılıyormuyum.

I2CWrite SDA,SCL,$D0,$07,[%10010000]  SQWE çıkışı 1 hz olsun.
I2CRead SDA, SCL,$D0,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL,TEMP]   Saat okuma komutu
I2CWrite SDA, SCL,$D1,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL]    saat yaz komutu 

Komutlarda hata varmı bakarmısınız. bir de SQWE de 7 bit 1 olacakmı?  isis sorun yaratmıyor ama gerçekte yaratabilirmi.

SCL var PORTc.3
SDA var PORTc.4
TRISC=0

Bunun üzerine scl ve sda yı kullanmak için başka register ayarlamalımıyım. data sheet te şöyle bir bilgi var.

Sspcon,5(SSPEN): MSSP modülü için yetkilendirme bitidir.
SPI modında;SSPEN =1 ise seri port kullanımdadır ve SCK ,SDO, SDI ve SS uçları
kullanılabilir. SSPEN =0 ise seri port işlemleri kullanım dışı bırakılır.
I2C modunda; SSPEN=1 ise seri port işlemleri etkin yapılır ve SDA ve SCL pinleri
kullanılabilir duruma getirilir. SSPEN= 0 ise seri port işlemleri kullanım dışıdır.

Ayarlamam gerekiyorsa Nasıl ayarlamalıyım sizce. Çünkü bu registerde I2C ile ilgili başka ayarlarda var. PIC xtal =4Mhz.


Teşekkürler

ete

I2CWrite SDA, SCL,$D1,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL] 

Bu komutta yer alan $D1 değeri $D0 olması gerekir.
Başka bir hata yok. Değiştirip tekrar deneyin. Saate yazma yapamadığınız için SN registeri 7. biti 1 de kalmıştır ve saat stop konumundadır mutlaka.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

safaka123

'---------------------------------SAAT OKU--------------------------------------
SAATOKU:

    I2CRead SDA, SCL,$D0,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL,TEMP]
         BOS=((sn>>4) & $0F)*10+(SN & $0F):sn=BOS
         BOS=((DAK>>4) & $0F)*10+(DAK & $0F):DAK=BOS
         BOS=((SAAT>>4) & $0F)*10+(Saat & $0F):SAAT=BOS
         BOS=((GUN>>4) & $0F)*10+(GUN & $0F):GUN=BOS
         BOS=((AY>>4) & $0F)*10+(AY & $0F)  :AY=BOS
         BOS=((YIL>>4) & $0F)*10+(YIL & $0F):YIL=BOS
         BOS=((hafgun>>4) & $0F)*10+(hafgun & $0F):hafgun=BOS
temp=hafgun
gosub hafgos

LCDOUT $FE,12

'LCDOUT $FE,2,"Hour:",DEC2 saat,":",DEC2 dak,":",DEC2 sn  'ilk sıra baştan itibaren yazdırıyoruz.
LCDOUT $FE,2,DEC2 saat,":",DEC2 dak,":",DEC2 sn  'ilk sıra baştan itibaren yazdırıyoruz.
'PAUSE 10
'LCDOUT $FE,$c0,"Date:",DEC2 gun,".",DEC2 ay,".20",DEC2 YIL," "  'ilk sıra baştan itibaren yazdırıyoruz.
LCDOUT $FE,$c0,DEC2 gun,".",DEC2 ay,".20",DEC2 YIL," "  'ilk sıra baştan itibaren yazdırıyoruz.
RETURN

ZAMAN_YAZ:
hesap=YIL/4
k=status.0
if k=1 AND AY=2 AND GUN>28 then
GUN=28
ELSE

 if k=0 and ay=2 and gun>28 then 
    gun=29
    else
    endif
endif


        TEMP=(SN DIG 1)<<4+SN DIG 0:SN=TEMP
        TEMP=(DAK DIG 1)<<4+DAK DIG 0:DAK=TEMP
        TEMP=(SAAT DIG 1)<<4+SAAT DIG 0:SAAT=TEMP
        TEMP=(GUN DIG 1)<<4+GUN DIG 0:GUN=TEMP
        TEMP=(AY DIG 1)<<4+AY DIG 0:AY=TEMP
        TEMP=(YIL DIG 1)<<4+YIL DIG 0:YIL=TEMP
        TEMP=(hafgun DIG 1)<<4+hafgun DIG 0:hafgun=TEMP
        I2CWrite SDA, SCL,$D0,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL]
        PAUSE 10 

        return



Saat oku ve yaz bölümleri bunlar. Sizin dediğiniz değişikliği de yaptım maalesef saat I2C komutlarını algılamıyor.

Kaydet işlemini yapmama rağmen saat yine aynı gösteriyor. (10:10:10) Birde program başında sqwe için bir komut gönderimi var.


ete

Gerek 1Hz çıkartılması ve gerekse diğer komutlarda hata yok. Sorun bir başka yerde olmalı.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

safaka123

teşekkürler tek çare ds1307 yi değiştirmek kaldı bağlantıları 3-5 kez kontrol ettim 3 kez xtal değiştirdim. ds yi de 1 hafta sonra alabilirim sonuçlanınca bilgi veririm . iyi çalışmalar.

ete

DS1307 kolay bozulan bir entegre değil .

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

safaka123

yeni ds1307 ile şimdi deneyebildim.
olay şudur.
çalışmayan saat ve kaydetme yapamadığım saat için 3 kez saat entegresi xtal değiştirdim çalışmadı
ds1307 değişti kaydetme başladı. fakat programda sadece sn hariç diğer bilgiler kaydedildiğinden (sadece gerekenler kaydedilsin mantığıyla)   saniye değeri olan dec. 80 sayısı sıfırlanmadığından saat çalışmadı. ( ETE bey uyarmıştı )
programda saniye değeri sıfırlandığından itibaren saat saymaya ve sqwe çıkış vermeye başladı.

Sonuç : DS1307 bozuk çıktı. ( bir yerde okumuştum bazı patates ds1307 ler olabiliyormuş ) sanırım bana gelen onlardan. :)

Yardımlarınız için teşekkürler.