PIC16F84 ile Buton Kontrollü Led Efekt Devresi

PIC16F84 ile Buton Kontrollü Led Efekt Devresi

Bu uygulama, PIC16F84A ile buton kontrolü öğrenmek isteyenler için sade ve öğretici bir örnektir. Devrede PORTA tarafına bağlı 4 adet buton giriş olarak kullanılır, PORTB tarafındaki 8 LED ise çıkış olarak sürülür. Programın temel mantığı, butonları sırayla kontrol etmek ve hangi butona basıldıysa ona karşılık gelen LED efektini çalıştırmaktır.

Basit görünmesine rağmen bu çalışma; port yönlendirme, buton okuma, bekleme alt programı, sayaç kullanımı ve temel efekt üretme konularını aynı devre içinde göstermesi açısından faydalıdır. PIC ile giriş-okuma ve çıkış sürme mantığını ilk kez çalışanlar için iyi bir başlangıç devresidir.

Devrenin çalışma mantığı

Program ilk aşamada TRISA registerini giriş, TRISB registerini ise çıkış olacak şekilde ayarlar.

Ardından PORTB temizlenir ve butonlar sürekli döngü içinde test edilir. Herhangi bir butona basıldığında ilgili efekt alt akışı çalışır, efekt tamamlanınca program tekrar ana test bölümüne döner.

Şemaya bakıldığında RA0, RA1, RA2 ve RA3 pinlerine bağlı 4 butonun pull-up dirençlerle beslendiği, butona basıldığında girişin lojik 0 seviyesine çekildiği görülür.

Bu yüzden programda BTFSC PORTA,x testleri ile butonun basılı olup olmadığı kontrol edilmektedir. LED’ler ise RB0-RB7 üzerinden sürülür.

circuit-pic16f84-ile-buton-kontrollu-led-efekt-devresi

Butonlara göre çalışan efektler

  • 1. buton: İlk 4 LED yanıp söner.
  • 2. buton: Son 4 LED yanıp söner.
  • 3. buton: Tüm LED’ler birlikte yanıp söner.
  • 4. buton: İlk 4 ve son 4 LED sırayla dönüşümlü çalışır.

Bu yapı sayesinde aynı donanım üzerinde sadece yazılım değişikliğiyle farklı efektler üretmek mümkündür.

Efekt sayısı ve sırası geliştirilebilir, istenirse yürüyen ışık, sağ-sol kayan ışık veya farklı flaş örüntüleri de eklenebilir.

Flaş sayısı nasıl değiştirilir?

Programda efekt tekrar sayısı KNT değişkeni ile belirlenmiştir. İlgili bölümlerde yer alan:

MOVLW 0X03
MOVWF KNT

satırları, efektin kaç defa tekrar edeceğini belirler. Buradaki değer artırılarak flaş sayısı çoğaltılabilir.

Örneğin 0x03 yerine daha büyük bir değer yazıldığında efekt daha fazla tekrar eder.

8 bitlik sayaç kullanıldığı için teorik üst sınır 0xFF, yani 255 tekrardır.

PIC ile sayaç ve display kullanımını biraz daha ilerletmek isteyenler için 7 segment display nedir, anot katot yapı ve bağlantı mantığı içeriği de faydalı olabilir.

Akış diyagramı ne anlatıyor?

Akış diyagramı, yazılımın yapısını net biçimde gösterir.

Önce PIC tanıtılır, PORTA giriş ve PORTB çıkış yapılır, ardından PORTB temizlenir.

Sonraki aşamada butonlar sırayla test edilir.

Hangi buton basılıysa önce KNT sayacı yüklenir, sonra ilgili LED deseni PORTB’ye gönderilir ve ZAMAN alt programı çağrılır.

Sayaç sıfırlanana kadar bu işlem tekrar eder.

Alt tarafta yer alan ZAMAN akışı ise iki iç içe sayaç ile gecikme oluşturur. Böylece LED’ler çok hızlı değil, gözle görülebilecek hızda yanıp sönmüş olur.

Akış Diagramı

akis_diagrami

Yazılım tarafında dikkat çeken noktalar

Programda BTFSC, MOVLW, MOVWF, DECFSZ, CALL ve RETURN gibi temel assembly komutları birlikte kullanılmıştır.

Bu da örneği sadece LED yakma devresi olmaktan çıkarıp, giriş-çıkış ve kontrol akışı örneğine dönüştürür.

Bekleme için yazılan ZAMAN alt programı, iki kademeli döngü ile gecikme üretir.

Bu yöntem PIC assembly tarafında oldukça yaygındır ve zamanlayıcı kullanmadan temel bekleme oluşturmanın en bilinen yollarından biridir.

Benzer şekilde PIC assembly ve port kontrol mantığını güçlendirmek için mikroişlemciler ve mikrodenetleyiciler ders notları içeriği de iyi bir tamamlayıcı kaynak olur.

Küçük ama önemli bir not

Kodun UC_TEST bölümünde yer alan MOVWF KNTQ satırı, yazım hatası gibi görünüyor. Burada değişkenin KNT olarak kullanılması beklenir. Program derlenecekse bu satırın kontrol edilmesi gerekir. Bunun dışında yapı genel olarak buton test etme ve sayaçla efekt tekrarlatma mantığını doğru şekilde göstermektedir.

Bu devre neden öğretici?

  • Giriş ve çıkış portlarının nasıl yönlendirildiğini gösterir.
  • Buton okumada aktif düşük mantığın nasıl kullanıldığını öğretir.
  • Sayaç değişkeni ile efekt tekrar sayısını kontrol etmeyi gösterir.
  • Alt program mantığıyla gecikme oluşturmayı öğretir.
  • Aynı donanım üzerinde farklı yazılım desenleriyle farklı sonuçlar alınabileceğini gösterir.

Geliştirme fikirleri

Bu temel yapı daha sonra çok kolay şekilde geliştirilebilir.

Her butona farklı LED animasyonları atanabilir, butonlara basılı tutma ve kısa basma ayrımı yapılabilir, potansiyometre ile hız kontrolü eklenebilir ya da timer interrupt kullanılarak daha kararlı efektler elde edilebilir.

İstenirse bu yapı, röle sürme veya motor kontrol gibi daha pratik çıkış uygulamalarına da dönüştürülebilir.

Daha deneysel PIC uygulamaları denemek isteyenler için çok amaçlı PIC deney test kartı da pratik bir çalışma zemini sağlayabilir.

PIC16F84 ile buton kontrollü LED efekt devresi, küçük bir örnek olmasına rağmen PIC assembly mantığını anlamak için oldukça yararlıdır.

Buton okuma, port kullanımı, gecikme alt programı ve sayaçla efekt tekrar ettirme gibi temel başlıkları tek devrede toplar.

PIC ile ilk pratiklerini yapmak isteyenler için sade, anlaşılır ve doğrudan uygulanabilir bir çalışmadır.

	;PIC16F84 İLE 
	;BUTON KONTROLLÜ LED EFEKT DEVRESİ
	;-------------------------------------
	;WWW.320VOLT.COM
	;-------------------------------------
	LIST	 P=16F84		;PIC16F84' Tanıt	
	INCLUDE	 "P16F84.INC"	;PIC'in INCLUDE DOSYALARI TANIT
SAY1	EQU	0X0C			
SAY2	EQU	0X0D
KNT		EQU	0X0E			
	BSF		STATUS,5		;BANK1'E GEÇ
	CLRF	TRISB			;TRIB'Yİ TEMİZLE(PORTB ÇIKIŞ)
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	TRISA			;W'Yİ TRISA'YA YÜKLE(PORTA GİRİŞ)
	BCF		STATUS,5		;BANK0'A GEÇ
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
BIR_TEST
	BTFSC	PORTA,0			;PORTA'NIN 0. BİTİ '0' MI?
	GOTO	IKI_TEST		;HAYIR. IKI_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET.	W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
BIR
	MOVLW	0X0F			;W'YE h'0F' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	BIR				;HAYIR. BIR ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
IKI_TEST
	BTFSC	PORTA,1			;PORTA'NIN 1. BİTİ 'O' MI?
	GOTO	UC_TEST			;HAYIR. UC_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
IKI
	MOVLW	0XF0			;W'YE h'F0' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	IKI				;HAYIR. IKI ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
UC_TEST
	BTFSC	PORTA,2			;PORTA'NIN 2. BİTİ 'O' MI?
	GOTO	DORT_TEST		;HAYIR. DORT_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNTQ			;W'Yİ KNT'YE YÜKLE
UC
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	UC				;HAYIR. UC ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
DORT_TEST
	BTFSC	PORTA,3			;PORTA'NIN 3. BİTİ 'O' MI?
	GOTO	BIR_TEST		;HAYIR. BIR_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
DORT
	MOVLW	0X0F			;W'YE h'0F' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	MOVLW	0XF0			;W'YE h'F0' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	DORT			;HAYIR. UC ETİKETİNE GİT
	CLRF	PORTB			;EVET. PORTB'Yİ TEMİZLE
	GOTO	BIR_TEST		;BIR_TEST ETİKETİNE GİT
ZAMAN		
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	SAY1			;W'Yİ SAY1'E YÜKLE 
TEK1
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	SAY2			;W'Yİ SAY2'E YÜKLE 
TEK2		
	DECFSZ	SAY2,F			;SAY2'DEN '1' ÇIKAR SAY2'YE YÜKLE. SAY2 '0' Mİ?		
	GOTO	TEK2			;HAYIR. TEK2 ETİKETİNE GİT
	DECFSZ	SAY1,F			;EVET. SAY1'DEN '1' ÇIKAR SAY1'YE YÜKLE. SAY1 '0' Mİ?	
	GOTO	TEK1			;HAYIR. TEK1 ETİKETİNE GİT
	RETURN					;EVET. ALT PROGRAMIN SONU 	
	END						;PROGRAMIN SONU 

Uygulamanın kod ve simülasyon dosyaları;

Paylaş:

1 Yorum

  1. K
    kprm

    iyi günler hocam burada bir iki sorum olacak acaba bu videoda kullandığınız kristal 4mhz mi? ayrıca pic 16f84a yı programlarken configuration ayarları ne olmalı

    Yanıtla

Yorum Yap