You are on page 1of 7

Hacettepe Robot Topluluğu

HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

Makaleler
PIC ile LED Yakıp Söndüren
Devre
HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

PIC ile LED Yakıp Söndüren Devre


Canol Gökel - 13 Ekim 2006

Giriş
Merhaba arkadaşlar, bu makalemizde PIC'e yeni başlayanlar için basit bir devre yapacağız.
Mikrokontrolörümüzü kullanarak bir LED'i yakıp söndüreceğiz. Günlük hayatta lambaları yakıp
söndürme işlemi iki şekilde yapılır; birincisinde, bir düğmeye basarsınız (yani bir anahtarı
kapatırsınız) ve düğme basılı olduğu sürece (anahtar kapalı kaldığı sürece) lamba yanık kalır.
İkinci şekilde ise; bir düğmeye basarsınız (anahtar kapanır ve hemen tekrar açılır, yani bir sinyal
gönderir) ve lamba yanar, tekrar basarsınız (yine aynı şekilde anahtar kapanır ve hemen
kendiliğinden açılır) lamba söner.
Birinci şekilde yapılacak bir devre mikrokontrolör gerektirmeyeceğinden biz ikinci şekilde çalışan
bir devre hazırlayacağız.

Assembly Programı
İlk olarak mikrokontrolörümüz için bir program yazacağız. Programı assembly dili ile
kodlayacağız. Elbette mikrokontrolöre HEX uzantısına dönüştürülmüş (yani derlenip makine
koduna çevrilmiş) halini yükleyeceğiz. Bu işlemi MPLAB ya da MPASM programını kullanarak
yapabilirsiniz.

Biraz görsellik katıp anlamanızı kolaylaştırmak açısından bir akış diagramı hazırlayarak işe
başlayabiliriz:

Değişkenleri ayarla,
giriş/çıkış pin'lerini ayarla

Dü ğ me d e n s i n y a l Evet Evet
Lamba yanıyor mu? Lambayı söndür
geliyor m u ?

Hayır Hayır

Lambayı yak
HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

Diagramı açıklayacak olursak: İlk olarak yapılması gereken ufak ayarlar yapılıyor. Örneğin
değişken adlarını ayarlıyoruz, hangi geçidin hangi pin'inin giriş hangi pin'inin çıkış olacağını
belirliyoruz vs... Daha sonra programımız sürekli olarak düğmenin bağlı olduğu pin'i kontrol
ediyor. Eğer o pin'den bir sinyal gelirse lambanın bağlı olduğu pin'i “high mode”a çekiyor, yani
+5V yapıyor. Böylece lambamız yanıyor. Ondan sonra yaptığı şey yine giriş pin'ini kontrol etmek
ve yeni sinyaller beklemek. Tekrar bir sinyal aldığı taktirde pin'i “low mode”a çekecek yani 0V
yapacak ve lamba sönecek. Bu kontrol işlemi PIC'e güç verdiğiniz sürece devam edecek.

Şimdi programımızın kodlarını yazalım. Programın gerekli yerlerine açıklamalar koydum ama
PIC assembly dilini zaten bildiğinizi varsayarak yalnızca programın mantığı ile ilgili açıklamalar
yazdım. “;” noktalama işaretinden sonra yazılan yazılar “yorum”lardır ve derleyici tarafından
dikkate alınmaz. Ben de açıklamaları yorum şeklinde programa dahil ettim.
list p=16F84 ; Mikrokontrolörün modelini belirttik.
#include <p16F84.inc> ; PIC16F84'e has bazı değişkenleri programa dahil
; ettik.

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


; PIC'in ayarlarını yaptık. Örneğin WDT timer'ını kapattık,
; kristal osilatör kullanacağımızı belirttik.

; Şimdi değişkenleri ayarlayacağız:


#DEFINE DUGME PORTB, 1 ; Düğmemizin bağlı olduğu pin'i tanımladık.
#DEFINE LED PORTB, 2 ; LED'imizin bağlı olduğu pin'i tanımladık.
#DEFINE YANIK 0X20, 0 ; LED'in anlık durumunu (yanık ya da
; sönük) aklında tutan değişkenimizi
; (daha doğrusu bit'imizi) tanımladık.
SAYAC_1 EQU 0X21 ; Program içinde kullanacağımız sayaç için gerekli
SAYAC_2 EQU 0X22 ; olan değişkenler.

ORG 0x000
GOTO main ; PIC'e ilk çalıştırılacak olan alt programa gitmesini
; söyledik.

GECIKME
; Düğmeye basıldığında oluşan arkı algılamamak için bir bekleme yapacağız.
; Bu gecikme prosedüründe iki değişkene 255 değeri atıyoruz daha sonra da
; bunları azaltmakla zaman harcayarak bir bekleme rutini gerçekleştiriyoruz.
MOVLW D'255'
MOVWF SAYAC_1
MOVWF SAYAC_2
SAYAC_AZALT
MOVWF SAYAC_1
SAYAC_1_AZALT
DECFSZ SAYAC_1
GOTO SAYAC_1_AZALT
HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

DECFSZ SAYAC_2
GOTO SAYAC_AZALT
RETURN

TERSLE ; LED yanıksa söndüren, sönükse yakan alt programımız.


BTFSC YANIK ; YANIK bit'ini kontrol et.
GOTO $+2 ; YANIK bit'i 1 ise 2 satır sonraya git.
GOTO $+3 ; YANIK bit'i 0 ise 3 satır sonraya git.
CALL LED_SONDUR ; LED'i söndürme alt programını çağır.
GOTO $+2
CALL LED_YAK ; LED'i yakma alt programını çalıştır.
CALL GECIKME ; Düğmeye bastıktan sonra oluşacak olan arklar
CALL GECIKME ; geçinceye kadar bekle.
CALL GECIKME
RETURN ; Ana programa geri dön.

LED_YAK ; LED'i yakan alt program.


BSF LED ; LED'i yak.
BSF YANIK ; YANIK bit'ini 1 yap.
RETURN

LED_SONDUR ; LED'i söndüren alt program.


BCF LED ; LED'i söndür.
BCF YANIK ; YANIK bit'ini 0 yap.
RETURN

main ; İlk olarak çalıştırılacak olan kısım.


BSF STATUS, RP0 ; Kodlama yaptığımız bank'ı değiştiriyoruz.
CLRF TRISA ; A portunun tüm pin'lerini çıkış yapıyoruz.
; Aslında A portunu kullanmadığımızdan çok da önemli
; değil.
MOVLW B'00000010'
MOVWF TRISB ; B portunun 1. bitini giriş diğer bit'lerini çıkış
; yaptık.
BCF STATUS, RP0 ; Tekrar bank değiştirdik.
CLRF PORTB ; PIC'e ilk güç verdiğimizde düğmeye basılıymış
; gibi gözükmesin diye B portunun değerlerini low
; yaptık. Elbette yalnızca 1. bit'i low yapmak da
; yeterdi.
LED_YAK_SONDUR ; Düğmenin basılıp basılmadığını kontrol ettiğimiz kısım.
BTFSC DUGME ; Düğme basılı mı?
CALL TERSLE ; Basılıysa LED'in durumunu tersle.
GOTO LED_YAK_SONDUR ; Düğmenin basılı olup olmadığını tekrar
; kontrol et.
END
HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

Devre
Programımızı yazdıktan sonra derleyicimizle derliyoruz ve PIC'imize derlenmiş kodu yüklüyoruz.
Bu adımları bu makalede adım adım anlatamayacağım çünkü o konulardan ayrı bir yazı konusu
çıkar.

Şimdi devre şemasına kısaca bir göz artalım:

0V +5V 0V +5V

PIC 16F84

10KΩ

Düğmenin PIC ile birleşen kısmına direnç koymamızın nedeni düğme basılı değil iken PIC'in giriş
pin'inine 0V vermek istememiz. Düğmeye basıldığında 5V'luk değer kısa devre aracılığı ile PIC'le
buluşacak direnç üzerinde de 5V'luk bir gerilim farkı oluşarak 5V'un ve toprağın kısa devre
olmasını engelleyecek. Bunun dışında kristalli olan kısım ve PIC'in bacaklarına bağlanan kablolar
dışında devrenin mantığını anlamış olmanız gerekiyor (zaten geriye bir tek LED'li ve düğmeli
kısım kaldı). Eğer anlamadıysanız elektronik konusunda biraz daha çalışmalısınız. Daha sonra
yeniden bu yazıya dönebilirsiniz.
HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre

Benim hazırladığım devrenin birkaç açıdan fotoğrafı:

Şimdi devreye +5V vererek sisteminizi çalıştırabilirsiniz. Yani breadboard'un kırmızı çizgili
sütununa güç kaynağınızın +5V'luk ucunu mavi çizgili sütununa ise toprak ucunu
bağlayacaksınız. Eğer çalışmazsa kabloların breadboard'a tam olarak yerleştiğinden ve PIC'in
doğru bacaklarına doğru voltajı uyguladığınızdan emin olun. Yine çalışmazsa düğmeye
bastığınızda doğru bacağa +5V'un ulaştığını avometrenizle kontrol edin. Eğer yine çalışmazsa
yazdığınız programın yukarıdaki ile aynı olduğundan ve programın HEX kodunu PIC'e doğru bir
biçimde yüklediğinizden emin olun. Bir de devreniz çalışmadığı taktirde PIC'in ısınıp
ısınmadığını ara ara kontrol edin, eğer PIC çok ısınırsa mutlaka güç kaynağını devreden sökün ve
bağlantıları gözden geçirin.
Sorularınız için sitemizin forum bölümünü ziyaret edebilirsiniz. İyi çalışmalar.

Bağlantılar
http://robot.ee.hacettepe.edu.tr/

http://www.microchip.com/

You might also like