Tuş takımını mux ile nasıl tarayabilirim

Başlatan kaansancakdar, 24 Ekim 2012, 21:31:45

kaansancakdar

Arkadaşlar hepinize kolay gelsin

Elimde 16f877a ve tuş takımı var. Bu tuş takımını mux ile taramak istiyorum. Satırlar için bir sütunlar için bir mux kullanarak nasıl tarayabilirim acaba? Tarama sonuçlarınıda led matrixe göndermem gerek. Aynı anda birden fazla tuşa basmak sorun değil. Yani aynı anda hangi tuşlara basıldıysa led matrixte o ledler yanacak.

polleme

74C922 klavye tarayıcı entegre kullanmayı düşündünüz mü? Klavyeyi bağlıyorsunuz, basılan tuşa ilişkin kodu 4 bit olarak çıkış portlarından veriyor. Bir mikroişlemci kullanmaya da gerek yok, kullanım çok basit. İnceleyin derim.

ByTEK

Aşağıdaki gibi bir bağlantı şekli ile keypad için tek pinde kullanabilirsiniz.




polleme

Yukarıdaki devre de uygun. Benim söylediğim matıkta 74C922 kullanırsanız 4 bitlik bilgiyi binary-decimal veya binary-hexadecimal çevirici entegre ile göstergeye bağlayıp her tuşa basıldığında bir LED yanmasını sağlayabilirsiniz.

Hangi topoloji uygunsa onu kullanın.


vatandas30

3L3CTRO
senin verdiğin bağlantıda picin programı hakkında bir fikir verebilir misin. analog girişi kullanmışsın. eğer bu şekilde olursa beni de keypadlerin tuşlarını ayırmaktan kurtarmış olursun. :) saygılar

polleme

Burada mantık dirençlerle yapılan bir gerilim bölücüye dayanıyor. Dirençlerle yapılan bağlantılarda her klavye ucu farklı iki direnç arasına bağlanıyor. Dirençlerin en son iki ucuna da GND ve 5V bağlanıyor. Bundan sonra klavyede bir tuşa basılınca gerilim bölücü üzerinden PIC'e bir voltaj gidiyor. Gerilim bölücü sayesinde her tuşun oluşturacağı voltaj farklı olduğundan bu voltaj PIC ADC ile ölçülerek hangi tuşa basıldığına karar veriliyor. Tek pin yeterli.

kaansancakdar

ilginize çok teşekkür ederim arkadaşlar. fakat elimde 4x3lük yada 4x4 lük tuş takımı yok. belki 8x8 belki 16x16 olacak. ozamanda klavye entegresi iş görürmü?

polleme

8x8 olsa bile uygun bağlantı ile aynı işlem yapılabilir, ancak 4 adet entegre gerekir.

ByTEK

Alıntı yapılan: vatandas30 - 25 Ekim 2012, 23:44:21
3L3CTRO
senin verdiğin bağlantıda picin programı hakkında bir fikir verebilir misin. analog girişi kullanmışsın. eğer bu şekilde olursa beni de keypadlerin tuşlarını ayırmaktan kurtarmış olursun. :) saygılar

Arkadaş gerekli açıklamayı yapmış. Extra kaynak olması için aşağıdaki linkleri inceleyebilirsiniz.

https://www.picproje.org/index.php?topic=18891.0
http://elektrobilim.org/forum/pic-uygulamalari/6856-tek-pin-ile-tus-takimi-kontrolu.html
http://www.fxdev.org/3-wire-keypad/

tacettin



#include <16f877.h>
#device adc=10
#fuses HS,NOWDT,PUT,NOPROTECT
#use delay(clock=20MHz)
#include <flex_lcd.c>


float adc,adc_old;

void main()
{
set_tris_a(0xff);
set_tris_b(0x00);
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
lcd_init();
output_b(0);

while(1)
   {
      adc=read_adc();
      delay_ms(3);
      if(adc != adc_old)
         {
           printf(LCD_PUTC, "\fadc=%f",adc);
           adc_old=adc;
           if(adc==0)  printf(LCD_PUTC, "\ntus=1");
           else if(adc==409)  printf(LCD_PUTC, "\ntus=2");
           else if(adc==540)  printf(LCD_PUTC, "\ntus=3");
           else if(adc==584)  printf(LCD_PUTC, "\ntus=4");           
           else if(adc==682)  printf(LCD_PUTC, "\ntus=5");
           else if(adc==726)  printf(LCD_PUTC, "\ntus=6");
           else if(adc==744)  printf(LCD_PUTC, "\ntus=7");
           else if(adc==787)  printf(LCD_PUTC, "\ntus=8");
           else if(adc==809)  printf(LCD_PUTC, "\ntus=9");
           else if(adc==818)  printf(LCD_PUTC, "\ntus=*");
           else if(adc==855)  printf(LCD_PUTC, "\ntus=#");
           

         
         }
   
   
   }

}