pıc tabanlı, 4 basamaklı ve ser ba ğlantılı 7 segment led projes

PIC TABANLI, 4 BASAMAKLI VE SERİ BAĞLANTILI
7 SEGMENT LED PROJESİ
Prof. Dr. Doğan İbrahim
Yakın Doğu Üniversitesi, Mühendislik Fakültesi, Bilgisayar Mühendisliği Bölümü, Lefkoşa
E-mail: [email protected], Tel: 2236464
ÖZET
Bu yazımızda PIC16F84 modeli bir
mikrokontrolör kullanarak 4 basamaklı bir 7
segment LED in kontrolu açıklanmıştır.
Tasarımı yapılmış olan proje diğer model
mikrokontrolör sistemleri ile de kolaylıkla
kullanılabilmektedir.
1. GİRİŞ
Mikrokontrolör tabanlı sistemlerde giriş ve
çıkış çok önem taşımaktadır. Giriş olarak
genellikle küçük uygulamalarda buton, daha
büyük uygulamalarda ise mikro-klavye
kullanılmaktadır. Çıkış olarak ise LED, buzer,
hoparlör, 7 segment LED, veya LCD gibi çıkış
cihazları kullanılmaktadır.
Sayı göstermek
gereken uygulamalarda genellikle 7 segment
LED veya LCD cihazları kullanılır. 7 segment
LED lerin en büyük avantajları kullanımlarının
kolay oluşu ve fiyatlarının da düşük oluşudur.
Bunun yanında, bu tip göstergelerle sadece
sayılar ve birkaç harf gösterilebildiği için
kullanım alanları kısıtlıdır. LCD göstergeler ise
daha pahalıdırlar, fakat bütün ASCII karakter
setini destekledikleri için daha geniş kullanım
alanları bulunmaktadır.
7 segment LED göstergeler genellikle
mikrokontrolör sistemlerine paralel olarak
bağlanırlar. Tipik uygulamalarda birden çok
basamaktan meydana gelen göstergelerin 7 tane
ortak segment bacakları bulunmaktadır. Buna
ilaveten, her basamağın ayrı olarak kontrol
edilen ortak anod veya ortak katod bacakları da
bulunmaktadır. Böylece, örneğin, 4 basamaklı
bir göstergeyi kontrol etmek için en az 11 tane
çıkış bacağına gerek olmaktadır. Birden çok
basamaktan meydana gelen 7 segment LED
göstergeler genellikle multipleks metodu ile
çalışırlar ve her basamak birkaç yüz milisaniye
gibi kısa bir zaman için çalışır. Böylece, göz
bütün basamakları ayni anda çalışırmış gibi
görmektedir.
Standard 7 segment LED
göstergelerin
en
büyük
desavantajları
mikrokontrolör sistemlerine bağlanmak için çok
sayıda çıkış portuna gerek oluşu, ve ayni
zamanda gösterge basamaklarının sürekli olarak
taranması gereğidir.
7 segment LED
göstergelerin yukarıda açıklandığı gibi paralel
olarak çalışan, ve ayrıca seri olarak çalışan
modelleri de bulunmaktadır.
Bu yazımızda 4MHz kristal ile çalışan
PIC16F841
modeli
bir
mikrokontrolör
kullanılmış ve mikrokontrolör 4 basamaklı ve
seri iletişimle çalışan 7 segment bir LED
göstergeye bağlanmıştır. Yazının esas amacı bu
tip bir göstergenin mikrokontrolöre nasıl
bağlandığını
ve
nasıl
programlandığını
açıklamaktır. Göstergede PASS mesajı ve bir
saniye sonra da 2004 sayıları gösterilmektedir.
2. DONANIM
Projenin blok şeması Şekil 1 de
gösterilmiştir. Projede kullanılan gösterge
Nexus
Machines2
firması
tarafından
üretilmektedir. Bu göstergenin, ayni şekilde
çalışan, fakat büyüklüğe göre 5 değişik modeli
bulunmaktadır. B08M04 modeli 8mm boyunda,
B14M04 modeli 14mm boyunda, B20M04
modeli 20mm boyunda, B25M04 modeli 25mm
boyunda ve B38M04 modeli ise 38mm
boyundadır.
Göstergeler üzerinde sürücü
devresi de bulunmaktadır. İleride göreceğimiz
gibi göstergeyi çalıştırmak için seri olarak 36
bitlik veri göndermemiz gerekmektedir.
Gösterge ise mikrokontrolöre sadece 2 kablo ile
bağlanmaktadır. 7 segment göstergeye ilaveten
cihaz üzerinde yine programlanabilir 2 tane de
LED sürücü devresi bulunmaktadır
LED
PIC
16F
84
B14M04 7 segment LED
Şekil 1 Projenin blok şeması
Normal olarak +5V ile çalışan fakat +10V
kadar çalışabilen B14M04 göstergesinin şu
bacak bağlantıları vardır:
Pin 1.
Pin 2.
Pin 3.
Pin 4.
Pin 5.
Pin 6.
Pin 7.
Pin 8.
Pin 9.
Dıştan LED bağlama bacağı
Dıştan LED bağlama bacağı
Cihazı aktif yapan bacak. Bu bacağın
0 olması gerekir
Seri veri bacağı
Seri saat (clock) bacağı
VDD. Gerilim bacağı. Normal olarak
+5V kullanılır
Parlaklığı kontrol eder. Bu bacakta
parlaklığı kontrol etmek için bir
direnç bulunmaktadır. Fakat istenirse
parlaklığı kontrol etmek için dıştan
bir direnç de bağlanabilir. Minimum
direnç 4.7K olmalıdır.
VSS. Toprak bacağı.
VLED. Dıştan bağlanan LED
gerilimi. Normal olarak bu bacak 6
nolu bacağa bağlanmaktadır.
Şekil 2 de gösterildiği gibi cihaz içerisinde 4
tane 7 segment gösterge ve her göstergenin sağ
alt tarafında desimal nokta bulunmaktadır. LED
ler en soldaki 4 .üncü basamak ve en sağdaki
ise
1.
nci
basamak
olmak
üzere
numaralanmıştırlar:
Şekil 2 B14M04 7 segment seri LED gösterge
Gösterge içerisindeki LED lerin bölümleri şu
harflerle isimlendirilmiştirler:
a
f
e
b
g
c
d
İstediğimiz bölümü lojik 1 yapmakla o
bölümü yakmış oluruz ve bu şekilde 0 dan 9 a
kadar numaraları veya bazı harfleri kolaylıkla
elde edebiliriz. Örneğin, 2 sayısını elde etmek
için şu bölümleri lojik 1 yapmamız
gerekmektedir: a, b, g, e, ve d. Bu durumda,
LED e göndermemiz gereken veri 1101101
olur.
B14M04 göstergesini çalıştırmak için cihaza
seri olarak 36 tane bit göndermemiz
gerekmektedir. Bunun için de ilk olarak 3 nolu
bacak lojik 0 yapılarak cihaz aktif yapılır. Daha
sonra veri bitleri ve her veri bitinden sonra bir
saat pulsu gönderilir. Bu şekilde 36 bit
gönderdikten sonra gösterge istenilen 4 sayıyı
(veya harfi) göstermiş olur.
Göstergeye
gönderilen bitlerin şu sırayı takip etmeleri
gerekmektedir:
Bit
Segment bölümü
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
başla biti
a1 (1.nci segment a)
b1
c1
d1
e1
f1
g1
desimal nokta 1
a2
(2.nci segment a)
b2
c2
d2
e2
f2
g2
desimal nokta 2
a3
(3.üncü segment a)
b3
c3
d3
e3
f3
g3
desimal nokta 3
a4
(4.üncü segment a)
b4
c4
d4
e4
f4
g4
desimal nokta 4
LED1
LED2
0
İlk olarak 1.nci segmentin (en sağdaki)
bitleri gönderilir, bunu takiben 2.nci, 3.ncü, ve
4.üncü (en soldaki) segmentlerin bitleri
gönderilir. Eğer göstergeye dıştan LED
bağlanmışsa ve bu LED leri yakmak istiyorsak
lojik 1 gönderilir, aksi halde lojik 0 gönderilir.
36. ncı bit olarak da 0 gönderilir. Böylece 4
segmente de arzu edilen bitleri göstermiş
oluruz.
Projenin devresi Şekil 3 de gösterilmiştir.
Mikrokontrolör 4MHz bir kristal
ile
çalışmaktadır. Göstergenin veri biti (pin 4)
mikrokontrolörün RB5 bacağına, saat (clock)
biti ise RB4 bacağına bağlanmıştır. Projede
göstergenin 1 ve 2 nolu bacaklarına 2 tane de
LED bağlanmıştır. Gösterge +5V gerilimle
çalışmaktadır.
Şekil 3 Projenin devresi
3.
;************************************
; PIC TABANLI 4 BASAMAKLI 7
;
SEGMENT LED PROJESİ
; ***********************************
;
Title “7 SEGMENT LED PROJESİ”
LIST p = 16F84
#include "p16f84.inc"
__CONFIG _WDT_OFF &
_RC_OSC & _PWRTE_ON &
_CP_OFF
;
; TANIMLAR
;
#define BANK0 bcf STATUS, 5
#define BANK1 bsf STATUS, 5
#define discl
PORTB, 4
#define disda PORTB, 5
;
; MAKROLAR
;
btfbs
MACRO file,bit,adres
btfsc
file,bit
goto
adres
ENDM
btfbc
MACRO file,bit,adres
btfss
file,bit
goto
adres
ENDM
jc
MACRO adres
btfsc 3,0
goto adres
YAZILIM
Projenin yazılımı Şekil 4 de verilmiştir.
Yazılım oldukça basit olup programın başında
programı
kolaylaştırıcı
bazı
makrolar
tanımlanır. Ana programda Port B bacakları
çıkış olarak tanımlanmıştır. Daha sonra
gösterge temizlenir (burada göstergenin veri
bacağı lojik 0 yapılıp 40 tane saat pulsu
verilmiştir. Esasen 36 tane puls yeterlidir fakat
tam bayt olsun diye 40 tane puls verilmiştir) ve
göstergeye PASS karakterleri ve bunu takiben 1
saniye aradan sonra 2004 sayısı yazılır.
Programda da görüleceği gibi, örneğin, P
karakterini göndermek için segmente 11001110
bitleri gönderilir. Böylece a, b, e, f, ve g
bölümleri yakılır ve P karakteri gösterilmiş
olur. Göstergeye gönderilecek olan 4 sayı veya
şekil dispbuf ile başlayan 4 tane yazmaçta
saklanmaktadır. goster alt-programı göstergeye
dispbuf da bulunan sayı ve karakterleri
göndermektedir. Göstergeye herhangibir sayı
göndermek için o sayıyı meydana getiren ve 1
yapılması gereken bitler to7seg isimli bir
tabloda saklanmıştırlar.
Bu tablo retlw
komutunu kullanarak verilen sayıya karşılık
gelen bit formatını ana programa aktarmaktadır.
Bu projede 1 saniyelik gecikme arka arkaya 4
tane 250ms gecikme kullanarak yapılmıştır.
ENDM
jnc
MACRO adres
btfss 3,0
goto adres
ENDM
;
; YAZMAÇLAR
;
sayac equ
sayi
equ
ms_reg equ
us_reg equ
dispbuf equ
0x0C
0x0D
0x0E
0x0F
0x10
ORG
0x00
;Programın başı
BANK1
clrf
TRISB
BANK0
;
;Göstergeyi sıfırla
;
movlw .40
movwf sayac
bcf
disda
clrdisp
call
saat
;Puls ver
decfsz sayac, 1
goto
clrdisp
;
;Gösterge temizlenmiştir. Şimdi PASS
;kelimesini yaz ve 1 saniye aradan
;sonra da 2004 sayısını yaz.
;
movlw B'11001110'
movwf dispbuf
movlw B'11101110'
movwf dispbuf+1
movlw B'10110110'
movwf dispbuf+2
movlw B'10110110'
movwf dispbuf+3
call
;
;1 saniye bekle
;
movlw
call
movlw
call
movlw
call
movlw
call
goster
.250
gecik_ms
.250
gecik_ms
.250
gecik_ms
.250
gecik_ms
movlw 2
call
to7seg
movwf dispbuf
movlw 0
call
to7seg
movwf dispbuf+1
movlw 0
call
to7seg
movwf dispbuf+2
movlw 4
call
to7seg
movwf dispbuf+3
bekle
call
goto
goster
bekle
;--------------------------------------------------; İlk olarak 4 üncü dispbuf (en sağdaki digit)
;gönderilmelidir.
;--------------------------------------------------goster
bsf
disda
call
saat
movfw dispbuf+3
movwf sayi
call
gonder8
movfw dispbuf+2
movwf sayi
call
gonder8
movfw dispbuf+1
movwf sayi
call
gonder8
movfw dispbuf
movwf sayi
call
gonder8
movlw 0
movwf sayi
call
gonder8
retlw
0
;------------------------------------------------------; Bu alt-program göstergeye 8 bit gönderir. Her
;basamak için bu alt-programa çağrılır. Bayt
;taki bitler taşma yoluyla sola kaydırılır.
;Eğer bit 1 ise (taşma = 1) göstergeye 1
;gönderilir, aksi halde 0 gönderilir.
;------------------------------------------------------gonder8
movlw .8
movwf sayac
gnd8
rlf
sayi, 1
jc
gnd1
bcf
disda
goto
gnd0
gnd1
bsf
disda
gnd0
call
saat
decfsz sayac, 1
goto
gnd8
retlw
0
;-------------------------------------------------saat
bsf
discl
bcf
discl
retlw
0
;-----------------------------------------------------;Bu alt-program ms gecikme verir. Girişte W
;yazmacında arzu
;edilen gecikme ms olarak bulunmalıdır.
;
; W=0, 256 ms gecikme vermektedir.
;------------------------------------------------------gecik_ms
movwf ms_reg
ms1
us1
movlw
addwf
nop
decfsz
goto
.249
us_reg, 1
us_reg, 1
us1
decfsz ms_reg, 1
goto
ms1
nop
retlw
0
;------------------------------------------------------to7seg
addwf PCL,1
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
B'11111100'
B'01100000'
B'11011010'
B'11110010'
B'01100110'
B'10110110'
B'10111110'
B'11100000'
B'11111110'
B'11110110'
;0
;1
;2
;3
;4
;5
;6
;7
;8
;9
end
Şekil 4 Projenin yazılım listesi
4.
SONUÇ
Bu yazımızda 4 basamaklı bir 7 segment
LED göstergenin seri olarak bir PIC
mikrokontrolöre
nasıl
bağlanabileceği
açıklanmıştır.
LED ve LCD göstergeler
mikrokontrolör tabanlı sistemlerde çok yaygın
olarak kullanılmaktadırlar. 7 segment LED
göstergelerin en büyük avantajları fiyatlarının
oldukça düşük oluşu ve parlak olduklarından
dolayı az ışık ortamında da kullanımlarıdır. Bu
tip LED lerin desavantajları ise genel olarak
sadece sayı göstermek için kullanılmalarıdır.
Bunun yanında LCD ler daha pahalı, fakat sayı
ve harf gösterimi için kullanılmaktadırlar.
Projede kullanılan B14M04 göstergenin
düşük fiyatı olup birçok mikrokontrolör tabanlı
projelerde kullanılmaktadırlar. Bu göstergenin
bir diğer avantajı ise mikrokontrolöre seri
olarak bağlanması ve sadece 2 çıkış portu
kullanmasıdır.
Böylece, mikrokontrolörün
diğer portları serbest olup başka amaçla
kullanılabilirler.
5.
KAYNAKÇA
[1]. Microchip web sitesi: www.microchip.com
[2]. Nexus Machines web sitesi:
www.nexusmachines.com
[3]. D. Ibrahim, “PIC C İle PC Haberleşme
Projeleri” Bileşim Yayıncılık ve Fuarcılık. A.Ş.,
2004, Türkiye
[4]. D. Ibrahim, “Newnes PICBASIC
Programlama Ve Uygulamalar” Bileşim
Yayıncılık ve Fuarcılık A.Ş., 2004, Turkey
[5]. D. Ibrahim, “PIC C Motor Kontrol
Projeleri”, Bileşim Yayıncılık ve Fuarcılık A.Ş.,
2004, Turkey
[6]. D. Ibrahim ve H. I. Mustafa
“PIC Programlama Ve İleri Projeler” Bileşim
Yayıncılık ve Fuarcılık A.Ş., 2004, Turkey