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

Yorumlar

Transkript

HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre
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
geliyor m u ?
Hayır
Evet
Lamba yanıyor mu?
Hayır
Lambayı yak
Evet
Lambayı söndür
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
GOTO
0x000
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/

Benzer belgeler

PIC Programlamaya Giriş

PIC Programlamaya Giriş yapılabilir. Sonuç olarak bir PIC'i programlamak için; program(.asm), derlenmiş program(.hex), programcı arayüzü ve programcı devresi gerekir. PIC kullanarak bir program veya çalışan bir devre yapa...

Detaylı

Çizgi İzleyen Robot Yapımı

Çizgi İzleyen Robot Yapımı buradan motor sürücüyü besler,7805 kullanıp oluşan sabit 5V ile ana devreyi ve CNY70 devresini beslersek bu problemde ortadan kalkacaktır. 2)CNY70 ve Motor Sürücüler İle İletişimi Sağlamak İçin Ger...

Detaylı

Deney 1 - WordPress.com

Deney 1 - WordPress.com ; 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. ...

Detaylı