Gömülü Sistemlerde PS/2 Klavye Kullanımı

| Nisan 27, 2012 Tarihinde güncellendi
Gömülü Sistemlerde PS/2 Klavye Kullanımı

Özellikle mikrodenetleyici kontrollü devrelerde PS2 klavye kullanımı bazı projelerde gerekli ve daha ekonomik olabilir. Yazıda PS/2 Klavye, PS2 protokülü , komutlar bağlantı şekilleri tuş kodları sinyaller hakkında bilgiler, ölçüm grafikleri, C dili ile hazırlanan örnek yazılımlar ve daha bir çok bilgi bulunuyor. Emeği geçen hazırlayan kişilere teşekkürlerç

Hazırlayan:

Cem Çelik
Lima Endüstriyel Bilgisayar
www.lima.com.tr
@stanbul – Haziran 2004

boll

Neden PS/2 Klavye ?

Klavyeler, bilgisayarlara veri girişinde vazgeçemediğimiz ünitelerdir. AT klavyesi, ilk IBM PC AT’nin çıktığı 1984’den yılından itibaren elektronik ve protokol olarak değişmemiştir. 1987’de çıkan IBM PS/2 bilgisayar serisi ile konnektör ve tuş sayısı olarak bu günkü şeklini alarak PS/2 Klavye olarak anılmaya başlamıştır.

Bu defacto standardın 20 yıllık bir geçmişi olması iki önemli sonuç yaratmıştır:

  • • Düşük Fiyatlar (3 ABD$ !),
  • • Elektronik ve protokol olarak uyumlu Alternatif Veri Giriş Üniteleri (Bu tür üniteler arasında lazer / CCD barkod tabancaları ve barkodlu / manyetik kart okuyucular sayılabilir).

Bir PS/2 klavyeye; elektronik açıdan bakıldığında 8 x 16 boyutlarına varan bir matris tuş takımı ve bu tuş takımında basılan tuş bilgisi kodlayan bir denetleyiciden (Intel 8048 veya benzeri) oluşur. PC’mizde ise bütün işi bu denetleyiciyle iletişimi sürdürmek olan bir klavye denetleyicisi (Intel 8042 veya benzeri) yer alır.

Bu iletişimin protokolüyle ilgili detaylı bilgiyi Adam Chapweske’nin yazılarında ( (1) ve (2) ) bulabilirsiniz.

Gömülü sistemler açısından protokolün iki ana özelliğine dikkat edilmelidir:

1. iletişim senkron ve seri şekilde sadece iki kanal üzerinden (CLOCK ve DATA) yapılmaktadır: Otomasyon çözümlerinde kullanılan gömülü sistemlerde matris tuş takımlarının direkt olarak denetleyicinin giriş/çıkış kanallarına bağlanması sık kullanılan bir çözümdür.

Örneğin bu çalışmada kullanılan Flashlite186 için 4×4 (yani 16 tuşlu) bir tuş takımı ve yazılım kütüphanesi üretici JKmicro tarafından verilmektedir.

Ancak matris tuş takımları satır ve sütün sayılarının toplamları kadar giriş / çıkış kanalı gerektirir. Flash186’ daki hazır 4×4 tuş takımı uygulaması 8 kanal kullanmaktadır. Bu hesap yöntemiyle 101102 tuşun (standart PS/2 klavyesinin) matris olarak kullanımı en az 21 kanal gerektirecektir. Flash186’da toplam 44 tane olan giriş/çıkış kanallarının önemli bir kısmının sadece klavye için kullanılması tam anlamıyla kaynak israfı olacaktır.

Özetle, PS/2’nin sadece iki kanal kullanan iletişim protokolü önemli bir avantaj sağlamaktadır.

Matris tuş takımları için kodlayıcı özel devre geliştirmek kolay ve yaygın bir uygulama olmakla birlikte maliyetlerini 3 ABD$’ın altına çekmek zordur.

2. iletişim çift yönlüdür: Klavyeden PC’ye bilgi akışı olduğu gibi, PC’den klavyeyi ayarlamaya yönelik komutlar gitmektedir: PC’den gönderilen komutlara baktığımızda; bunların temelde klavye LED’ lerinin ve tuş tekrarlama özelliğinin ayarında kullanıldığını görürüz. Otomasyon çözümlerde kullandığımız gömülü sistemlerin çoğunda bu ayarlara gerek duyulmayacağı göz önüne alınarak tek yönlü bir protokol kullanılabilir.

Sadece klavyeden veri almak üzere tasarlanan protokoller daha az programlama yükü ve kaynak gerektirecektir. Bu nedenle çalışmamızda tek yönlü iletişim baz alınmıştır.

Bağlantılar ve Protokol

PS/2 klavyelerin sağladığı avantajlar nedeniyle, Internet’te çeşitli platformlar için geliştirilmiş bir çok uygulama yer almaktadır. Örnek olarak, 68HC705 için Craig Peacock’un geliştirdiği kodun yer aldığı sayfada (3) PS/2 klavyelerle ilgili detaylı bilgiler verilmektedir. Atmel’in AVR işlemcisi için C’de yapılmış bir örnek çözüm ise (4) teki belgede verilmektedir.
Klavyeyi herhangi bir denetleyiciye bağlamadan önce yapılması gereken iki önemli hazırlık
vardır:

ps2-Klavyenin-100mA-clock-data-ps2-baglantisi

1) Klavyenin bazen 100mA’e kadar çıkabilen; regüleli, +5VDC besleme gereksiniminin karşılanması. Bu bağlantıda klavyeye bağlanan besleme toprağının denetleyici besleme toprağıyla kısa devre olmasına dikkat edilmelidir. 2) Açık kolektör (open collector) yapıdaki DATA ve CLOCK sinyallerinin 10kOhm’luk “pullup” dirençleriyle koşullandırılması. Açık kolektör bağlantıda; sinyal yoksa yada mantıksal “0” seviyesinde ise çıkışta 5V, sinyal “1” seviyesinde ise 0V gözlemlenir.

Klavyede bir tuşa basılması bir grup veri paketi akışına neden olur. Her veri paketi 11 adet CLOCK çevrimi süresinde tamamlanır: Her biri 11 bit olarak algılanabilecek bu paketler; 1 adet başlangıç (= 0), 8 adet veri, 1 adet parite (= 0 veya =1) ve 1 adet stop (=1) bitinden oluşur.

Adam Chapweske’nin yazısında (1); PS/2 klavyede ‘Q’ tuşuna “basıldığında” ASCII değer olarak 31 (16 tabanında “15”) şeklinde algılanması gereken değer için CLOCK ve DATA’ da gözlemlenen dalgalar aşağıdaki şekilde görüntülenmiştir:

ps2-klavye-clock-data-sinyal-olcum-skop

Dalga görüntüleri yardımıyla iletişim protokolü için vurgulanması gereken sonuçlar aşağıdadır:
CLOCK sadece veri akışı süresince sinyal üretmektedir: Yani bu sinyal bir kesme (interrupt) uygulaması için uygundur. DATA sinyalinin geçerli verileri CLOCK sinyali 5V’tan 0’a inerken oluşmaktadır: Kesme yordamında veri okuma bu aşamada gerçekleştirilmelidir.

Tuş Kodları

Klavye kullanımımıza dikkat edersek aslında birkaç aşamalı bir işlem yürüttüğümüz fark ederiz. Tek tuşa kısa bir süre bastığımızda bile; tuşa basılması, ardından tuştan parmağın çekilmesi göz önüne alınmalıdır. Tuşa uzun süre basılması sonrasında tekrarlama, [SHIFT], [ALT], [ALTGR], [CTRL] tuşlarıyla birlikte basmamız ile çıkan farklı sonuçlar ise kodlayıcının becerdiği diğer işlerdir.

Craig Peacock’ın yazısında (3), bir tuşa basıldığı zaman ürettiği kodları aşağıdaki çizimle verilmektedir:

klavye-tus-kodlari

Bu çözüm yardımıyla kod çözümü yaparken aşağıdaki noktalara dikkat edilmelidir:

  • • Bazı tuşlar iki, [PRT SCR] ve [PAUSE] tuşları ise daha çok karakter üretir.
  • • Tuşlar, parmak çekildiği anda (F0)(XX) şeklinde tekrar kod gönderir.
  • • Çizim ABD’de kullanılan ingilizce klavye sıralamasını vermektedir.

Farklı klavyelerin ürettiği tuş kodları değişmeyeceği için yorumlayan modülünün bu durumu göz önüne alması gerekecektir. Örneğin Türkçe F klavye kullanımı halinde ‘Q’ harfinin yerine sadece etiket olarak ‘F’ gelmekte ancak kodlayıcı yine (15h) kodunu göndermektedir.

FlashLite186 için Örnek Uygulama Bu çalışmada kullanılan FlashLite186; 33Mhz 80186 uyumlu RDC8822 işlemcili, üzerinde DOS yüklü olarak gelen, kompakt, endüstriyel ( çalışma sıcaklık aralığı 20 ila +85 °C olan) bir ana karttır. istenirse 734 VDC, regülesiz bir adaptörle beslenebilmektedir. Detaylı teknik özelliklerine http://www.lima.com.tr/JK/FlashLite186.asp bağlantısından erişilebilir.

FlashLite186-33Mhz-80186-RDC8822

işletim sistemi DOS olunca bir çok alışılagelmiş geliştirme platformundan yararlanılabilmektedir. Bu çalışmada Borland C/C++ V.4.52 kullanılmıştır. FlashLite186’ya uygulama yükleme işlemi; kart üzerinde “konsol” portu olarak adlandırılan seri port yardımıyla, PC üzerinde Hyperterminal benzeri bir programda XModem protokolü kullanılarak yapılmaktadır.

Seri portun konsol olarak adlandırılması bilinçli bir seçimdir: bir PC’de klavyeden beklediğimiz girişler ve ekrana metin yazma şeklindeki çıkışlar bu porta yönlendirilmektedir.

FlashLite186 üzerinde 44 adet dijital giriş/çıkış kanalı yer almaktadır. Uygulamada J9 konnektörü üzerinde yer alan ve PORTC diye anılan kanallardan ikisi kullanılmıştır. Bu konnektör üzerinde ayrıca INT2 kesmesi için de bir pin yer almaktadır. CLOCK sinyali, PortC’nin 0. pinine ek olarak bu kesme pinine bağlanarak programlama kolaylığı sağlanmıştır.

clock-data-FlashLite186-33Mhz-80186-RDC8822-portc-int2

15h-00010101b-ps2-klavye-clock-data-sinyal-olcum-skop

Uygulamada kesme yordamı, CLOCK sinyali 0V’tan 5V’a geçerken tetiklenmektedir. Bu aşama, çizimde gösterilen dalgaların sarı renkli aşamalarında gerçekleşir. Programda, kırmızı aşamalarda CLOCK tekrar 0V’a düşene kadar beklenmekte ve DATA ancak bu durumda okunmaktadır.

Kesmeleri yandaki dalgalara göre toplayan ardından karakter ve ‘shift’ kodlarını çözümleyen C fonksiyonları aşağıda verilmektedir:

ps2_int-PS2-klavye-kodlayici-parite-stop-c

ps2_decode-kesme-klavye-charcount

Uygulamanın tamamını aşağıdaki web sayfasından indirebilirsiniz.
http://www.lima.com.tr/Support/JKSupport.asp

PS2Test-define-DEBUG-hyper-terminal

PS2Test programı araştırma amaçlı ‘#define DEBUG’ tanımı açıkken derlenip çalıştırdıktan sonra ‘Q’ tuşuna basılırsa yandaki görüntüyü verecektir.

ilk bayt (15h) ‘Q’ tuşuna basıldığını, F0h tuşun bırakıldığını, sonuncu 15h ise bırakılan tuşun ‘Q’ olduğunu göstermektedir.

Uygulama, lazer tabanca ile yapılan barkod okutmalarını da başarılı olarak çözümlemektedir.

Sonuç: PS/2 klavyenin elektronik protokolü, gömülü sistemlerde kolaylıkla geçekleştirilebilmektedir. Bu çözüm; giriş/çıkış kanallarından tasarruf veya alternatif veri giriş ünitelerinden yararlanılmasını gerektiren ortamlarda unutulmamalıdır.

Kaynaklar
1) Adam Chapweske PS/2 Mouse/Keyboard Protocol, 1999

2) Adam Chapweske The ATPS/2 Keyboard Interface, 2001

3) Craig Peacock Interfacing the AT keyboard, 19 Agu. 2001 (www.beyondlogic.org/keyboard/keybrd.htm)

4) Atmel AVR313: Interfacing the PC AT Keyboard ,
http://www.atmel.com/atmel/acrobat/doc1235.pdf

5) JKmicro – FlashLite186 User’s Manual
http://www.jkmicro.com/documentation/pdf/FL186_man14.pdf

Cem Çelik Lima Endüstriyel Bilgisayar
www.lima.com.tr
istanbul Haziran 2004

Yayım tarihi: 2011/06/19 Etiketler: , ,



1 Yorum “Gömülü Sistemlerde PS/2 Klavye Kullanımı

  1. parametreparametre

    linklerin hiç birine ulaşamıyorum sorun bendemi acaba ?

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir