HUNRobotX - Makaleler - PIC ile LED Yakıp Söndüren Devre
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ş
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...
Ç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...
içindekiler 1. klavye................................................................................ 11
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.
...