DS 1302 çalışmıyor

Başlatan Recep METE, 17 Temmuz 2013, 14:32:30

Recep METE

Breadboard üzerine kurduğum ve hazır kod kullandığım devrede ds1302 saat devresini çalıştıramadım.Şöyleki Lcd ekranında tarih ve saat bilgisi görünmesine rağmen saat kısmı çalışmamakta ve 00:00:00 şeklinde durmaktadır.Elimde bulunan başka bir ds1302 ile denedim yine aynısı oldu.Ayrıca ds 1302'yi 5 volta verdiğimde ekrandan görüntü kayboldu.Sonra  ki denememde görüntüye birşey olmadı.Birara aşırı ısındı.Böyle değişik problemler yaptı.Arkadaşlar acaba neden çalışmamış olabilir.Yardımlarınızı bekliyorum.Herkese hayırlı ramazanlar dilerim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

şemasını eklemen mümkün mü?

besleme girişi konusunda sıkıntı olabilir

Çoğu kişi bu entegrenin backup besleme girişine pil bağlamaya çalışıyor.Bir diyotla evet olabilir. Ama bu entegre aslında süper kondansatör veya şarjlı pil ile kullanılmak üzere tasanlanmış. Yani Vcc1 bacağı üzerine devre normal besleme durumunda iken şarj akımı gelir.

Vcc2 5V beslemesi
Vcc1 3V backup beslemesi

programını kontrol et. Entegrenin sayma bölümü aktifleştirilmiş mi? CH biti olması lazım.
ambar7

Recep METE

Hocam galiba ds1302'nin kütüphanesindeki bacak bağlantısı ile benim hazır olarak kullandığım devrenin ds1302 bacakbağlantıları farklı. Şimdi onları değiştirip denemeyi yeniden yapacağım.İnşallah olur.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Pyrodigy

Persistance is the name of the game in this business....

kimlenbu

Eğer süper kapasitör yerine pil kullandıysan "trickle charger" özelliğinin aktif edilmediğinden emin ol, kodlarını kontrol et. Şarj edilemeyen bir pili şarj etmeye çalışmasın. Bir de nette bazı şemalarda data,clock uçlarına "pull up" dirençler koyuyorlar, gerek yok böyle bir şeye. işlemciye direkt bağlayabilirsin.

Recep METE

Hocam şimdide saat,dakika,ay,yıl,gün bilgileri yerlerinde 165 rakamı çıkıyor.Şöyle ki 165/165/65ZAR     165:165:165 C1  ;derece yazan yerdeC1-2-3.. sırayla değişip duruyor.Şaşırdrm gerçekten.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

NaMcHo

Bende DS1302 ile uygulama yapmaya çalışıyorum, sürekli 0x80 okuyorum saniye bilgisini nedenini henüz çözemedim, CH bitini dikkate almamıştım...

Okuma yaparken kullandığım kod:
uint8_t GetSeconds(){
	uint16_t sayac,bitSend;
	uint8_t command = second | 0x01;	//okuma
	uint8_t sec=0,readBit;
	
	DS1302Enable();
	DataPinConfig(OUT);
	//Komutu yolla
	for(sayac = 0; sayac < 8; sayac++){
		//Komutu yaz
		bitSend = GetBitOfByte(command, sayac);
		if(bitSend == 1)
			DATA_Out_Set;
		else
			DATA_Out_Reset;
		Delay(1680);
		SCLK_Enable;
		Delay(1680);
		if(sayac != 7){
			SCLK_Reset;
			Delay(1680);
		}
	}
	
	DataPinConfig(IN);
	//Bilgi aliniyor
	for(sayac = 0; sayac < 8; sayac++){
		//Saniye bilgisini al
		SCLK_Reset;
		Delay(1680);
		readBit = DATA_Read;
		MakeByteFromBits(&sec,sayac,readBit);			//MakeByteFromBits yap ismini
		Delay(1680);		//tcdd ile tccz arasindaki SCLK'nin off süresi icin
		SCLK_Enable;
		Delay(1680);	//tccz	+ sclk'nin on süresi	
	}
	DS1302Disable();
	return sec;
}




Delay sürelerini ilk denemelerimde datasheetteki Figure-7 ve Figure-8' e göre belirlemiştim şuanda datasheetteki geçikme sürelerinin üzerinde buradaki gecikmeler.

NaMcHo

#7
Şarj ayarlarını yapmadan Vcc1 ve Vcc2'ye aynı voltaj verilince saat sinyali üretilmiyor bu yüzdenden sayma başlamıyor(Kristal bacağını scop'a bağlayarak görebilirsiniz bunu).
-Bunun için Vcc2'ye besleme verin ve Vcc1'i boşta bırakın.
-Ve CH biti 1 olabiliyor yani reset value'su değişken o yüzden CH biti mutlaka 0 yapılmalı.


Saniye registerının CH biti mutlaka 0 olmalı osilatörün aktif edilmesi için(Write Protect biti WP=1 ise bunun 0 yapılması gerekiyor herhangi bir registera yazım yapabilmek için).

        DS1302Enable();
	WriteByte(0x8E);			//WP reg
	WriteByte(0x00);			//Yazma aktif..
	DS1302Disable();
	
	DS1302Enable();
	WriteByte(second);
	WriteByte(0x00);		//CH = 0
	DS1302Disable();
	
	
	while(1){
		saniye = GetSeconds();
		dakika = GetMinutes();
		saat 	 = GetHours();
	}