PC klavye Serin Komut hatası..

Başlatan boraciner, 29 Haziran 2009, 18:00:32

boraciner

Merhaba ben pc klavyesinden (PS/2) girilen harfi grafik lcd ekranda basmak istiyorum fakat parity bitini ve stop bitini tam ayarlayamadım sanırım çünkü klavyeden 4-5 değişik kod görebiliyorum. Kodları Proton Basic'te yazdım, bir de siz bakarmısınız. Serin komutunu düzeltmem gerekiyor???

bound rate'ini ayarlayamıyorum sanırım??

teşekkürler...

Bu veri gönderilmesindeki protokolde sırasıyla :

1 Start Biti (daima 0)
8 Data biti
1 Parity Biti
1 Stop biti (daima 1), arka arkaya gönderilmektedir.


Include "PROTON18_452.BAS" 
Device 16F877
		WARNINGS = OFF        
 Declare SERIAL_DATA 9
 Declare SERIAL_PARITY ODD    
    Dim B0 As Byte
    Dim xpos As Byte
    Dim ypos As Byte
    Dim OKU As Byte
    Dim ADRS As Word
    Dim TEKRAR As Word    
BASLA:

    Cls
    Print At 2,2,"BEKLENIYOR"
    SerIn PORTB.6,8276,P_ERROR,[B0] '8276--9600 baud çift parýty..../ 84--9600 baud  parýty yok...
    Print At 1,1, #B0
    DelayMS 1000
    
    

GoTo BASLA
    
    
    

   
End
    Include "FONT.INC"
   
   P_ERROR: 
   Cls
Print At 2,2, "Parity Error"
DelayMS 1000
Return

boraciner

cevabınız için teşekkürler fakat ben clock kullanmadan algılama yapıyorum yani serin kısmında tuşa basılması için bekliyor. clock bağlayıp onun için bir interrupt kullanmıyorum

Tagli

Clock bağlanması gerekiyor çünkü klavyelerin hızı standart değil, sadece hangi aralıkta olduğu biliniyor (aralık şimdi aklımda değil, internetten araştırılıp bulunabilir). Ama kullanılacak klavye belliyse ve değişmeyecekse ölçüm yapılarak hızı belirlenebilir ve belki o zaman clock sinyali olmadan kullanılabilir. Ama sanırım bu durumda da PIC'ten klavyeye veri akışı olamaz. Ki bu başta klavye ışıklarının kontrol edilmesi olmak üzere bir kaç ayar için gerekli olabilir.
Gökçe Tağlıoğlu

boraciner

cevabın için çok teşekkürler Tagli, klavyenin hızı hiç aklıma gelmemişti gerçekten,bunu netten bulmaya çalışacağım. ikinci olarak söylemek istediğim şey, ben klavyeye birşey göndermeyeceğim klavyeden geleni alsam bana yeter ;)
şu hızı bulmaya çalışayım şimdi..

Tagli

FxDev'in bağlantısını vermiş olduğu sitede 10 - 16.7 kHz arasında olduğu yazmış. Ben de zaten bu siteden çalışarak yazmıştım kodu. Ama B0 kesmesi kullanmıştım.
Gökçe Tağlıoğlu

boraciner

yukarıda yazılan C yi çevirmeye çalştım ama beceremedim, bir de siz bakarmısınız . clock'u bağlayıp ta yazdım

Teşekkürler..

Include "PROTON18_452.BAS" 
Device 16F877
		WARNINGS = OFF        
 Declare SERIAL_DATA 9
 Declare SERIAL_PARITY ODD    
Symbol  Giris  PORTB.6
Symbol  Clk    PORTB.7
Dim dur As Bit
    Dim veri As Byte
    Dim B0 As Byte
    Dim xpos As Byte
    Dim ypos As Byte
    Dim OKU As Byte
    Dim ADRS As Word
    Dim TEKRAR As Word 
     
BASLA:

    Cls
    Print At 2,2,"BEKLENIYOR"
   
  ' SerIn PORTB.6,8284,P_ERROR,[B0] '8276--9600 baud çift parýty..../ 84--9600 baud  parýty yok...
   
   While Clk = 0
   Wend
   DelayMS 5
   While Clk = 0
   DelayMS 5
   Wend
      
      
      'data bitleri aliniyor
   While Clk = 0
   veri=Giris
   veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 0

   veri=Giris
       veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 0
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 1
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 1
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 1
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 1
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
      While Clk = 1
   veri=Giris
      veri=veri<<1
   DelayMS 5
   Wend
                  ' data bitleri alindi
   
   
  While Clk = 0
   Wend
   DelayMS 5
   While Clk = 0
   DelayMS 5
   Wend
         
   
   
   
   
    Print At 1,1,veri
    DelayMS 500
    GoTo BASLA
   
End
    Include "FONT.INC"
   
   P_ERROR: 
   Cls
Print At 2,2, "Parity Error"
DelayMS 1000
Return

boraciner

çok teşekkür ederim FxDev.. bekliyorum

boraciner

kodu deneyeceğim, ilgine çok teşekkürler ;)
cevap yazacağım denedikten sonra ..
tekrar teşekkürler..

boraciner

kodu yazdım olmadı, bende clk denemek için ufak bir program yazdım
eğer clk 1 ise "clk 1" yazdır dedim ( hiçbir tuşa basmadan) çalıştırdığım anda ekrana o yazıyı çıkardı..
eğer clk 1 ise "clk 1" yazdır dedim ( yin hiçbir tuşa basmadan) çalıştırdığım anda ekrana clk 1 yazdırdı..
çok saçma ve nasıl bu işin içinden çıkacağım bilmiyorum, data ve clk kablolarının uçlarındaki direçleri söküp direk olarak mikrodenetleyiciye bağlayacağım şimdi.. sonucu tekrar yazacağım arkadaşlar..

boraciner

direnci söküp clock'un voltaj seviyesine baktım , 1.24V gösteriyor.. bunu nasıl bağlamalıyım? 10K ile +5V dan pullup mı bağlayacağım ?
çok teşekkürler..

boraciner

saat 01:00 .. 10K ile +5V dan bağlıyorum direnci , tek başına direnç bağlıyken logic 1.. clock'u da bağlayınca logic 0 a düşüyor...

muhittin_kaplan

PS2 nin çalışması şu şkildedir
Clk ve Data normalde 1 seviyesindedir. Clk her 0 a düştüğü anda data aktarılmış olur. 8 data, 1 p,1 stop,1 start toplam 11 bit gelir. ben rb0 kesmesini kullanarak her düşen kenerda bilgiye bakmıştım. gelen bilgileri word değişkenine atarak lookup dan bilgleri almıştım.. ama dosya nerde yok :(

boraciner

yaaa... =((
çok ihtiyacım vardı aslında o dosyaya, gerçi benim clock sürekli 1.24V seviyesinde bu klavyede mi bir sorun var acaba..bugün aldım teknosadan :) hemen parçaladım kabloyu "pic" için...
başka bir ps/2 mi denemeliiym yoksa bağlarken herhangi bir direnç vs kullanacakmıyız?
teşekkürler..

boraciner

yazığım kod bu fakat benim clock 2 V dan düşük seviyede dolaşıyor??

Include "PROTON18_452.BAS" 
Device 16F877
		WARNINGS = OFF        
 Declare SERIAL_DATA 9
 Declare SERIAL_PARITY ODD
 TRISB=%0110000    
Symbol  Giris  PORTB.6
Symbol  Clk    PORTB.5
Dim dur As Bit
    Dim veri As Byte
    Dim B0 As Byte
    Dim xpos As Byte
    Dim ypos As Byte
    Dim OKU As Byte
    Dim ADRS As Word
    Dim TEKRAR As Word 
    Dim ARRAY1[9] As Byte                   
Cls     
BASLA:
Dim i As Word
For i = 0 To 10 Step 1  '11 bitlik veri gelecek

While Clk =1    ' Ilk önce Clock=1 olmali
Wend           

If i<9 & i>0 Then
ARRAY1[i]=Giris 
EndIf

  
While Clk = 0
Wend

While Clk = 0
Wend

Next

Cls
Print At 2,2, Str ARRAY1
DelayMS 500

GoTo BASLA
   
End
    Include "FONT.INC"
  

boraciner

sizin kodu derlemek için hangi derleyici gerekli acaba?
o derleyicide 128x 64 lük grafik lcd kullanımı kolaymıdır ?
çok teşekkür ederim..