PIC M KROKONTROLÖR TABANLI M N

Transkript

PIC M KROKONTROLÖR TABANLI M N
PIC MİKROKONTROLÖR TABANLI MİNİ-KLAVYE TASARIMI
Prof. Dr. Doğan İbrahim
Yakın Doğu Üniversitesi, Bilgisayar Mühendisliği Bölümü, Lefkoşa, KKTC
E-mail: [email protected], Tel: (90) 392 2236464
ÖZET
Bilgisayarlara veri girişinde en yaygın
olarak kullanılan bir cihaz olan klavyelerin çok
çeşitleri bulunmaktadır. PC uygulamalarında
ve diğer birçok bilgisayar işlemlerinde çok
tuşlu, tam boy klavye kullanılmaktadır.
Mikroişlemci ve mikrokontrolör destekli birçok
kontrol uygulamalarında ise 12-16 tuşlu miniklavyeler kullanılmaktadır. Bu makalede 12
tuşlu bir klavyenin PIC mikrokontrolöre
bağlanması
ve
programlanması
incelenmektedir.
1.
GİRİŞ
Herhangibir bilgisayara veri girmek için
birçok metod kullanılabilir. Klavye, optik
okuyucu, tarayıcı, fare, sayısal kamera,
magnetik kart ve benzeri cihazlar en yaygın
olarak kullanılan giriş cihazları arasındadırlar.
Genel amaçlı PC uygulamalarında giriş tam
boy klavye ve fare kullanılarak yapılmaktadır.
Masa üstü yayıncılık gibi daha geniş
uygulamalarda ise tarayıcı ve sayısal kamera
gibi girişler de kullanılmaktadır.
Birçok mikroişlemci ve mikrokontrolör
tabanlı kontrol uygulamalarında ise genellikle
12 veya 16 tuşlu olan ve belirli bir uygulama
için
geliştirilen
mini-klavyeler
kullanılmaktadır3,4,5.
Örneğin, evlerimizde
bulunan
televizyon
uzaktan
kontrol
cihazlarında mini-klavye kullanılmaktadır.
Bunun gibi, giriş gerektiren hemen her türlü
mikroişlemci
uygulamalarında
klavye
kullanılmaktadır.
Mikroişlemci
ve
mikrokontrolör
devrelerinde mini-klavye kullanımı için birçok
değişik metodlar bulunmaktadır. Örneğin, 16
tuşa kadar olan herhangibir mini-klavyeyi bir
mikroişlemciye bağlamak için 74C9221 gibi
özel klavye entegre devreleri kullanılabilir.
Böyle bir uygulamada klavyenin bacakları
direk olarak entegre devreye bağlanır ve
entegre devrenin çıkışları ise mikrokontrolöre
giriş olarak bağlanır. Böylece, klavye üzerinde
herhangibir tuşa basılınca, o tuşun kodu
mikroişlemciye aktarılmış olur. Klavye entegre
devresinin kullanımı kolay olmasına rağman
fiyatının yüksek oluşu nedeniyle birçok
uygulamalarda kendi klavye kontrol devremizi
kurmamız daha uygun olmaktadır.
Bu yazımızda, PIC16F842,6,7,8 modeli bir
mikrokontrolör kullanarak bir mini-klavyeden
nasıl veri okunacağı açıklanmaktadır. Projenin
en büyük avantajı ucuz oluşu ve kolaylıkla
kurulabilmesidir.
2.
DONANIM
Sadece birkaç tane giriş gerektiren
projelerde bu girişler normal olarak buton
kullanılarak yapılmaktadır. Daha çok giriş
gerektiren projelerde klavye kullanmak daha
uygun olmaktadır. Klavyelerin çok çeşitleri
bulunmaktadır, örneğin, 4 satır ve 4 sütünu olan
ve 4x4 diye bilinen 16 tuşlu klavyeler, 4 satır
ve 3 sütunu olan ve 4x3 diye bilinen 12 tuşlu
klavyeler ve bunlar gibi daha birçok çeşit
klavyeler.
Bu projede PIC16F847 modeli bir
mikrokontrolöre 4x3 bir klavye bağlanmıştır.
Klavyenin 12 tane tuşu bulunmakta ve
herhangibir tuşa basılınca o tuşun kodu (0 dan
11
e
kadar)
4
bit
çıkış
olarak
mikrokontrolörden verilmektedir.
Buna
ilaveten,
herhangibir
tuşa
basılınca
mikrokontrolörün VH (veri hazır) diye
adlandırılan bir çıkış bacağı 25ms kadar bir
zaman için lojik 0 olmaktadır. Bu bacak hem
bir tuşa basıldığını belirtiyor ve hem de kontak
parazitlerini önlemiş oluyor.
Şekil 1 de tipik 4x3 bir klavyenin yapısı
gösterilmiştir. Bu klavyenin 4 tane satırı ve 3
tane de sütunu olmak üzere 12 tane tuşu
bulunmaktadır. Klavye devrelerinin çalışması
oldukça basittir. Bu projede sütunlar çıkış ve
satırlar ise giriş olarak kullanılmışlar ve Şekil 2
de gösterildiği gibi girişler dirençler ile yukarı
çekilmiştirler.
Klavyeyi kontrol etmek için sadece bir
sütun lojik 0 ve diğer sütunlar lojik 1 yapılır.
Daha sonra satırlar birer birer kontrol edilir ve
bir satırda herhangibir tuş basılmışsa o satırın
değeri lojik 0 olarak okunur. Bu şekilde bütun
sütunlar için ayni işlem süreki olarak yapılır.
Örneğin, Şekil 2 yi göz önünde bulunduralım.
İlk olarak sütun 1 lojik 0 yapılır. Daha sonra
satır 1, satır 2, satır 3 ve satır 4 ün değerleri
okunur. Örneğin, 1 nolu tuş basılmışsa satır 2
lojik 0 olur ve mikrokontrolöre 1011 kodu
gönderilir.
1
0
4
8
1
5
9
2
6
A
3
7
B
2
Satırlar
3
Şekil 3
Bazı klavye çeşitleri
4
1
2
3
Sütunlar
Şekil 1 4x3 klavye bağlantıları
PIC
16F84
+V
Veri
hazır
(VH)
KLAVYE
0
4
8
1
Basılan
tuşun
kodu
Şekil 4 Projenin blok şeması
1
5
9
2
6
A
3
7
B
2
3
4
1
2
3
Şekil 2 4x3 klavyenin çalışması
Şekil 3 de bazı 4x4, 4x3 (projede
kullanılan) ve 4x1 klavyelerin resimleri
gösterilmiştir. Projenin blok şeması Şekil 4 de
gösterilmiştir. Klavyenin sütun ve satırları
mikrokontrolöre bağlanmış ve basılan tuşun
değeri ise mikrokontrolörden çıkış olarak
verilmiştir. Projenin devresi Şekil 5 de
verilmiştir. Klayenin satırları mikrokontrolörün
RB0-RB3 giriş bacaklarına, sütunları ise RB4RB6 çıkış bacaklarına bağlanmıştırlar. RB7
bacağı ise herhangibir tuşun basıldığını belirten
VH (veri hazır) bacağı olarak kullanılmıştır.
Projede
mikrokontrolör
RC
osilatörü
kullanılarak 400kHz saat frekansı ile
çalıştırılmıştır.
Şekil 5
Projenin devresi
Şekil 2 ve Şekil 5 göz önünde
bulundurulursa, basılan herhangibir tuş, ve
klavyenin sütun ve satırları arasında Tablo 1 de
verilen bağıntı bulunmaktadır. Yazılımda bu
bağıntıyı kullanarak hangi tuşun basıldığını
kolaylıkla bulabiliriz. Hangi tuşun basıldığını
bulmanın bir diğer yolu da sütunları birer birer
lojik 0 yapmak ve hangi satırın lojik 0
olduğunu kontrol etmektir. Bu projede ikinci
çözüm yolu kullanılmıştır.
Tablo 1. Sütunlar, satırlar ve basılan tuş
Sütun
Satır
1
2
3
1
2
3
4
0
1
1
0
1
1
1
0
1
1
1
0
1
1
0
1
1
1
1
0
1
0
1
1
1
1
1
0
1
0
1
0
1
1
1
1
0
1
1
0
1
1
1
0
1
1
1
0
1
1
0
1
1
1
1
0
1
1
0
0
1
1
1
1
1
0
1
0
1
1
1
1
0
1
1
0
1
1
1
0
1
1
1
0
3.
Tuş
0
1
2
3
4
5
6
7
8
9
A
B
YAZILIM
Projenin yazılım listesi Şekil 6 da
verilmiştir. İlk olarak PORT A ve PORT B
yönleri tanımlanır ve Veri Hazır çıkışı lojik 1
yapılır (veri hazır değil). Daha sonra sütunlar
lojik 0 yapılarak satırların lojik 0 olup
olmadıkları kontrol edilir. Herhangibir satır
lojik 0 ise o satırda bulunan 3 tuştan birinin
basılmış olması gerekir. Hangi sütunu lojik 0
yapmışsak basılan tuş o sütundadır. Böylece,
basılan tuş bulununca PORT A dan 4 bitlik bir
sayı olarak gönderilir. Ayni zamanda VH çıkışı
25ms kadar bir zaman için lojik 0 yapılır.
Yazılımda, Tablo 1 i kullanarak ve satırları
okuyarak
basılan
tuşu
bulmamız
da
mümkündür.
4.
mikroişlemci sadece klavyeden okuma işlemini
yapmaktadır. Bunun sebebi ise yazılımın çokgörevli (multi-tasking) olmayışıdır. Yazılımda
kesme (interrupt) kullanarak ve klavye
okumasını kesme rutini içine alarak çok görevli
bir ortam yaratmak mümkündür. Böylece, ayni
mikrokontrolör hem klavye okuma işlemini ve
hem de projenin diğer işlemlerini yapabilir.
5.
KAYNAKÇA
[1] web sitesi: www.fairchildsemi.com
[2] Ibrahim, D. (2003). PIC C İle PIC
Programlama, ERA Bilgi Sistemleri,
INFOGATE yayınları.
[3] Ibrahim, D. (2000). Microcontroller
Projects in C For the 8051. ButterworthHeinemann, Oxford.
[4] Ibrahim, D. (2001). PIC Basic:
Programming and Projects. ButterworthHeinemann, Oxford.
[5] Ibrahim, D. (2002). Microcontroller Based
Temperature Monitoring and Control
Butterworth- Heinemann, Oxford.
[6] Ibrahim, D. (2003). PIC C İle Ses
Projeleri Bileşim Yayıncılık, Fuarcılık
A.Ş.,
http://www.bilesim.com.tr
[7] Microchip web sitesi:
www.microchip.com
[8] Adım Adım PICmicro Programlama, Era
Bilgi Sistemleri, INFOGATE yayınları.
SONUÇ
Bu yazımızda, 4x3 bir mini-klavyenin bir
PIC mikrokontrolöre nasıl bağlandığı ve nasıl
programlandığı açıklanmıştır.
Tasarımı
yapılmış olan klavye sistemi oldukça ucuza mal
olmakta ve mikroişlemci ve mikrokontrolör
tabanlı sistemlerde mini-klavye kullanımı
olanağını sağlamaktadır. Bu makalede örnek
olarak 4x3 mini-klavye ele alınmıştır. Fakat
makalede açıklanan metodları kullanarak,
herhangibir boyutta bir klavye kullanmak
mümkündür. Bu tip uygulamalarda genellikle
;*********************************************************************************
;
MİKROKONTROLÖR KLAVYE PROJESİ
;
; Bu projede 4x3 bir klavye kullanılmıştır. Klavyenin herhangibir tuşuna basılınca o tuşun kodu (0 ve 11
; arası) mikrokontrolden çıkış olarak verilir. Klavyenin satırları RB0-RB3 bacaklarına ve sütunları ise
; RB4-RB6 bacaklarına bağlanmıştır. Klavyenin satırları giriş ve sütunları ise çıkış olarak
; tanımlanmıştır. Giriş bacakları ayni zamanda 100K dirençlerle yukarı çekilmiştirler.
;
; Mikrokontrolör RC kullanılarak 400kHz ile çalışmaktadır, bunun için ise 10K direnç ve 33pF kapasitör
; kullanılmıştır. Herhangibir tuşa basınca o tuşun kodu PORT A dan 4 bitlik çıkış olarak verilmektedir.
; Mikrokontrolörün RB7 bacağı Veri Hazır (VH) bacağı olarak isimlendirilmiştir. Herhangibir tuşa
; basınca bu bacak da lojik 0 a gier ve 25ms kadar lojik 0 da kalır. Bu şekilde kontak parazitleri de
; önlenmiş olur.
;
;
;Pb0, Pin 6 ->------------0 ----- 4 ----- 8
;Pb1, Pin 7 ->------------1 ----- 5 ----- 9
;Pb2, Pin 8 ->------------2 ----- 6 ----- A
;Pb3, Pin 9 ->------------3 ----- 7 ----- B
;
|
|
|
;Pb4, Pin 10 ->-----------|
|
|
;Pb5, Pin 11 ->-------------------|
|
;Pb6, Pin 12 ->-------------------------- |
;*******************************************************************************
;
Title “KLAVYE PROJESİ”
LIST p = 16F84
#include "p16f84.inc"
__CONFIG _WDT_OFF & _RC_OSC & _PWRTE_ON & _CP_OFF
;
; TANIMLAR
;
#define VH
PORTB,7
;Veri Hazır
;
; YAZMAÇLAR
;
sayac equ
0x20
ORG
0x00
goto
basla
;Programın başı
;Alt-program
;-----------------------------------------------------------------------------------------------init
bsf
STATUS,RP0
;BANK 1 i seç
clrf
TRISA
;Port A hep çıkış
movlw b'00001111'
;Port RB0-3 in, RB4-7 out
movwf TRISB
bcf
STATUS,RP0
;Bank 0 seç
bsf
VH
;Veri Hazır=1
retlw
0
;*******************************************************************************
;
ANA PROGRAM
;Herhangibir tuşun basıldığını kontrol etmek için her sütunu lojik 0 yap ve lojik 0 olan satırı bul.
;
;*******************************************************************************
basla
call
init
;Giriş çıkışları tanımla
tara
bcf
PORTB,4
;RB4 ü 0 yap
bsf
PORTB,5
;Diğer sütunları 1 yap
bsf
PORTB,6
btfss
goto
PORTB,0
basildi_0
btfss
goto
PORTB,1
basildi_1
btfss
goto
PORTB,2
basildi_2
btfss
goto
PORTB,3
basildi_3
bcf
bsf
bsf
PORTB,5
PORTB,4
PORTB,6
btfss
goto
PORTB,0
basildi_4
btfss
goto
PORTB,1
basildi_5
btfss
goto
PORTB,2
basildi_6
btfss
goto
PORTB,3
basildi_7
bcf
bsf
bsf
PORTB,6
PORTB,4
PORTB,5
btfss
goto
PORTB,0
basildi_8
btfss
goto
PORTB,1
basildi_9
btfss
goto
PORTB,2
basildi_A
btfss
goto
PORTB,3
basildi_B
;1 ise sonrakine bak
;RB5 i 0 yap
;Diğerlerini 1 yap
;RB6 yı 0 yap
;Diğerlerini 1 yap
;Herhangibir tuşa basılmadı
bsf
VH
;VH=1
goto
tara
;Tuşlara bakmayı tekrarla
;---------------------------------------------------------------------------------------------------------------;Bir tuşa basıldı…
;
basildi_0
movlw 0
goto
parazit
basildi_1
movlw 1
goto
parazit
basildi_2
movlw 2
goto
parazit
basildi_3
movlw
goto
basildi_4
movlw
goto
basildi_5
movlw
goto
basildi_6
movlw
goto
basildi_7
movlw
goto
basildi_8
movlw
goto
basildi_9
movlw
goto
basildi_A
movlw
goto
basildi_B
movlw
3
parazit
4
parazit
5
parazit
6
parazit
7
parazit
8
parazit
9
parazit
0x0A
parazit
0x0B
;---------------------------------------------------------------------------------------------------------------; Aşağıdaki gecikme sayesinde, VH bacağı en az 25ms lojik 0 da kalır. 400KHz saat ile yaklaşık
; gecikme şu kadardır: 10uS*10saykıl*256 uS = 25mS
;---------------------------------------------------------------------------------------------------------------parazit
movwf PORTA
;Port A ya tuşun kodunu gönder
bcf
VH
;VH = 0 yap
clrf
sayac
;256 sayım için
bekle
nop
nop
nop
nop
nop
nop
nop
decfsz sayac, 1
goto
bekle
goto
tara
end
Şekil 6 Projenin yazılım listesi
;Tekrar başına git

Benzer belgeler