877 ile timer1 kullanılması hakkında yardım.

Başlatan turgutcolak, 19 Ağustos 2006, 13:42:04

turgutcolak

herkese merhaba,
ben bir saat projesi üzerinde çalışıyorum. ne yazıkki uğraşlarım sonucunda tam olarak 1 saniyeyi tutturamadım.timer1 in bitlerini dogru programladı. aslında su an tmr1 çalısıyor fakat duzensiz halde nedenini bilmiyorum. ilk basta yaptıgım hata 32768KHz'lik kristali XT olarak tanıtmamdı daha sonra LP olarak tanıtınca tmr1 çalıstı fakat su anda tam olarak 1 saniye değil .ben size tam olarak ne yaptığımı açıklayayım,eger bana yardımcı olursaniz çok iyi olur çünkü okulum açılana kadar yani 1 ayda bu projeyi tamamlamalıyım.

ilk olarak saniyeyi tutturabildiğimi anlayabilmek için çok karısık olmayan sadece 1 dakika sayabilen bir program yazdım.programı Hi-tech C dili ile yazdım ve dediğim gibi tmr1 kristalini LP olarak tanıttım program aşagıdadır.programda yanlışlık olduğunu sanmıyorum sanırım sırun donanımda mesela 4MHz lik kristal 22pF ile 32768'lik kristal ise 15pF ile topraklandı.bunlarda mı bi sorun var bilmiyorum... yardımlarınızı bekliyorum herkese kolay gelsin...


#include<pic.h>
#include<delay.c>
unsigned char saniye1=0;
unsigned char dakika1=0;
void interrupt kesme(void)
{
	saniye1++;
	TMR1IF=0;
	TMR1L=0x00;
	TMR1H=0x80;
}

main(void)
{
	unsigned char dizi[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
	ADCON0=0x00;
	ADCON1=0x07;
	TRISB=0x00;
	TRISD=0x00;
	TRISC=0x00;
	TMR1ON=1;
	TMR1CS=1;
	T1OSCEN=1;
	TMR1IE=1;
	T1SYNC=1;
	T1CKPS0=0;
	T1CKPS1=0;
	TMR1L=0x00;
	TMR1H=0x80;
	TMR1IF=0;
	PEIE=1;
	ei();

	for(;;)
	{
		if(saniye1==10)
		{
			saniye1=0;
			dakika1++;
			if(dakika1==6)
			{
				dakika1=0;
			}
		}
	PORTD=0x01;
	PORTB=dizi[saniye1];
	DelayMs(3);
	PORTD=0x02;
	PORTB=dizi[dakika1];
	DelayMs(3);
	}
}

proteusta çizdiğim şemayıda ekleyecektim ama olmadı.

rree

C dilini bilmiyorum ama  Basicde Delayms komutu  zaman kesmesini etkiliyordu. Saat projemde Delay komutunu kullanmadım...

zafzaf82

turgutcolak ne kadar ugraşsanda pic ile tam bi sn tutturman mümkün değil. Tam bi sn tutturmak için ya MM5369 yada DS 1302 kullanman gerekiyo
DS1302 yi kullanmanı tavsiye ederim baya iyi. İçinde tarih gün saat dk sn felan otomatik sayıyo. Ayrıca PIC in enerjisi kesilde bile ds1302 saat ilerlemeye devam ediyor.

Kolay gelsin.....
Mikroişlemci bi araçtır, amaç değil.....

arslan74

Microchip'in "PICDEM 2 PLUS Demo Board" incele orada yapılmış bir saat projesi var. Senin istediğin olayı sağlıyor. TMR1 harici kristal ile frekans üretiyorlar.

turgutcolak

sanırım sonunda anladım ki gerçekten ds1307 gibi bir entegre kullanmadan tam olatak 1 sn yi tutturamayacağım.ne kadar uğaşşamda olmuyor.elimde ds1307 var sanırımçalışma mantığı ds1302 ile aynı acaba bu entegreyi önceden kullanmış olan varsa bana 16f877 ye nasıl dahil edeceğimi yani SCL,SDA ve SQW/OUT bacaklarının ne işe yaadığını anlatabili mi?? cevaplarınızı bekliyorum ..herkese klay gelsin.