PIC12F629 2. pinini giriş olarak kullanmak istiyorum ?

Başlatan handybest06, 16 Eylül 2012, 10:41:22

handybest06

PIC12F629  2. pinini giriş olarak kullanmak istiyorum.Pull-up devresini kurdum ama pin lojik 1 seviyesine çıktıktan sonra tekrar lojik 0 a geçmiyor.Sorun nerde acaba bulamadım ?



#include <htc.h>
#include "delay.h"

__CONFIG(FOSC_INTRCIO &WDTE_OFF&PWRTE_OFF&MCLRE_OFF&BOREN_OFF&CP_OFF&CPD_OFF  );

#define Clock GPIO0 //74LS595 Clk giriş
#define DataIO GPIO1 //74LS595 Data giriş
#define Enable GPIO2 //74LS595 Enable giriş
const unsigned char segment[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
const unsigned char segment2[]={0x00,0x18,0x3C,0x7E,0xFF};
const unsigned char segment3[]={0x00,0x81,0xC3,0xE7,0xFF};

const unsigned char segment4[]={0x00,0x80,0x40,0x20,0x10
								,0x08,0x04,0x02,0x01,0x81
								,0x41,0x21,0x11,0x09,0x05
								,0x03, 0x83,0x43,0x23,0x13
								,0x0B,0x07, 0x87,0x47,0x27
								,0x17,0x0F, 0x8F,0x4F,0x2F
								,0x1F, 0x9F,0x5F,0x3F,0xBF
								,0x7F,0xFF};
void three_wire_control(unsigned char temp) // 3-Wire kütüphanesi
{
char i;
Enable=0;
for(i=0;i<8;i++)
{
Clock=0;
if((temp<<i)&0x80)
DataIO=1;
else
DataIO=0;
Clock=1;
}
Enable=1;
}

void main(void)
{
	CMCON=0x07;
	TRISIO=0b00010000;
	GPIO=0x00;
	int i=0,j=7,k=0,l=0;
	int sayac=0;
	for(;;)
	{
		if(GPIO5==1)
		{
			DelayMs(5);
			while(GPIO5==0);
			sayac++;
			if(sayac==5)
				sayac=0;
		}
		if(sayac==0)	
		{
		three_wire_control(segment[i]); // Seven segment
		DelayMs(250); // bilgisi gönderiliyor
		i++;
		if(i>7)
		i=0;
		}
		
		if(sayac==1)
		{
			three_wire_control(segment[j]); // Seven segment
			DelayMs(250); // bilgisi gönderiliyor
			j--;
			if(0>j)
			j=7;
		}
		if(sayac==2)
		{
			three_wire_control(segment2[k]); // Seven segment
			DelayMs(250); // bilgisi gönderiliyor
			k++;
			if(k>4)
			k=0;	
		}

		if(sayac==3)
		{
			three_wire_control(segment3[k]); // Seven segment
			DelayMs(250); // bilgisi gönderiliyor
			k++;
			if(k>4)
			k=0;	
		}
		if(sayac == 4)
		{
			three_wire_control(segment4[l]); // Seven segment
			DelayMs(250); // bilgisi gönderiliyor
			l++;
			if(l>36)
			l=0;		
		}	
	}	

}

X-Fi

butonu direncin olduğu yere tak direnci çıkart devreden.

main içindeki şu yerleri yazdığım gibi değiştir çalışacaktır.

    CMCON=0x07;
    TRISIO=0b00100000;
    WPU   =0b00100000;
    GPIO=0x00;



if(!GPIO5)
        {
            DelayMs(5);
            while(GPIO5);
            sayac++;
            if(sayac==5)
                sayac=0;
        }
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

serhat1990

Ayrıca butonu taktığın pini kendi yazılımında çıkış olarak tanımlamışsın . GPIO.4'ü giriş olarak tanımlamışsın ...

handybest06

Alıntı yapılan: X-Fi - 16 Eylül 2012, 10:55:17
butonu direncin olduğu yere tak direnci çıkart devreden.

main içindeki şu yerleri yazdığım gibi değiştir çalışacaktır.

    CMCON=0x07;
    TRISIO=0b00100000;
    WPU   =0b00100000;
    GPIO=0x00;



if(!GPIO5)
        {
            DelayMs(5);
            while(GPIO5);
            sayac++;
            if(sayac==5)
                sayac=0;
        }


Dediğinizi yaptım ama yine değişiklik yok.Sanırsam kararsız gösteriyor.



void main(void)
{
    CMCON=0x07;
    TRISIO=0b00100000;
    WPU   =0b00100000;
	int i=0,j=7,k=0,l=0;
	int sayac=0;
	for(;;)
	{
		if(!GPIO5)
        {
            DelayMs(5);
            while(GPIO5);
            sayac++;
            if(sayac==5)
                sayac=0;
        }

X-Fi

kurulum satırına şunu da ekleyip deneyin güzümüzden kaçmış.

OPTION = 0x0;

http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

handybest06

Kütüphanede baktım OPTION yok OPTION_REG var onu yazdım sorun çözüldü.Çok teşekkürler.