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
© Copyright 2024 Paperzz