Elektronik / Elektronik Kaynakları/

Mikro denetleyici tabanlı kontrol

Mersin üniversitesine ait ders notları hazırlayan: ÖĞR. GÖR. A. Osman Yağlıoğlu
“Mikro denetleyici tabanlı kontrol” hakkın da çok detaylı bilgiler bulunmakta çözümleri assembly yazılımları ile örnek devreler soru ve çözümler….

ALT PROGRAMLAR

Alt program nedir ? : Programlamada döngü kadar etkili bir diğer kullanım şekli de alt programlardır. Bu sistemde işlemin birkaç yerinde lazım olan bir program parçasını tekrar tekrar yazmak yerine, bu bölümü bir kez ayrı bir program gibi yazıp, bu parçanın gerekli olduğu yerde programın bu kısmını çağırmak (ya da o kısma atlamak) metodu kullanılır. Bu sadece bir program yazımından kısaltma ile kurtulmak değildir. Bir tablodan istenilen verinin seçilmesi veya programın çok fazla hafıza isteyip işlemcinizin bunu karşılayamadığı durumlarda, alt programlar adeta bir can yeleğidir.

Alt program yazımının bir programı ne kadar kısaltacağını görebilmek için, döngüler kısmında çözülen trafik ışığı öneğini birde alt program kullanarak çözelim.

Örnek 1.1: Bir kavşaktaki trafik ışıklarının aşağıda verilen zaman ve sıra içerisinde çalışması isteniyor. Trafik ışığı olarak led kullanarak gerekli devreyi tasarlayınız ve programını yazınız.

mikro-denetleyici-alt-program

Şekil 1.1: Trafik ışığı sorusu devre şekli

trafik-isigi-sorusu-devre-sekli

Çözüm: Devre şekli üstte verilmiştir. Yine zamanlama için 200*200=40000 turluk bekleme döngüsünü, 1 saniye olarak kabul ediyoruz.

;Trafik ışığı problemi,
;Lambalar:RB0:Yaya-kırmızı, RB1:Yaya-Yeşil
;RB2:Araç-sarı, RB3:Araç-Yeşil, RB4:Araç-Kırmızı
;Süre ve durumlar
;15 sn Araç-Yeşil,Yaya-Kırmızı
;5 sn Araç-Sarı,Yaya-Kırmızı
;15 sn Araç-Kırmızı,Yaya-Yeşil
;15 sn Araç-Sarı-Kırmızı,Yaya-Kırmızı
LIST P=16F84
; Registerler
STATUS EQU 3h
PORTA EQU 5h
PORTB EQU 6h
TRISA EQU 5h
TRISB EQU 6h
; Değişkenler

ZD1 EQU 0Fh
ZD2 EQU 0Eh
zaman EQU 0Dh
X1 org 0h ; Power on
goto START ; 0000
START bsf STATUS,5 ; Page 1
movlw 0h ; 0000-0000 sayısını W registerine al
movwf TRISB ; PortB yi çıkış olarak ayarla
;TRISB=00000000
bcf STATUS,5 ; Page 0
TOP movlw 09h ; 0 0 0 0 1 0 0 1
movwf PORTB ; Araç Yeşil, Yaya Kırmızı
movlw 0Fh
movwf zaman
call BEKLE ; Bekle 15 saniye
movlw 05h ; 0 0 0 0 0 1 0 1
movwf PORTB ; Araç Sarı, Yaya Kırmızı
movlw 05h
movwf zaman
call BEKLE ; Bekle 5 Saniye
movlw 12h ; 0 0 0 1 0 0 1 0
movwf PORTB ; Araç Kırmızı, Yaya Yeşil
movlw 19h
movwf zaman
call BEKLE ; Bekle 25 saniye
movlw 15h ; 0 0 0 1 0 1 0 1

movwf PORTB ; Araç Sarı-Kırmızı, Yaya Kırmızı
movlw 05h
movwf zaman
call BEKLE ; Bekle 5 Saniye
goto TOP ; Tekrarla
;********************************************************
; BEKLE alt programı
;********************************************************
BEKLE movlw .200
movwf ZD1
D1 movlw .200
movwf ZD2
D2 decfsz ZD2,F
goto D2
decfsz ZD1,F
goto D1
decfsz zaman,F
goto BEKLE
return
END

Örnek 1-2: Port B’de bağlı olan 8 adet ledi yakıp söndüren bir flip,flop programı yazınız. Bu programı yazarken zaman gecikmesini alt programlar şeklinde
yazınız?

Şekil 1.2: 8 adet led devresi (Yürüyen ışık devresi)

8-led-devresi-yuruyen-isik-devresi

Çözüm:

LIST P=16F84
INCLUDE “P16F84.INC”
S1 EQU h’00’
S2 EQU h’0D’
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
TEK MOVLW h’00’
MOVWF PORTB
CALL GECİKME
MOVLW h’FF’
MOVWF PORTB
CALL GECİKME
GOTO TEK

GECİKME MOVLW h’FF’ ;Alt program kısmı
MOVWF S1
DÖN1 MOVLW h’FF’
MOVWF S2
DÖN2 DECFSZ S2,F
GOTO DÖN2
DECFSZ S1,F
GOTO DÖN1
RETURN ;Altprogram sonu
END

Programın birinci kısmı port ayar işlemi yapmakta yani portB’nin tüm uçlarını çıkış olarak ayarlamaktadır.İkinci kısım ise porta b’00000000’ bilgisi ile b’11111111’ sayısını sırası ile göndererek port ucundaki ledlerin sönmesini ve yanmasını sağlamaktadır. Gecikme isimli son kısım ise porta yanma ya da sönme bilgisi gönderildikten sonra bekleme süresini ayarlamakta ve alt program şeklinde kullanılmaktadır.

Örnek 1.5: Zeminden üst katlara yük taşıyan bir asansörün bakım sistemi için şöyle bir düzenek isteniyor. Asansörün yukarı çıkıp aşağı dönüşü 1 tur sayılmak kaydıyla 40.000 tur sonunda bakım zamanının geldiğine dair bir sarı ikaz lambasının yanması isteniyor.

Eğer bakım yapılmadan çalışmaya devam eder ise 48.000 turdan sonra kırmızı ikaz lambasının yanması isteniyor. Şayet asansör bakım yapılmadan 2.000 tur daha çalıştırılırsa bu durumda asansörün çalışmasını engellemesi isteniyor. Bakım yapıldığında tur sayısının sıfırlanarak aynı işlemin tekrar devreye girmesi isteniyor. Bu işlem için gerekli devrenin prensip şemasını çiziniz ve programını yazınız.

(İpucu: Asansörün her bir turunu zeminde iken algılatma şeklinde düşünebilirsiniz.)

Çözüm: Burada esas olay asansörün iniş çıkış turlarını saydırmaktır. Normal sayıcı mantığıyla düşündüğünüzde bir değişkenle sayabileceğiniz en büyük sayı 255’tir. Bu şekilde düşündüğünüzde birler, onlar basamağı mantığı ile düşünüp 2 veya 4 değişken kullanarak program yazılabilir ki biraz uzunca bir program olur.

Ancak iç içe iki döngü ile tuş basmasını saydırırsak, bu durumda iç içe olmak üzere her ikisi de 200 turluk 2 döngü ile 200*200=40000 tur sonunda döngü tamamlanır. Sonunda 40000 tur sonunda yapılacak işlem yaptırılır. 8000 ve 2000 tur içinde aynı teknik kullanılabilir. Aşağıdaki çözüm bu mantığa göre tasarlanmıştır.

;Asansör koruma-bakım problemi
;RA0 ucunda asansor turlarını sayan buton sensor
;RB0 Sarı ışık ikaz
;RB1 Kırmızı ışık ikaz
;RB2 Asansor aktif/Pasif ucu, RB2=0 iken asansor calısır durumda
LIST P=16F84
STATUS EQU 3h
PORTA EQU 5h
PORTB EQU 6h
TRISA EQU 5h
TRISB EQU 6h
say EQU 0Ch ;
D0 EQU 0Dh ; döngü degiskeni 0
D1 EQU 0Eh ; döngü degiskeni 1

D2 EQU 0Fh ; döngü degiskeni 2
X1 org 0h ; Power on
goto START ; 0000
START bsf STATUS,5
movlw 0h
movwf TRISB
movlw 0fh
movwf TRISA
bcf STATUS,5
clrf PORTB
movlw .200 ;Asansor 40000 tur calıstı mı
movwf D1 ;sorusu icin 200*200=40000
ZD1 movlw .200 ;turluk dongu icinde
movwf D2 ;tus programı tekrarlanır
ZD2 call tus
decfsz D2,F
goto ZD2
decfsz D1,F
goto ZD1
bsf PORTB,0 ;40000 tur olmuştur SARI led yanar
movlw .40 ;Asansor 8000 tur daha calıstı mı?
movwf D1 ;sorusu icin 40*200=8000
ZD3 movlw .200 ;turluk dongu icinde
movwf D2 ;tus programı tekrarlanır
ZD4 call tus
decfsz D2,F

goto ZD4
decfsz D1,F
goto ZD3
bcf PORTB,0 ;48000 tur olmuştur SARI led söner
bsf PORTB,1 ;48000 tur olmuştur KIRMIZI led yanar
movlw .10 ;Asansor 2000 tur daha calıstı mı?
movwf D1 ;sorusu icin 10*200=2000
ZD5 movlw .200 ;turluk dongu icinde
movwf D2 ;tus programı tekrarlanır
ZD6 call tus
decfsz D2,F
goto ZD6
decfsz D1,F
goto ZD5
ZD7 bsf PORTB,2 ;50000 tur olmuştur KIRMIZI led zaten
;yanıktır,
goto ZD7 ;Asansor duması için RB2 ucu 1 yapılır ve
;Bu konumdan çıkmak için RESET butonuna
;basılana kadar beklenir.
;***********************************
; TUS Altprogramı
;***********************************
tus btfss PORTA,0 ;Asansorun 1 turu icin zemindeki
goto tus ;butona basılıp bırakıldı mı? şeklinde
tus2 btfsc PORTA,0 ;programla test etmek gerekir
goto tus2 ;tus ikilemesi gerekmez
return
END

ÇEVRİM TABLOLARI

Bazı programlarda, bir tablodan belirli değerlerin seçtirilmesi, sıkça lazım olan bir durumdur. Bunun için CALL komutu RETLW komutu ile birlikte kullanılır. Sistemde CALL komutu ile bir alt program çağırılırken eğer W registerinde bir değer varsa ve bu değer PCL ile toplanırsa bu sistem bir index gibi kullanılır. Bu index ile atlanan adımda RETLW değer şeklinde bulunan komut satırındaki değer W registerine aktarılarak alt programdan çıkılır ve böylece ilgili indexteki değer tespit edilmiş olur.

INTERRUPT

Interrupt nedir ?: Kelime anlamı olarak kesilim isteği anlamına gelen interrupt kelimesi, işlemcinin herhangi bir programı icra ederken, bu programa dışarıdan gelen bir sinyal sebebiyle ara verip, başka bir programa (interrupt alt programı) atlayıp, atladığı programı tamamladıktan sonra tekrar geri dönüp ilk kaldığı programdan devam etmesi işlemidir. Bu anlatımdan anlaşılacağı gibi interrupt bir alt program çalıştırma işleminin aynısı gibidir. Ancak, alt programın çağrılma şekli farklıdır.

Bu fark ise normal alt programı çağırma işlemi CALL komutu ile yapılırken, interrupt alt programının ise, normal programın herhangi bir anında dışarıdan gelecek bir sinyal ile çağırılması olayıdır.

Interrupt Çeşitleri:
Mask Edilemeyen Interruptlar:
Mask Edilebilen Interruptlar:
Pic16f84 için Interrupt çeşitleri:
Intcon Registeri:
Option Register

ADC KULLANIMI

Mikrodenetleyici kullanırken en çok rastlanan husus, bir fiziksel büyüklüğün ölçülmesi ya da ayarlanması şeklindedir. Mesela ortam sıcaklığının ölçülmesi ya da ayarlanması, ortam ışıklandırılması vb… Bu gibi durumlarda ADC kullanılması gerekmektedir. Bazı PIC serisi işlemcilerde kendi içerisinde ADC mevcuttur, ancak biz burada 16f84 ile ADC kullanarak yapılabilecek işlemlere bakacağız.

İşlemlerimizde ADC olarak ADC804 elemanını kullanacağız. 8 bit ADC uygulamaları için, B portunun ADC çıkışlarına birebir olacak şekilde bağlandığını kabul edeceğiz. Böylece diğer işlemler için sadece A portunu kullanacağız. Tabii ki burada dışarıdan çoğullama kullanılarak çok farklı çözümler üretmenin mümkün olduğu unutulmamalıdır

Şekil 3.1: ADC ile sıcaklık ölçme için ADC-PIC bağlantısı

adc-ile-sicaklik-olcme-icin-adc-pic-baglantisi

Şekilde görüldüğü gibi ADC çıkışları B portuna direk girilmiştir. Burada ADC’nin Vref/2 ucuna Vcc/2=2,5 Volt verildiği için ADC’nin çıkışındaki her bir sayı 5/256=19,53 milivolta karşılık gelmektedir. Böylece girişteki PTC ile R1 direncinden oluşan gerilim bölücü devre sayesinde, çıkışında sıcaklık değişimi sebebiyle oluşan her 19,53 milivolt değişimde bir sayı değişecektir. Burada kullanılan direncin değeri, PTC’nin istenilen sıcaklıktaki değerine yakın seçilirse sistemin çalışma hassasiyeti artar.

Örnek 3.2: Bir süpermarkette iç ortam sıcaklığının 22oC ile 25oC arasında ayarlanması isteniyor. Bu iş için sıcaklığı ölçmek amacıyla aşağıda değerleri verilen PTC kullanılmıştır. Gerekli devreyi çiziniz ve programını yazınız.

22 oC de PTC Direnci :22 K
25 oC de PTC Direnci :25 K

Çözüm : Burada, devrede bir harici ADC kullanılır ve PTC ile sabit bir direncin, gerilim bölücü olarak kullanılmasından faydalanılır. PTC direncinin değişimine göre de ADC’nin giriş voltajı (gerilim bölme kuralı ile) ile bu voltaja karşılık ADC’nin üreteceği sayı hesaplanır. Sonrasında problem, girişteki sayı X’den küçükse A işlemini yap, girişteki sayı Y’den büyükse B işlemini yap durumuna gelir.

Şekil 3.2: Pic16f84 ile ortam sıcaklığını kontrol devresi

pic16f84-ile-ortam-sicakligini-kontrol-devresi

ÖRNEK PROBLEMLER:

Aşağıda işlenen tüm konuları içerisine alan çözülmüş örnekler verilmiştir. Bu örneklerde esas amaç, gerçek hayattaki problemlerin mikroişlemciye uyarlanmasını sağlamaktır. Ayrıca bu örnekler programlamanın değişik durumlarını öğretmesi açısından faydalı olacaktır.

Örnek problem 1: Bir süpermarkette kapıların otomatik çalışması istenmektedir. Bu iş için kullanılacak optik sensörler görüş açısındaki cismi algılayınca 1, boşta iken 0 vermektedirler Bir kapının giriş-çıkış şeklinde çalışması için gerekli devreyi tasarlayınız. Kapı ortasında kimsenin sıkışmaması için gerekli tedbiri alınız.

Çözüm: Burada en az 3 sensöre ihtiyaç olacaktır. Bunlar kapıda biri olduğunu algılayan sensör ile kapı tam açık ya da kapı tam kapalı şeklindeki değerleri veren limit switch şeklindeki kapı açık-kapalı sensörleridir. Bunlar olduğunda problem kapıda biri varsa ve kapı tam açık değilse kapı açma motorunu çalıştır. Kapıda kimse yoksa ve kapı kapalı değilse kapı kapatma motorunu çalıştır şeklinde düşünülür.

;Otomatik kapı sorusu çözümü
;RB0,RB1 uçlarında kapıda biri var işareti veren sensörler bağlı
;RB2 de kapı tam açık sensörü bağlı
;RB3 te kapı tam kapalı sensörü bağlı
;RA0 ucunda kapıyı açan motor bağlı
;RA1 ucunda kapıyı kapatan motor bağlı
LIST P=16F84
STATUS EQU 3h
PORTA EQU 5h
PORTB EQU 6h
TRISA EQU 5h
TRISB EQU 6h
X1 org 0h ; Power on
goto START ; 0000
START bsf STATUS,5
movlw h'FF' ;B portu giriş
movwf TRISB
movlw 00h ;A portu çıkış
movwf TRISA
bcf STATUS,5
sil clrf PORTA
kontrol movf PORTB,w
andlw 03h ;sadece RB0 ve RB1 bilgilerini ayırmak için
btfsc STATUS,2 ;kapıda biri yoksa ANDLW işleminin sonucu
;0 dır
goto kapat
ac btfsc PORTB,2
goto sil
movlw 01h
movwf PORTA
goto kontrol
kapat btfsc PORTB,3
goto sil
movlw 02h
movwf PORTA
goto kontrol
END

Örnek problem 2: Bir süpermarkette iç ortam aydınlığının 100 Lüx’ün üzerinde ayarlanması isteniyor. Bu iş için aydınlık derecesini ölçmek amacıyla aşağıda değerleri verilen LDR kullanılmıştır. Ayrıca aydınlatma lambaları iki ayrı grup altında birleştirilmiştir. Buna göre, ışık miktarı 80 Lüx’den az iken her 2 grup lambanı yanması, 80-100 Lüx arasında ise 1 grup lambanın yanması isteniyor.

Eğer, ışık miktarı 100 Lüxün üzerinde ise lambaların sönük olması isteniyor. Gerekli devreyi çiziniz ve programını yazınız.

80 Lüx’de LDR Direnci :100 K
90 Lüx’de LDR Direnci :90 K
100 Lüx’de LDR Direnci :80 K

Çözüm : Yine ADC gerektiren bir örnek. Burada aydınlığı ölçecek LDR ile bir gerilim bölücü direnç kullanarak ve kritik aydınlık değerlerinde ADC’nin üreteceği sayı hesaplanarak, büyük-küçük kıyaslamaları ile problem çözülür.

Örnek problem 3: Bir cam üretim tesisinde, hareketli bant sistemi üzerindeki ürünlerin kalitesi 4 ayrı noktadaki optik sensörlerle kontrol ediliyor. Bu sensörlerin her biri malzeme normal ise 0, problemli ise 1 veriyor. Her bir sensörün kendi yanında bir adet imha pistonu mevcut olup, herhangi bir sensörden hatalı imalat bilgisi gelirse, ona bağlı olan pistonun 1 mili saniye süreyle ileri gidip sonra tekrar geri gelmesi isteniyor. Bu işlem için gerekli devrenin prensip şemasını çiziniz ve programını yazınız.

Örnek problem 4: Bir asansör sisteminin fazla yük konusundaki problemleri çözme konusu şu şekilde ayarlanıyor. Eğer asansördeki yük 3000 kilogramdan az ise tek motor devreye girerek asansörü çalıştırıyor. Eğer yük 3000-5000 kilogram arasında ise iki adet motor ile sistemin çalışması sağlanıyor. Eğer yük 5000 kilogramdan fazla ise, bu durumda asansörün hareket etmemesi ve aşırı yük alarmının devreye girmesi isteniyor. Bu problemin çözümü için kullanılan basınç sensörü hiç yük yokken değeri 1000 ohm olup elemanın direnç değeri her 1 kilogramda 1 ohm artmaktadır. Bu işlem için gerekli devrenin prensip şemasını çiziniz ve programını yazınız.

Örnek problem 6: Dönen platform şeklindeki bir alış-veriş reyonunda, kontrol sisteminin reyondaki malın çok azalması veya normalden fazla olması problemleri çözme konusu şu şekilde ayarlanıyor. Reyondaki yük 300 kilogramdan az ise tek motor devreye girerek reyonun dönmesini sağlıyor; eğer yük 300-500 kilogram arasında ise iki adet motor ile sistemin çalışması sağlanıyor.

Şayet yük 500 kilogramdan fazla ise bu durumda sistemin hareket etmemesi isteniyor ve yük 700 kilogramdan fazla ya da 100 kilogramdan az ise yine sistemin çalışmayıp bir ikaz alarmının devreye girmesi isteniyor. Bu problemin çözümü için kullanılan basınç sensörü hiç yük yokken değeri 100 ohm olup elemanın direnç değeri her 1 kilogramda 1 ohm artmaktadır. Bu işlem için gerekli devrenin prensip şemasını çiziniz ve programını yazınız.

MPLAB KULLANIMI

Bu bölümde MPLAB Ver 3.31.00 versiyonunun çalıştırılması ve kullanımı ana hatlarıyla anlatılacaktır. MPLAB programının diğer versiyonları da bu versiyon ile menü açısından benzerlik göstermektedir. Bu sebeple bu bölüm iyi anlaşıldığında, programın diğer versiyonları da kullanılabilir. Not: bu yazının bulunduğu dosya arşivden çıkartıldı aynı yazı daha önce sitemize eklenmiş Microchip Mplab Kullanım Kılavuzu

Yukarıda özetler verilmiştir dosyaların tamamı: Mikro denetleyici tabanlı kontrol

Dosya indirme LINK listesi (TXT formatında) link-19012.zip şifre-pass: 320volt.com

Yorum

Soru: