Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Tuş takımı nasıl bağlanır?

Başlatan Recep METE, 23 Mart 2014, 23:54:19

Recep METE

Tuş takımı ile led yakıp söndürmek istiyorum.(Örneğin 1.tuşla ledi yakıp 2. tuşla kapatmak v.b.)Kodları yazdım.isiste simülasyon çok başarılı.Ancak breadboarda kurduğum devrede bir türlü çalıştıramadım.Tuş takımı bağlantısı nasıl olmalı, bu konuda tecrübesi olan arkadaşlar yardımlarınızı bekliyorum.
Ben aşağıdaki resimdeki gibi bağladım.Yapamadım,çalışmadı.
[IMG]http://img493.yukle.tc/thumbs/6646tus_pad_baglanti_bacaklari.JPG[/img]
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Mr.Java

Kodu yazarken satır veya sütünları pull-up mu pull-down mu yaptınız ?

Recep METE

#2
Alıntı yapılan: Fkarizmatik - 24 Mart 2014, 00:13:40
Kodu yazarken satır veya sütünları pull-up mu pull-down mu yaptınız ?

Hocam kodları hazır olarak alıp kullandım.Herhangi bir değişiklik yapmadım.Dediğin olayı nasıl yapmalıyım yardımcı olursanız memnun olurum.Kodları veriyorum;
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(d) //Port yönlendirme komutları C portu için geçerli

#byte   portb=0x06   // B portu "tus" ismine eşitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

char tus=0; // karakter tipinde değişken tanımlanıyor

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çıkışı sıfırlanıyor

   output_high(sat1); // 1. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satır lojik-0 yapılıyor

   output_high(sat2); // 2. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satır lojik-0 yapılıyor

   output_high(sat3); // 3. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satır lojik-0 yapılıyor

   output_high(sat4); // 3. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satır lojik-0 yapılıyor

   return tus; // Fonksiyon "tus" değeri ile geri döner
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı

   set_tris_b(0x00);   // B portu komple çıkış
   set_tris_d(0x0F);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

   output_b(0x00); // İlk anda B portu çıkışı sıfırlanıyor

   while(1)  // Sonsuz döngü
   {
       portb=keypad_oku();  // Basılan tuş değerini B portuna aktar
   }
}
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

polleme

Bu tür devrelerde uçlardan 3 veya 4'ü pull up veya pull down dirençleri ile VCC veya GND'ye bağlanırlar. Geri kalan uçlar ise mikroişlemciye bağlanır. Eğer pull up yapılmışsa bir tuşa basıldığında ilgili pull up yapılan uç lojik 0 seviyesine düşer ve işlemcinin bunu algılamasına dayalı bir kodlama kullanılır. Kodunuzdaki if satırları ile yaptığınız kontrollerde eğer pull up yaptı iseniz o ucun lojik 0 olduğunu, pull down yaptı iseniz lojik 1 olduğunu kontrol etmeniz gerekir. Söylenmek istenen kısaca bu.

sercanblbn




bu kendi yaptığım bir tuş takımıydı.. butonların yanında sütun mu satır mı yazıyor, pic e bağlantısı da mevcut.
İşine yarar umarım kolay gelsin..

Recep METE

Alıntı yapılan: sercanblbn - 24 Mart 2014, 09:44:41


bu kendi yaptığım bir tuş takımıydı.. butonların yanında sütun mu satır mı yazıyor, pic e bağlantısı da mevcut.
İşine yarar umarım kolay gelsin..


Hocam herhalde programı yüklemeyi unuttunuz.Tekrar yükler misiniz? Teşekkür ederim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Recep METE

Olmadı ne yaptıysam olmadı.Çalıştıramadım.Programa( output_d(0x00); // D portu çıkışı sıfırlanıyor

   output_high(sat1); // 1. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20);while(input(sut1)==1); output_high(pin_b7); }
     
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20);while(input(sut2)==1); output_low(pin_b7);}
   )while(input) bile ekledim ama yine olmadı.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

RaMu

Butonları sercanblbn ın eklediği fotodaki gibi bağlayacaksın,
tabi bir sutun daha ekleyebilirsin,
program aynı program, sadece sutun satırları senin programında tanımlı portlara bağlayacaksın.

İsis şemanı, ve foto halini,
gerçek devrenin fotosunu ekle, hata varmı bakalım.

Hazır keypad mi kullanıyorsun, butonlarla kendinmi keypad yaptın?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Recep METE

Hocam islem tamam. Breadboarda devre kurmak cok dikkat istiyor. Breadboard sorunluymus.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

RaMu

Olur öyle, geçmiş olsun, hayırlı olsun.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Recep METE

Alıntı yapılan: RaMu - 25 Mart 2014, 07:06:45
Olur öyle, geçmiş olsun, hayırlı olsun.
Bende bu olay defalarca oluyor. Breadboarda kurdugum devrelrin calismaması beni çok yoruyor. Ama su faydası oluyor, sorunu cozmeye ugrasmak insani cok gelistiriyor.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

sercanblbn

konu başlığı tuş takımı nasıl bağlanır olunca ben de bağlantı şemasını gönderdim sadece :)


#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#byte portb=0x06

#define sutun1 pin_d0
#define sutun2 pin_d1
#define sutun3 pin_d2

#define satir1 pin_d4
#define satir2 pin_d5
#define satir3 pin_d6
#define satir4 pin_d7

char tus=0;

char keypad_oku()
{
   output_d(0x00);

   output_high(satir1);
   if(input(sutun1))
   { delay_ms(20); tus=1;}
   if(input(sutun2))
   { delay_ms(20); tus=2;}
   if(input(sutun3))
   { delay_ms(20); tus=3;}
   output_low(satir1);

   output_high(satir2);
   if(input(sutun1))
   { delay_ms(20); tus=4;}
   if(input(sutun2))
   { delay_ms(20); tus=5;}
   if(input(sutun3))
   { delay_ms(20); tus=6;}
   output_low(satir2);
   
   output_high(satir3);
   if(input(sutun1))
   { delay_ms(20); tus=7;}
   if(input(sutun2))
   { delay_ms(20); tus=8;}
   if(input(sutun3))
   { delay_ms(20); tus=9;}
   output_low(satir3);
   
   output_high(satir4);
   if(input(sutun2))
   { delay_ms(20); tus=0;}
   output_low(satir4);
   
   return tus;
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   set_tris_b(0x00);
   set_tris_c(0x00);
   set_tris_d(0x0F);
   
   output_b(0x00);
   
   while(1)
   {
      portb=keypad_oku();
   }

}

SK

#12
bu kodlara göre tus değerinin binary değerine göre ledler yanacak. ancak benim merak ettiğim biz bunu 4 haneli şifre ile bir çıkışı kontrol etmek istediğimizde nasıl yapacağız. bu kodlara göre işlem yaptığımda sıkıntı çıkıyor çünkü tus değişkeni char olarka tanımladndığı için ASCII kodlarına denk geliyor. prgramın başında int tahmin[4]={0,0,0,0} ve int sifre[4]={1,3,5,7} dizileri tanımladıktan sonra while ın içine de

keypad_oku();
if(tus!=0)
{ tahmin=tus;
i=i++; }
if(tahmin[0]=sifre[0] && tahmin[1]=sifre[1] && tahmin[2]=sifre[2] && tahmin[3]=sifre[3])
output_high(pin_b0);

kodlarını yazıp giriş çıkışlarını da bu algoritmaya göre düzenlediğimde kod çalışmadı. bu konuda yardım edebilirmisiniz?

xoom

int i=0;
keypad_oku();
if(tus!=0) 
{ 
tahmin[i]=tus;
i=i++;
 }
if(tahmin[0]=sifre[0] && tahmin[1]=sifre[1] && tahmin[2]=sifre[2] && tahmin[3]=sifre[3])
output_high(pin_b0);

SK

#14
"xoom" eğer yazdığın gibi int=0; komutunu while ın içinde yazarsak sadece tahmin[0]' a atama yapabiliriz. o yüzden ben keypad_oku fonksiyonuna girmeden önce tanımlaadım ama olmadı. yine atama kısmında hata yapıyorum sanırsam. yazdığım kodun tamamı ve devre şu şekilde

/******************************************************

*******************************************************/
#include <16f877A.h>   

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) 

#use fast_io(b)
#use fast_io(d) 
#use fast_io(c)

#define sut1   pin_c0 
#define sut2   pin_c1 
#define sut3   pin_c2 

#define sat1   pin_b0 
#define sat2   pin_b1 
#define sat3   pin_b2 
#define sat4   pin_b3 


int tus=0; 
int tahmin[4]={0,0,0,0};
int sifre [4]={1,3,5,7};
int i=0;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
tus=0;

output_high(sat1); 
if (input(sut1))  
{ delay_ms(20); tus=1; }
if (input(sut2))   
{ delay_ms(20); tus=2; }
if (input(sut3))
{ delay_ms(20); tus=3; }
output_low(sat1);

output_high(sat2); 
if (input(sut1))  
{ delay_ms(20); tus=4; }
if (input(sut2))
{ delay_ms(20); tus=5; }
if (input(sut3))
{ delay_ms(20); tus=6; }
output_low(sat2);

output_high(sat3);
if (input(sut1))   
{ delay_ms(20); tus=7; }
if (input(sut2))
{ delay_ms(20); tus=8; }
if (input(sut3))
{ delay_ms(20); tus=9; }
output_low(sat3);

output_high(sat4); 
if (input(sut1))   
{ delay_ms(20); tus=0xE; }
if (input(sut2))
{ delay_ms(20); tus=0; }
if (input(sut3))
{ delay_ms(20); tus=0xF; }
output_low(sat4);

return tus; 

}

/********* ANA PROGRAM FONKSÄ°YONU********/

void main ( )
{
setup_psp(PSP_DISABLED);        
setup_spi(SPI_SS_DISABLED);     
setup_timer_1(T1_DISABLED);     
setup_timer_2(T2_DISABLED,0,1); 
setup_adc_ports(NO_ANALOGS);    
setup_adc(ADC_OFF);             

set_tris_d(0x00);
set_tris_b(0x00);   
set_tris_c(0xCF);  

output_b(0x00); 
output_d(0x00);

while(1)
{
tus=keypad_oku();
if(tus!=0)
{tahmin[i]=tus;
i++;}

   if (tahmin[0]==sifre[0] &&  tahmin[1]==sifre[1] &&  tahmin[2]==sifre[2] &&  tahmin[3]==sifre[3] )
   output_high(pin_d0);

}
}

[/i]