Gelişen mikrokontrol teknolojileri ve artan bilgi birikimi sayesinde geliştirici düzeyinde daha yaygın kullanımına olanak tanımıştır. Burada elimden geldiği kadar bazı örnekler sunmaya çalışacağım...

21 Ekim 2009 Çarşamba

Atmega8 ile Seri İletişimli Bilgisayar Klavyesi


Giriş

Günümüzde kişisel bilgisayarların neredeyse vazgeçilmez girdi elemanı: klavye. Eh çoğumuz için her ne amaç için olursa olsun yazı yazmak,oyun kontrol elemanı olarak, hatta programların kullanımı için önemli bir girdi elemanı olarak kullanılır. Bir klavye ile işlemci devresinde nasıl kullanıldığı bu projede anlatıldı.

Klavye

Klavye basitçe kendi kontrol ünitesi tarafından üzerinde tüm tuşlar çoğullamalı olarak taranır. Klavye üzerindeki her bir tuşa bir kod atanmıştır. Bu noktada atanmış olan bu kod klavye üzerindeki ASCII karakterleri ile aynı olmadığı unutulmamalıdır. Basitçe bir tuşa basıldığında klavye tarafından tuş kodu gönderilir. Tuşa basılı tutulursa, belirli aralıklarla bu kod gönderilmeye devam eder. Tuş bırakıldığı zaman ise, önce "break" olarak tanımlanan "0xF0" (onlatılık sayı sistemi) kodunu gönderir ve sonra bırakılan tuşun kodu gönderilir. Şunuda belirtmekte fayda varki klavye üzerinde bazı tuşlar daha fazla kodla tanımlanmıştır. Örneğin sağ taraftaki sayı tuşları ve yön tuşları 0xE0,0xF0, 0xXX (XX burada tuş kodunu belirtir) gibi bir kod dizisi ile tanımlanır.

Şekil-1:Bu projede kullanılan klavye tuşları ve tuş kodları (Bazı tuşlar ve kodları gösterilmemiştir)

Klayve diğer bağlantı türlerini saymazsak, 5-bacaklı DIN veya 6- bacaklı mini-DIN iki bağlantı tipi PS/2 portu olarak tanımlanmaktadır. Bu bağlantı tipleri aslında birbirinin aynıdır ve kolaylıkla birbirlerine dönüştürülebilir. Burada 6- bacaklı mini-DIN bağlantı tipi kullanıldı. 6 bağlantı ucu olmasına rağmen sadece 4 bağlantı ucu kullanılır: Vcc(+5V), GND, Saat sinyali ve Veri ucu.

Şekil-2:Mini DIN-6 konnektörünün bacak bağlantıları

Klavye İletişimi

Klavye iletişimini iki yönlüdür. Yani sadece klavye veri göndermez, yeri geldiğinde bazı işlemler için komutda alır. Bu projede bu komut alma bölümü konu dışı bırakılmıştır. Yani sadece klavyenin veri göndermesi üzerine kuruludur.

Normalde bir klavyenin veri ve saat hatları lojik 1 seviyesinde durur. Klavye üzerinde bir tuşa basılana kadar. Saat hattı bir dizi saat darbesi üretmeye başlar. Veri hattındaki veri saat hattındaki darbenin inen kenarında geçerli olacak şekilde şekillendirilir.

Şekil-3: Saat ve Veri iletişim dalga şeması. "F" tuşu=0x15

Verinin gönderilme şekli ise; ilk veri bit daima lojik 0 ile başlar, 8 bitlik veri, bir elde biti ve lojik 1 seviyesinde sonlandırma bitinden oluşur. Yani bu bitlere 11 tane saat darbesi eşlik eder. Başlama bitinden sonraki ilk veri bitin en düşük anlamlı bittir. Saat frekansına gelince10KHz ile 16.7 KHz arasında.

Bitleri baytlara dönüştürürsek, 8 bitlik verinin kesme veya tuş kodu olduğunu söyleyebiliriz.

Bağlantıların elektriksel olarak aslında klavye içinde pull-up dirençleri ile +5V (lojik 1) seviyesine çekilmiş durumda. Bu da hem klavye hemde işlemci (veya bilgisayar) tarafında lojik 0 çekebilme yapısında olduğunu gösterir ki, iki yönlü iletişim için gerekli şart. Klavyenin veri gönderme durmunda lojik 0 çekme işini sadece klavye yerine getirir.

Şekil-4:Bir klavyenin tuşa basıldığında çalışma şekli

Klavyenin kabini (1) kontroller ünitesi oluşturur. Kontroller ünitesi belirli bir zaman aralığı içinde (2) tuşları tarar ve tuşların basılıp basılmadığını kontrol eder. Bir tuş basıldığı zaman (3) tarama hatlarından birisinin devresini tamamlar ve kontroller ünetisi tarafından değerlendirilir. Tuş kodu (5) verisi veri hatları üzerinden iletilirken, tuş verisine eşlik eden bir (4) saat sinyalini kontrol ünitesi oluşturur. Her iki sinyalde bir mini DIN-6 konnektörü (6) üzerinden bağlandığı cihaza veri aktararır.

Devre

Devreyi geliştirilirken referans alınan Atmel firmasının uygulama notlarından AVR313 uygulama notu göz önüne alındı. Tabiki uygulama notunda verilen program C ile yazılmış olsada bir fikir vermeye yetti.

6- bacaklı mini-DIN bağlantı tipini oluşturan konnektör klavye ile işlemci kartı arasında bağlantı noktasını oluşturuyor. Her ne kadar klavye içinde olduğu belirtilmiş olsada iki pull-up direnci devreye her ihtimale karşı eklendi. (Klavyenin takılı olmadığı durumlara karşı.) İki led devrenin durumu hakkında kullanıcıya bilgi vermekte. Şu hali ile kırmızı sürekli yanarak devrenin çalıştığını belirtirken, yeşil led sadece klavye işlemci kartına bilgi gönderdiğinde yanmaktadır. Ledlere bağlı dirençler tabii ki akım sınırlama elemanı olarak iş görür. Devre saat frekans 7,3728 MHz kristal ve iki 27pF kondansatör ile üretilmektedir.

RS232 için söylenecek fazla bir şey yok. Devre sadece bilgisayara veri göndermekle birlikte, gerekli durumlar için Alma için bağlantı yapılmış durumda. Bilgisayar seri kablosu için bir DB9 konnektörü devre üzerine eklenmiştir.

Besleme için bir köprü diyodu üzerinden alınan besleme doğrulma kondansatörlerinden geçirilerek 7805 regülatörüne uygulanmakta, çıkışıda devre ve klavye için gereken +5V besleme gerilimini sağlar. Geriye kalan kondansatörler sadece filtre amaçlı.

Şekil-5:Klavye seri bağlantısı için kullanılan kart

Şema

Atmel 8 işlemcimiz olam üzere IC1 ile temsil ediliyor. Bunun saat frekansı üretimini sağlayan XT1 veya XTL1 kristal olup 7,3728MHz değerinde ve bu kristale eşlik eden C7 ve C8 kondansatörleri 27pF değerindeler. İşlemciye bağlantılı P3 konnektörü işlemcinin programlanmasında kullanılan ISP konnektörüdür. D2 ve D3 ledleri işlemci ve devrenin çalışmasının gösterirken, LED ve işlemci arasında 1K'lık R1 ve R2 dirençleri akım sınırlama elemanı olarak iş görürler. 10K'lık R3 ve R4 dirençleri pull-up dirençleridir. P2 konnektörü 6 bacak mini DIN konnektörüdür ki bu klavye girişidir.

P1 (DB9), IC2,C2,C6,C4,C3 elemanları artık çok bilinen seri port devresini oluşturur. Bilgisayar seri portu ile işlemci seri portu arasında iletişim arayüzü (seviye uygunlaştırıcı) olarak işlev görür.

D1,C9,C10 IC3 C11 elemanları en basit besleme devresini oluşturmakta. +5V besleme devresi.

Geriye kalan kondansatörler zaten filtre kondansatörü olarak çalışırlar. Eh, sadece 100 nF kondansatörler kaldı.

Şekil-6:Blok şeması


Şekil-7:Devrenin şeması


Devrenin Çalışması

Devre şeması incelenirse klavyenin saat girişinin işlemcinin int0 bacağına bağlı olduğu görülür. Yani işlemci saat bacağına sinyal geldiğinde bir kesme üretmesini sağlar. Dikkat: Sadece inen kenarda. Üretilen bu kesme sinyalı ile Veri bacağında zaten bir bit olacağından bu değer okunur. Sonraki saat darbesinin inen kenarın kadar devre bekler. Saat darbesinin inen kenarında bir kesme üretimi ile birlikte gelen bit okunur. Bu işlem 11 kez tekrarlanır. Şimdi elimizde 11 bitlik veri var. Klavyenin iletişim şekline göre gelen verinin başından bir bit ve sonundan iki bit atılarak ,8 bit bitlik klavyenin gönderdiği veri alınmış olur. Klavyeden bilgi geldiği zaman diliminde yeşil LED yanacaktır. Sonra sönecektir.

Sonra bu gelen verinin niteliği incelenir. Bu noktada sadece tuş bırakma durumunda üretilen tuş kodu kullanılıyor (0xF0+tuş kodu). Shift tuşu bu şartın dışındadır. Çünkü Shift tuşu basılı olduğu zaman diliminde işlemdedir.

Alınan tuş kodu bir tablodan basılan tuşun ASCII kodunu bularak bunu bilgisayara gönderir.

Not:
1. Elimde bu iş için kullanabileceğim sadece F tipi klavye vardı. Dolayısı ile üretilen tuş kodları bu klavyeye göredir. Eğer proje Q klavye ile yapılır ve program değiştirilmezse,Q tuşuna basıldığında F yazacaktır.
2. Büyük harf kilit tuşu (Capslock) devre dışıdır.
3.Klavyenin sağ tarafındaki tuşlar (enter tuşunun sağındaki tuşlar) devre dışıdır.
4.Tuşun sürekli basılma durumu göz ardı edilmekte. Sadece tuş bırakıldığında veri işlenmektedir.

Şekil-8:Devrenin besleme verilmiş, programlanmış ve denenmiş hali


Devre Yapımı

Devre yapımında kritik bir eleman yok. Baskı devre kartı üzerinde geçekleştirildiğinde standart eleman yerleşimi göz önüne alınarak devre kurulabilir. Bu noktada diğer devre montaj teknikleri kullanıldığında bacakların doğru bağlanması önemlidir. Tabii ki kristal topraklanmalıdır. Devrede 7805 5V gerilim regülatörü üzerinden geçen akım göreceli olarak küçük olduğu için ek bir soğutucu kullanımına gerek duyulmamamıştır.
Tüm dirençler çeyrek wattır.
Besleme konusunda bir sorun oluşturmayacağınızı düşünüyorsanız girişteki köprüyü devre dışı bırakabilir veya tek bir diyotla değiştiribilirsiniz. (Kendi besleme kaynağınız varsa ve devreyi kendiniz kullanacaksanız). Bacak bağlantıları uyan başka bir LED kullanılabilir. Entegreler için soket kullanılması sonradan oluşabilecek sorunların çözümünde size yardımcı olabilecektir. Belki daha sonra tümdevreleri başka bir devre üzerinde kullanmak isteyebilirsiniz. Sizin imkan ve tercihlerinize kalmış bir durum...

Şekil-9:Devrenin baskı planı


Şekil-10:Devrenin yerleşim şekli


Şekil-11:Devrenin yerleşim planı


Şekil-12:Kartın alttan görünümü. Devre görüldüğü gibi fazla karışık değil.

Devre Elemanları

1KR1,R2
10KR3,R4
27pFC7,C8
100nFC1,C5,C9,C12,C13
10µFC2,C3,C4,C6,C10,C11
B125C1500 veya benzeriD1
3mm Kırmızı LEDD2
3mm Yeşil LEDD3
ATMEGA8IC1
MAX232IC2
7805IC3
7,3728Mhz kristalXT1
DB9P1
6 Header (ISP6)P3
mini DIN-6 dişi konektör P2

Malzeme listesi. Burada işlemci için soket ve 9V adaptör verilmemiştir. Kaliteli 16 ve 28 bacaklı soketler oluşabilecek problemlerin önüne geçecektir.

Söylemeye bile gerek görülmeyen bir mini DIN 6 bağlantı konnektörü olan bir klavye malzeme listesine eklemek gerekiyor.(Bu proje değiştirilmeden uygulanacaksa, F klavye oluyor.)

Bilgisayar Programı

Bilgisayar üzerinde kullanılan program Delphi 7 ile yazıldı. Sadece seri port üzerinden gelen ascii karakteri yazmak üzere kullanılabilecek basit bir metin düzenleme programıdır. Program üzerindeki metin alanı siz tıklasanızda tıklamasanızda her zaman girilen tuş bileşeni metnin en sonuna eklemek üzere tasarlandı. Yazılan metin rtf formatında kayıt yapılabilmektedir.

Yani metin üzerinde fazla işlem yapamazsınız ama klavye ve işlemci devresinin çalışmasının izlenmesinde yardımcı olacaktır. En basit bir seri klavye sistemi oldu, ama sadece bu program için.

Şekil-13:Klavye-seri dönüştürücü devresi için oluşturulmuş metin düzenleme programı

Şekil-13 Klavye-seri dönüştürücü devresi için oluşturulmuş metin düzenleme programını göstermektedir. Görüldüğü gibi fazla karmaşık değil. Basılan tuş pencere altındaki yazı alanında gösterilirken tüm basılan tuşlar metin alanında toplanmaktadır.

Şekil-14 ve Şekil-15 klavyenin gönderdiği verileri incelemek üzere hazırlanmış basit bir Visual Basic programıdır. Sadece işlemci kartının geliştirilmesinde bilgisayardan izlemek üzere oluşturuldu.

Şekil-14: 'F' tuşu basılıp bırakıldığında klavyenin gönderdiği veri

"F" tuşuna basılıp bırakıldığında klavyeden gelen bilgi görülmektedir. Alttaki ilk (0x15)değer tuş basıldığında klavye tarafından gönderilen değerdir. Üstteki değerler tuş bırakıldığında (0xF0 ve 0x15) klavyenin gönderdiği değerleri gösterir.

Şekil-15:V tuşunun Shift ile birlikte kullanımı

Shift tuşu ile birlikte V tuşunun klavye tarafından gönderdiği değerleri göstermektedir. Shift basıldığında sürekli olarak Shift tuş kodunu göndermektedir ("shift basıldı"-mavi). Bu bir başka tuş basılana veya Shift bırakılana kadar devam eder. V tuşu ile işlemler bunu takip ederek ("v tuşuna basıldı ve bırakıldı"-yeşil). Son olarak "Shift tuşu bırakıldı" kodu kırmızı yazı ile görülmektedir. İşlemci tüm bunları inceler ve seri port üzerinden "V" karakteri olarak gönderir.

video

Film izlenirken görüleceği üzere yeşil led yanıp sönmektedir. Bu yanma anlarında klavyenin tuşlarına basılmaktadır.

Ekler:

ATMEGA8 hakkında bilgi

Atmega8 ile Seri İletişimli Bilgisayar Klavyesi için dosyalar -birleşik

Bu devrenin yapım sorumluluğu size aittir. Devre yapıldı ve çalışıyor. K.A...

Etiketler

İzleyiciler