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: dogan@neu.edu.tr, 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 PIC16F84 1 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 Machines 2 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 PIC 16F 84 B14M04 7 segment LED Şekil 1 Projenin blok şeması LED
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: f e a g d b c İ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 başla biti 1 a1 (1.nci segment a) 2 b1 3 c1 4 d1 5 e1 6 f1 7 g1 8 desimal nokta 1 9 a2 (2.nci segment a) 10 b2 11 c2 12 d2 13 e2 14 f2 15 g2 16 desimal nokta 2 17 a3 (3.üncü segment a) 18 b3 19 c3 20 d3 21 e3 22 f3 23 g3 24 desimal nokta 3 25 a4 (4.üncü segment a) 26 b4 27 c4 28 d4 29 e4 30 f4 31 g4 32 desimal nokta 4 33 LED1 34 LED2 35 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. 3. YAZILIM Şekil 3 Projenin devresi 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. ************************************ 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 btfbc jc MACRO file,bit,adres btfsc file,bit MACRO file,bit,adres btfss file,bit MACRO adres btfsc 3,0 jnc MACRO adres btfss 3,0 YAZMAÇLAR sayac equ 0x0C sayi equ 0x0D ms_reg equ 0x0E us_reg equ 0x0F dispbuf equ 0x10 ORG 0x00 Programın başı BANK1 clrf TRISB BANK0
Göstergeyi sıfırla clrdisp movlw.40 movwf sayac bcf disda 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. call 1 saniye bekle movlw B'11001110' movwf dispbuf movlw B'11101110' movwf dispbuf+1 movlw B'10110110' movwf dispbuf+2 movlw B'10110110' movwf dispbuf+3 goster movlw 2 movwf dispbuf movwf dispbuf+1 movwf dispbuf+2 movlw 4 movwf dispbuf+3 call goster bekle goto bekle --------------------------------------------------- İlk olarak 4 üncü dispbuf (en sağdaki digit) gönderilmelidir. --------------------------------------------------- goster bsf disda movfw dispbuf+3 call gonder8 movfw dispbuf+2 movfw dispbuf+1 movfw dispbuf ------------------------------------------------------- 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 decfsz sayac, 1 goto gnd8 -------------------------------------------------- saat bsf discl bcf discl
------------------------------------------------------ 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 movlw.249 addwf us_reg, 1 us1 nop decfsz us_reg, 1 goto us1 decfsz ms_reg, 1 goto ms1 nop ------------------------------------------------------- to7seg addwf PCL,1 retlw B'11111100' 0 retlw B'01100000' 1 retlw B'11011010' 2 retlw B'11110010' 3 retlw B'01100110' 4 retlw B'10110110' 5 retlw B'10111110' 6 retlw B'11100000' 7 retlw B'11111110' 8 retlw B'11110110' 9 end Şekil 4 Projenin yazılım listesi 4. SONUÇ 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 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