16F877A PWM ile 2 Bölge motor kontrolü

Başlatan cmlozel, 17 Haziran 2012, 22:15:55

cmlozel

Merhaba arkadaşlar,

Proje kapsamında LMD18200 ile motor hız ve yön kontrolü yapıyorum. Aşagıdaki kodları Proteus İsis' de denedim çalışıyorç Ancak Pic i programladığımda hiç bir çıkış alamıyorum. Acaba yardımcı olabilir misiniz ?

#include <htc.h>
#define ileri 	RB3
#define geri  	RB2
#define arttir  RB1
#define azalt  	RB0
#define dur   	RB4
void main(void)
{
	char i=0b00000000;
	TRISB=0b11111111;
	TRISC=0x00;
	PORTB=0x00;
	PORTC=0x00;

	PR2     = 24;     
    CCPR1L  = i;  
    CCP1CON = 0b00101111;   
    TMR2    = 0;
    T2CON   = 0b01111000;
	
	for (;;)
	{
	    
	   CCPR1L=i;
	    if (ileri)
	  {
	  	while(ileri);
	  	RC3=1;
	  	if (i==0)
	  	{
	  	i=i+24;
	  	}
	  	
	  }
	  	if (geri)
	  { 
	  	  while(geri);
	  	  RC3=0;
	  	  if (i)
	  	  {
	  	  i=i+24;
	  	  }
	  	  
	  }
		if (arttir)
		{
			while(arttir);
			if (i>0)
			{
				if (i <44 )
				{
		     	i=i+5;
		    	}
			}
		}
		if (azalt)
		{
				while(azalt);
				if (i>0)
				{
					if (i>4)
					{
					i=i-5;
					}
				}
		}
		if (dur)
		{
			while(dur);
			i=0;
		}
	}
}



serhat1990

#1
Ben config ayarlarını göremedim . İlk bakışta gözüme çarpan config ayarlarını yapmadığın isiste değilde reel hayatta sorun yaşatır. . Kullandığın osilatör , code protect , lvp , vs vs. Bir sürü ayar var. Datasheet'ten configration registerina bakarak bu ayarlarını yapmalısın. 4mhz kristal osilatör için cp , dp ,wp devredışı __CONFIG ( 0x2F01 ) Komutu işini görecektir. Datasheet'i incele ayarlarını yap. Kolay gelsin iyi çalışmalar... 

skara1214

tüm sistemi çalıştırmadan önce ilk başta a0 ı 3 sn arayla aç kapa gibi basit bir kod yazıp gerçek devrede çalışıp çalışmadığını görün ondan sonra diğer programı atın böylece problemin koddamı yoksa picdemi olduğunu anlarsınız(kristal çok uzak mümkün olduğunca pice yakın koymaya çalışın)
Herkes ölür ama herkes gerçekten yaşamaz

cmlozel

Alıntı yapılan: serhat1990 - 18 Haziran 2012, 09:27:37
Ben config ayarlarını göremedim . İlk bakışta gözüme çarpan config ayarlarını yapmadığın isiste değilde reel hayatta sorun yaşatır. . Kullandığın osilatör , code protect , lvp , vs vs. Bir sürü ayar var. Datasheet'ten configration registerina bakarak bu ayarlarını yapmalısın. 4mhz kristal osilatör için cp , dp ,wp devredışı __CONFIG ( 0x2F01 ) Komutu işini görecektir. Datasheet'i incele ayarlarını yap. Kolay gelsin iyi çalışmalar...

Hocam merhaba cevabınız için teşekkürler. Hex kodu Pickit128 ile atıyorum. Orda programlarken fuses ayarlarını soruyor. Onu hallettim sanırım. ancak sizin verdiğiniz koduda deneyeyim. Bir sorumda şu olacak, ben PortB den herhangi bir tuşla lojik 1 gonderirken o pine ait tuşa basıldığında led yansın istedim. Ancak gerilim düşümü gibi bir sorunla karşılaştım. Yaklaşık 2.6 V gibi bir gerilim gidiyor PortB ye bu sorun yaratırmı ?

pisayisi

configuration register ayarları doğru girilmemiş isiste çalışıp gerçek devrede çalışmamasının sebebi budur.
Murat

serhat1990

Alıntı yapılan: pisayisi - 18 Haziran 2012, 14:02:00
configuration register ayarları doğru girilmemiş isiste çalışıp gerçek devrede çalışmamasının sebebi budur.

Hocam doğru değil yanlış bile girilmemiş config ayarı yok. Acaba programlayıcısı ayarlıyormu ?

cmlozel

Alıntı yapılan: serhat1990 - 18 Haziran 2012, 14:15:05
Hocam doğru değil yanlış bile girilmemiş config ayarı yok. Acaba programlayıcısı ayarlıyormu ?

Hocam fuses ayarlarını programlayıcıdan yapıyoruz, şimdilik led yakıp söndürdük, galiba programlama tarafı tamam. Ancak pwm i denemedik daha pwm tarafında bi sıkıntı var mı ?

cmlozel

Herşey için şağolun arkadaşlar sürücümüz sorunsuz çalışıyor...

serhat1990

Evet doğru gözüküyor. Şimdi baktım. Kolay gelsin sevindim. Bu arada bu tür soruları yazarken fuses ayarları önemlidir. Yazılımda yapmıyorsanız programlayıcıda yapıldığını bildirmeniz çözümü kolaylaştırır. İyi çalışmalar.. :)

cmlozel

Alıntı yapılan: serhat1990 - 18 Haziran 2012, 17:36:29
Evet doğru gözüküyor. Şimdi baktım. Kolay gelsin sevindim. Bu arada bu tür soruları yazarken fuses ayarları önemlidir. Yazılımda yapmıyorsanız programlayıcıda yapıldığını bildirmeniz çözümü kolaylaştırır. İyi çalışmalar.. :)

Aslında en büyük hatamız osilatörün kondansatorlerindeydi.  15 pF yerine 15 nF kullanmışız, hiç çalıştırmadı. Alakanız için çok teşekkür ederim. İyi çalışmalar