ps/2 klavye okuma

Başlatan spooner, 17 Şubat 2007, 12:43:57

spooner

arkadaşlar picbasic pro ile ps2 klavyeden den nasıl veri okuyup lcdye yazdırabilirim ufak bir program örneği veya link varmı bildiğiniz

teknikelektronikci

lütven forumda bir artma yapabilirmisiniz üst tarafta arama kismi var ordan ps/2 yazin lcd ye gösteren örnege kadar hepsi varr
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

spooner

ustam arattım ama sadece asm olanını buldum eğer sen bana biraz daha yardımcı olursan sevinirim

teknikelektronikci

1-)https://www.picproje.org/index.php/topic,11967&highlight=klavye

burda klavye mantigi var hazir klayeden girilen lcd de gösteren programda vardi ama henüz bulamadim bulunca koyarim ama eger imkaniniz varsa kodunu kendiniz yazin kolay gelsin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

armys2000

Uzun Zaman önce bende uğraşmıştım. O zamanlar pbp de yazdığım bir kod var. Eksik ve hataları olabilir. Size belki bir fikir verebilir.

INCLUDE "modedefs.bas"
  pc_tx VAR PORTA.0
 pc_rx VAR PORTA.1
 pcbaud CON 16468
 led VAR PORTB.7
 kbdclock VAR BYTE
 sayici VAR BYTE
 i VAR BYTE
 kbdcnt VAR BYTE
 kbd VAR BYTE
 isrtmp1 VAR BYTE
 w_temp VAR BYTE
stopbit VAR BYTE
kbdcopy VAR BYTE
 ilk VAR BYTE

startbit VAR BYTE
bitcnt VAR BYTE 
verisay VAR BYTE
 bir VAR BYTE
 iki VAR BYTE
 uc VAR BYTE
 cpslck VAR BYTE
 shift VAR BYTE
 altgr VAR BYTE
 
 TRISB=%00000011
 ilk=0
kbdcnt=0
verisay=0
cpslck=0
shift=0
altgr=0
klv_test:IF PORTB.0=0 Then
         GoSub kesme
         IF kbd=$AA Then
         SerOut2 pc_tx,pcbaud,["KEYBOARD BAGLANDI",13,10]
         
         Pause 40
         GoTo bas
         EndIF
         EndIF
         GoTo klv_test  


bas:IF PORTB.0=0 Then
    GoTo islem
    Else
    GoTo bas
    EndIF 

'islem: GoSub kesme
       'IF (kbd=$E0) AND (bitcnt=10) Then
       'GoSub kesme
       'IF kbd=$F0 Then
       'Pause 40
       'GoTo islem
       'Else
         'SerOut2 PORTB.6,32852,[HEX2 kbdcopy,"  ","kesme",13,10]
       'SerOut2 PORTB.6,32852,[#kbdcopy,"  ","copy"]
       'PORTD=kbd
       'Pause 40
       'GoTo bas
       'EndIF
       'EndIF 
       'IF kbd=$F0 Then
       'Pause 40
       'GoTo bas
       'Else
       ''SerOut2 PORTB.6,32852,[HEX2 kbd,"  ",13,10]
       'SerOut2 PORTB.6,32852,[#kbd,"  ",kbd,"  ",HEX4 kbd,"  ",DEC4 kbd,"  ",13,10]
       'PORTD=kbd
       'Pause 40
       'EndIF
'GoTo bas
islem:GoSub kesme
      IF (kbd=$14) AND (bitcnt=10) Then GoTo program
      GoTo islem

program:IF (kbd=$F0) AND (bitcnt=10) Then
        Pause 20
        GoSub kesme
        IF (kbd=$F0) AND (bitcnt=10) Then
        shift=0
        altgr=0
        Pause 20
        GoTo dongu
        EndIF
        EndIF
        
        IF (kbd=$E0) AND (bitcnt=10) Then
        GoSub kesme
        IF (kbd=$11) AND (bitcnt=10) Then
        altgr=1
        EndIF
        EndIF
        
        
        IF (kbd=$12) OR (kbd=$59) AND (bitcnt=10) Then
        shift=1
        EndIF
             
        IF (kbd=$58) AND (bitcnt=10) Then
        IF cpslck=0 Then
        cpslck=1
        Else        
        cpslck=0
        EndIF
        EndIF
        
           
        GoSub dec_convert
        GoSub goster
         

dongu:IF PORTB.0=0 Then
      GoSub kesme
      GoTo program
      Else
      GoTo dongu
      EndIF
      
        

dec_convert:bir= kbd DIG 0
            iki= kbd DIG 1
            uc=  kbd DIG 2
            LookDown bir,["0123456789ABCDEF"],bir
            LookDown iki,["0123456789ABCDEF"],iki
            LookDown uc,["0123456789ABCDEF"],uc
            iki=iki*10
            kbd=bir+iki+uc
            Return
  
goster: IF (kbd=$58) OR (kbd=$59) OR (kbd=$12) OR (kbd=$14)OR (kbd=$11)OR (kbd=$F0) Then
        Pause 20
        GoTo dongu
        Else
        
        'IF shift=1 Then
        'LookUp kbd,["?????????????????????Q!???ZSAW'??CXDE+^???VFTR%??NBHGY&???MJU/(??oKIO=)??c.LsP????i?g_?????u?;???<"],kbd   
        'GoTo goster1
        'EndIF
                
        'IF altgr=1 Then
        'LookUp kbd,["?????????????????????@1???ZSAW2??CXDE$#???VFTR5??NBHGY6???MJU{[??oKIO}]??c.LsP\???i?g-?????u?`???<"],kbd
        'GoTo goster1
        'EndIF

        'IF cpslck=0 Then
        'LookUp kbd,["?????????????????????q1???zsaw2??cxde43???vftr5??nbhgy6???mju78??okio09??c.lsp*???i?g-?????u?,???<"],kbd
        'GoTo goster1
        'EndIF
        
        'IF cpslck=1 Then
        'LookUp kbd,["?????????????????????Q1???ZSAW2??CXDE43???VFTR5??NBHGY6???MJU78??oKIO09??c.LsP*???i?g-?????u?,???<"],kbd
        'GoTo goster1
        'EndIF
        LookUp kbd,["Q1?ZSAW2??CXDE43VF<"],kbd

goster1:SerOut2 pc_tx,pcbaud,[kbd,#kbd]
		
        Pause 20
        EndIF
        GoTo dongu
 
      
kesme:bitcnt=0
      IF PORTB.1=1 Then
      GoTo kesme
      Else
      IF PORTB.1=0 Then
      startbit=0
      GoTo bekle_high0
      Else
      startbit=1
      GoTo kesme
      EndIF
      EndIF

bekle_high0:IF PORTB.0=0 Then
            GoTo bekle_high0
            Else
            GoTo bekle_low0
            EndIF
bekle_low0:IF PORTB.0=1 Then
           GoTo bekle_low0
           Else
           IF PORTB.1=0 Then
           kbd.0=0
           Else
           kbd.0=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high1:IF PORTB.0=0 Then
            GoTo bekle_high1
            Else
            GoTo bekle_low1
            EndIF
bekle_low1:IF PORTB.0=1 Then
           GoTo bekle_low1
           Else
           IF PORTB.1=0 Then
           kbd.1=0
           Else
           kbd.1=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high2:IF PORTB.0=0 Then
            GoTo bekle_high2
            Else
            GoTo bekle_low2
            EndIF
bekle_low2:IF PORTB.0=1 Then
           GoTo bekle_low2
           Else
           IF PORTB.1=0 Then
           kbd.2=0
           Else
           kbd.2=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high3:IF PORTB.0=0 Then
            GoTo bekle_high3
            Else
            GoTo bekle_low3
            EndIF
bekle_low3:IF PORTB.0=1 Then
           GoTo bekle_low3
           Else
           IF PORTB.1=0 Then
           kbd.3=0
           Else
           kbd.3=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high4:IF PORTB.0=0 Then
            GoTo bekle_high4
            Else
            GoTo bekle_low4
            EndIF
bekle_low4:IF PORTB.0=1 Then
           GoTo bekle_low4
           Else
           IF PORTB.1=0 Then
           kbd.4=0
           Else
           kbd.4=1
           EndIF
           bitcnt=bitcnt+1
           EndIF
           
bekle_high5:IF PORTB.0=0 Then
            GoTo bekle_high5
            Else
            GoTo bekle_low5
            EndIF
bekle_low5:IF PORTB.0=1 Then
           GoTo bekle_low5
           Else
           IF PORTB.1=0 Then
           kbd.5=0
           Else
           kbd.5=1
           EndIF
           bitcnt=bitcnt+1
           EndIF
           
bekle_high6:IF PORTB.0=0 Then
            GoTo bekle_high6
            Else
            GoTo bekle_low6
            EndIF
bekle_low6:IF PORTB.0=1 Then
           GoTo bekle_low6
           Else
           IF PORTB.1=0 Then
           kbd.6=0
           Else
           kbd.6=1
           EndIF
           bitcnt=bitcnt+1
           EndIF
           
bekle_high7:IF PORTB.0=0 Then
            GoTo bekle_high7
            Else
            GoTo bekle_low7
            EndIF  
bekle_low7:IF PORTB.0=1 Then
           GoTo bekle_low7
           Else
           IF PORTB.1=0 Then
           kbd.7=0
           Else
           kbd.7=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high8:IF PORTB.0=0 Then
            GoTo bekle_high8
            Else
            GoTo bekle_low8
            EndIF
bekle_low8:IF PORTB.0=1 Then
           GoTo bekle_low8
           Else
           IF PORTB.1=0 Then
           sayici.0=0
           Else
           sayici.0=1
           EndIF
           bitcnt=bitcnt+1
           EndIF

bekle_high9:IF PORTB.0=0 Then
            GoTo bekle_high9
            Else
            GoTo bekle_low9
            EndIF
bekle_low9:IF PORTB.0=1 Then
           GoTo bekle_low9
           Else
           IF PORTB.1=0 Then
           stopbit=0
           Else
           stopbit=1
           EndIF
           bitcnt=bitcnt+1
           IF bitcnt=10 Then
           verisay=verisay+1 
           EndIF 
           EndIF 

        



 Return
   End
   
   
    


bir de aşağıda ki depo da klavye ile ilgili bir doküman var çalışma mantığı tuş kodları vs var b dokümanları bir incele . Benim yazdığım da basit bir yaklaşımla yağpılmış shift in kullanabilirsin. Bol Şans

http://rapidshare.com/files/12862081/kbd_spec.pdf.html
http://rapidshare.com/files/12862083/Keyboard_V1xx.pdf.html

teknikelektronikci

iste lcd de klavye karakterlerini göszrene program

https://www.picproje.org/index.php/topic,4607&highlight=lcd

mhk hocamiza tesekürler
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Elektron74

Arkadaşlar mhk hocamızın verdiği bu programı çalıştıran var mı? Ben denedim çalıştıramadım.  Programın başındaki "PC AT Klavye" ,"Deneme programi" gibi yazılar LCD gönderiliyor . Bunları LCD de görüyorum. Daha sonra bu yazılar kayboluyor. Fakat klavyeden her hangi bir tuşa bastığımda LCD de hiç bir karekter göremiyorum. Donanımda mı hata yapıyorum anlamadım. :(  Dikkat etmem gereken her hangi bir husus varmı arkadaşlar. Lütfen yardım. Saygılar...
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

teknikelektronikci

bunu gereck hayata ;) yani borad üzerinde filanmi denediniz
ben de daha önce bi klavyeli devre yapmistim hazir kodlarla donanim ollarak hata yapmisim gerekli pinlere dikat edin derim pull-up direncleri fila vardi onlari taktinizmi?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Elektron74

@teknikelektronikci
 Hocam teşekkürler. Data ve clk uçlarındaki pull up  dirençlerini takmayı unutmuşum. Bu dirençleri taktıkdan sonra çalıştı. Fakat bu durumda da sanırım yazılım hatası var. Klavyeden bir harfe basıyorsunuz başka bir harf LCD gözüküyor.  Malesef problemin birini çözüyoruz biri başlıyor.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

teknikelektronikci

bu durum klavyeden klavyeye degisior olabilirmi acaba f  ya da q klavye ya da kararsizlikmi var acaba problem bütün karakterlerdemi farkli gösterior yoksa bir kacindami ?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Elektron74

Hayır. Verilen bu program  Q klavye için yazılmış zaten. Bende Q klavye kullanıyorum. Fakat tüm karekterler hatalı çıkıyor. Bazı tuşlar hiç karekter üretmeyip boşluk oluşturuyor.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

teknikelektronikci

üsradimiz demiski

Alıntı Yapmhk hocam, kod ları tag içine aldım bir daha kontrol edin bozulmuş olmasın, teşekkürler

dedigi gibi bozulmus olabilir siz en iyisi mhk hocama ulasin kolay gelsin

birde
Alıntı YapKullanılan mikro 16 F877 20 Mhz

kristaliniz 20 Mhz mi ? 20 Mhz ise pic buna uyumlumu bazilari 4 mhz e kadar destekler bu picin üzerinde yazar
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!