• Sonuç bulunamadı

3. MATERYAL VE METOD

3.7. Mikro denetleyici Yazılımı

3.7.2. Program Kodlarının Açıklaması

Yazılımı hazırlamaya baĢlamadan önce hangi programlama dilinin kullanılacağını tespit etmemiz gerekir. Bunun için Assembler, PICBASIC, CCS C ve bunlar gibi birkaç programla dili kullanılabilir. ÇalıĢmamızdaki yazılımı orta seviye programlama dili olan PICBASIC ile hazırladık. Öncelikle mikro denetleyicimizin lcd ekrana bağlantı bitlerini, Clock Frekans kaynağını ve elektronik devrede kullandığımız osilatörün frekansını belirtmemiz gerekir. Bunun için aĢağıdaki tanımlamalar yapılır.

DEFINE OSC 4

DEFINE LCD_DREG PORTB

DEFINE LCD_DBIT 4

DEFINE LCD_RSREG PORTB

DEFINE LCD_RSBIT 2 define lcd_RWREG PORTB define LC_RWBIT 2

DEFINE LCD_EREG PORTB

DEFINE LCD_EBIT 3 DEFINE LCD_BITS 4 DEFINE LCD_LINES 4

Daha sonra değiĢkenler tanımlanır. Bunlar programda SHT11'IN_DEGISKENLERI , DS1820'NIN_DEGISKENLERI, MENU_DEGISKENLERI baĢlıkları altında belirtilmiĢtir.

DeğiĢkenler tanımlandıktan sonra giriĢ ve çıkıĢ için kullanacağımız uçların tanımlanması gerekir. Eğer herhangi bir portun TRIS Registerinin ilgili bitine 1 değeri yüklenirse o portun ilgili ucu giriĢ ucu olarak, 0 değeri yüklenirse çıkıĢ ucu olarak tanımlanmıĢ olur. O halde PortA „nın TRISA registerinin tüm bitlerine 1 değeri, portb„nin TRISB registerinin ilk iki bitine 1 değeri, portC„nin TRISC registerinin tüm bitlerine 1 değeri, portE„nin TRISE registerinin ilk iki bitine de 1 değeri yüklenmelidir. adcon1=7 ifadesi ise tüm analog portları dijitale dönüĢtürür.

adcon1=7

CLEAR:TRISA=%11111111:TRISB=00000011:TRISC=%11111111:

TRISE=%00000011 :TRISD=%00000000

Programda BaĢlangıç baĢlığı altında değiĢkenlerin program baĢladığında alacakları ilk değerler belirtilmektedir. Sonra program ana döngü baĢlığı altındaki baĢla içerisinde sürekli dönmektedir. Sırasıyla iç sıcaklık ölçme, iç nem ölçme, dıĢ sıcaklık ölçme ve ekrana yazdırma iĢlemleri yapılmaktadır.

KONTROL=%00000011:HAM=0 'IC SICAKLIK ÖLÇME GOSUB OLCUMAL

Gosub SICAKLIK_HESAP

KONTROL=%00000101:HAM=0 'IC RUTUBET ÖLÇME GOSUB OLCUMAL

GOSUB RUTHESAP

GOSUB DS1820 'DIS SICAKLIK OLCME GOSUB EKRAN 'EKRANA YAZ

Yine ana döngü içerisinde kontrol paneli üzerinde bulunan butonlara basılıp basılmadığı kontrol edilmektedir.

IF PORTE.1 = 1 AND E=0 THEN 'klima butonu basıldı mı E=1

TOGGLE KLIMA

GOSUB KLIMA_KONTROL ENDIF

IF PORTE.1 = 0 THEN E=0

IF PORTA.5 = 1 AND E=0 THEN 'Ġç-DıĢ butonu basıldı mı E=1

TOGGLE IC_DIS

GOSUB IC_DIS_KONTROL ENDIF

IF PORTA.5 = 0 THEN E=0

IF PORTE.0 = 1 AND E=0 THEN ' manüel-auto butonu basıldı mı E=1

if manauto=1 then 'TOOGLE YAPIYOR manauto=0 else manauto=1 endif GOSUB MANUELAUTO ENDIF

IF PORTE.0 = 0 THEN E=0

IF GIRIS = 1 AND E=0 THEN 'Menü butonu basıldı mı E=1

CALL AYAR_MENULERI ENDIF

IF GIRIS=0 THEN E=0

Eğer PortE‟nin 0. Pinine bağlı olan Auto butonuna basıldı ise manauto değiĢkeni 1 olacak ve sistem otomatik konumda çalıĢmaya baĢlayacaktır. Auto konumunda sistem yukarıda akıĢ diyagramında belirtilen 12 durumdan hangisine o anki koĢuların uygun olduğunu denetler. Örneğin programda 1. ġart aĢağıdaki gibidir.

'1. Ģart

if sicaklik1<temp2 and temp2<term and nem<u1 then for iii=1 TO 50'SERVOYU SICAĞA GETĠRDĠ pulsout PORTd.2,50

pause 15 next iii

KLIMA_CIK = 1 'KLĠMAYI AÇ ENDIF

Ġç sıcaklık değeri, dıĢ sıcaklık değerinden küçük ve dıĢ sıcaklık değeri, istenen sıcaklık değerinden küçük ise sıcaklık ayar servo motorunu sıcak konumuna getirecek ve istenen nem değeri gerçek nem değerinden az olduğu için klimayı açarak ortamdaki nem değerini düĢürmeye çalıĢacaktır. Diğer 11 Ģartta da sıcaklık ve nem değerlerini karĢılaĢtırarak sıcaklık ayarını ve klima durumunu kontrol edecektir.

Programda devam eden satırlarda ĠġLEM'E BAġLA, R E S E T, SENSORE KOMUT GÖNDER, SICAKLIK HESAP ALT PROGRAMI, RUTUBET HESAP ALT PROGRAMI, SENSORYOK, DS1820, etiketleri ile baĢlayan satırlarda sensörler vasıtası ile ölçülen sıcaklık ve nem değerleri hesaplanmaktadır.

ġekil 3.17 Ana Menü Ekranı

AYAR_MENULERI etiketinin bulunduğu satırda giriĢ butonuna basılınca ekrana gelecek görüntü ve menü içerisinde yukarı aĢağı butonlarına basılınca hangi menülere gideceği belirtilmektedir. Eğer ana ekrandayken giriĢ tuĢuna basılırsa aĢağıdaki kod çalıĢacak ve ekrana resimdeki görüntü gelecektir.

AYAR_MENULERI:

lcdout $fe,$80,"********************" lcdout $fe,$c0," AYAR MENULERI " lcdout $fe,$94," + / - 'YE BAS "

lcdout $fe,$D4,"********************"

D=1

CALL CIK 'ÇıkıĢ eranı açılıyor ENDIF

IF ASAGI=0 THEN D=0

IF YUKARI=1 AND A=0 then A=1

call FAN_AYARI 'Fan ayarı ekranı açılıyor endif

IF YUKARI=0 THEN A=0

GOTO AYAR_MENULERI

ġekil 3.18 Ayar Menüleri Ekranı

Eğer Ayar menülerindeyken Yukarı butonuna basılırsa fan ayarı kodu çalıĢacak ve ekranda fan hızını ayarla yazısı gözükecektir.

FAN_AYARI:

lcdout $fe,$80,”********************” lcdout $fe,$c0,” FAN HIZINI AYARLA “ lcdout $fe,$94,” “

lcdout $fe,$D4,”********************”

E=1

call FAN_HIZI_AYARI „hız ayarı menüsüne git endif

IF GIRIS=0 THEN E=0

IF ASAGI=1 AND D=0 then D=1

CALL CIK „ çıkıĢ ekranına gidiyor ENDIF

IF ASAGI=0 THEN D=0

IF YUKARI=1 and a=0 then A=1

call SICAKLIK_AYARI‟T referans menüsüne git endif

if YUKARI=0 then a=0 goto FAN_AYARI

ġekil 3.19 Fan Hızını Ayarı Ekranı

Fan hızına ayarla ekranındayken yukarı ya da aĢağı butonlarına basılırsa menüde ilerlemeye devam edilecek ya da giriĢ tuĢuna basılırsa fan hızının ayarlandığı kod çalıĢacak ve ekranda yukarı aĢağı butonları vasıtası ile fan hızı ayarlanabilecektir.

FAN_HIZI_AYARI:

lcdout $fe,$80,”********************” lcdout $fe,$c0,” FAN HIZINI GIRINIZ “ lcdout $fe,$94,” FAN HIZI:”,#FAN,” “ lcdout $fe,$D4,”********************” IF ASAGI=1 then pause butongecikmesi FAN = FAN – 1 endif IF YUKARI=1 then pause butongecikmesi FAN = FAN + 1 endif IF FAN = 255 THEN FAN = 0 ENDIF IF FAN = 5 THEN FAN = 4 ENDIF

IF GIRIS=1 AND E=0 THEN E=1

SELECT CASE FAN

CASE 0

LOW PORTD.5 LOW PORTD.6 LOW PORTD.7 CASE 1 HIGH PORTD.4 LOW PORTD.5 LOW PORTD.6 LOW PORTD.7 CASE 2 HIGH PORTD.5 LOW PORTD.4 LOW PORTD.6 LOW PORTD.7 CASE 3 HIGH PORTD.6 LOW PORTD.4 LOW PORTD.5 LOW PORTD.7 CASE 4 HIGH PORTD.7 LOW PORTD.4 LOW PORTD.5 LOW PORTD.6 END SELECT CALL AYARLANDI ENDIF

GOTO FAN_HIZI_AYARI RETURN

ġekil 3.20 Fan Hızı Ayarı Alt Menü Ekranı

Bir diğer menü ekranı istenen referans sıcaklığı ayarlama ekranıdır. Burada da bir öncekiyle benzer bir kod çalıĢacak ve referans sıcaklık ayarlama penceresi ekrana gelecek giriĢ tuĢuna basılırsa yukarı ve aĢağı butonları vasıtası ile referans sıcaklık ayarlanacak yine giriĢ tuĢuna basılarak ayarlama iĢlemi tamamlanacaktır.

ġekil 3.22 Referans Sıcaklığı Ayarla Alt Menü Ekranı

Diğer menü ekranı ise istenen referans nemi ayarlama ekranıdır. Burada da bir öncekiyle benzer bir kod çalıĢacak ve referans nem ayarlama penceresi ekrana gelecek giriĢ tuĢuna basılırsa yukarı ve aĢağı butonları vasıtası ile referans nem ayarlanacak yine giriĢ tuĢuna basılarak ayarlama iĢlemi tamamlanacaktır.

ġekil 3.24 Referans Nemi Ayarla Alt Menü Ekranı

Ġç dıĢ hava çevrimi menüsüne gelindiğinde ekranda iç-dıĢ hava çevrimi yazısı görülecektir. Lcdout komutu lcd ekrana yazı yazdırmak amacıyla kullanılmıĢtır. Lcdout komutundan sonra kullanılan $80,$c0,$94 ve $d4 iĢaretleri ekranda yazı yazılacak satırı belirtmektedir. GiriĢ butonuna basılırsa iç dıĢ hava çevrimi ayarı alt menüsü açılacak ve havanın dıĢarıdan giriĢi ya da içeride sirkülâsyonu ayarlanabilecektir. AĢağı butonu nem ayarı menüsünü, yukarı butonu ise hava yönü ayarı menüsünü çağıracaktır.

IC_DIS_HAVA_AYARI:

lcdout $fe,$80,"********************" lcdout $fe,$c0," IC-DIS HAVA CEVRIMI" lcdout $fe,$94," "

lcdout $fe,$D4,"********************"

IF GIRIS=1 AND E=0 then E=1

CALL IC_DIS_HAVA ENDIF

IF GIRIS=0 THEN E=0

IF ASAGI=1 AND D=0 then D=1

ENDIF

IF ASAGI=0 THEN D=0

IF YUKARI=1 AND A=0 then A=1

CALL HAVA_YONU_AYARI ENDIF

IF YUKARI=0 THEN A=0 goto IC_DIS_HAVA_AYARI

ġekil 3.25 Ġç-DıĢ Hava Çevrimini Ayarla Ekranı

GiriĢ butonuna basılarak iç- dıĢ hava çevrimi alt menüsüne girilir. Bu menüden ayar yapıldıktan sonra aĢağıdaki iç_dıĢ_kontrol etiketli program çalıĢır ve ilgili servo motora hareket etme sinyali gönderilir. Burada pulsout komutu ile Portd.1‟e bağlı olan servo motorun 40 konumuna gitmesi sağlanır. Pause 15 ile 15ms. bekleyerek FOR iii = 0 to 50, next iii komutu ile de for next döngüsü kullanılarak iĢlemin 50 defa tekrarlanması komutu emredilir.

ġekil 3.26 Ġç-DıĢ Hava Çevrimini Ayarla Alt Menü Ekranı IC_DIS_KONTROL: IF IC_DIS=1 THEN ID1="I" ID2="C" ID3=" " ID4=" " ID5=" " FOR iii = 0 to 50 pulsout PORTd.1,40 pause 15 next iii ENDIF IF IC_DIS=0 THEN ID2=" " ID1=" " ID3="D" ID4="I" ID5="S" FOR iii = 1 to 50 pulsout PORTd.1,235 pause 15 next iii

ENDIF RETURN

Hava yönü menüsüne gelindiğinde ekranda hava yönü yazısı görülecektir. Lcdout komutu ile lcd ekrana bu yazı yazdırılmıĢtır. GiriĢ butonuna basılırsa hava yönü ayarı alt menüsü açılacak ve havanın çıkıĢ yönü belirlenebilecektir. AĢağı butonu iç-dıĢ hava yönü ayarı menüsünü, yukarı butonu ise hava servo sıcaklık ayarı menüsünü çağıracaktır.

ġekil 3.27 Hava ÇıkıĢ Yönünü Ayarla Ekranı

Bu menüde aĢağıdaki ekran görüntüye gelecek ve araç içi hava çıkıĢ yönü ayarı yapılabilecktir. Tesisatımızda bu ayar yukarı cama, orta havalandırma cam çıkıĢı karıĢımı, sadece orta havalandırma, yolcu ayaklarına giden havalındırma orta havalandırma ve aĢağı sadece yolcu ayaklarına giden havalandırma olarak beĢ kademeden oluĢmaktadır.

ġekil 3.29 Hava Yönünü Ayarla Alt Menü Ekranı

Menüde yukarı butonuna basarak devam ettiğimizde Hava sıcaklık servo ayarı menüsü ekrana gelecektir. Tekrar yukarı butonuna basarsak çıkıĢ, aĢağı butonuna basarsak hava yönü ayarı menüsüne dönecektir. GiriĢ butonuna basarak hava sıcaklık servo ayarı alt menüsü çağrılacaktır. Bu menüden ayar yapıldıktan sonra aĢağıdaki hava_sıcaklık etiketli program çalıĢır ve ilgili servo motora hareket etme sinyali gönderilir. Burada yine pulsout komutu ile Portd.2‟e bağlı olan servo motorun 50 sıcak konumuna, 215 ise soğuk konumuna dönmesini sağlar. Pause 15 ile 15ms. bekleyerek FOR iii = 0 to 50, next iii komutu ile de for next döngüsü kullanılarak iĢlemin 50 defa tekrarlanması komutu emredilir.

ġekil 3.30 Hava Sıcaklık Servo Ayarı Ekranı

HAVA_SICAKLIK:

lcdout $fe,$80,”********************” lcdout $fe,$c0,” HAVA SICAKLIK AYARI” lcdout $fe,$94,” YUKARISOGUK “ lcdout $fe,$D4,” ASAGI SICAK “

IF YUKARI=1 AND k=0 then k=1

for iii=1 TO 50 „SERVOYU SOĞUĞA GETĠRDĠ pulsout PORTd.2,215 pause 15 next iii ENDIF IF YUKARI=0 THEN k=0

IF ASAGI=1 AND k=0 then k=1

for iii=1 TO 50 „SERVOYU SICAĞA GETĠRDĠ pulsout PORTd.2,50

pause 15

ENDIF

IF YUKARI=0 THEN k=0

IF (GIRIS=1) and (k=0) THEN k=1 CALL AYARLANDI ENDIF IF GIRIS=0 THEN k=0 GOTO HAVA_SICAKLIK RETURN

Son olarak eğer menüde bir seçim yapmadan çıkmak istenirse yukarı ve aĢağı butonları vasıtası ile aĢağıdaki ekrana gelinir ve giriĢ tuĢuna basılırsa çık etiketli program çalıĢacak goto baĢla komutu ile baĢla etiketli ana program döngüsüne dönülecektir.

ġekil 3.31 Menüden ÇıkıĢ Ekranı CIK:

lcdout $fe,$80,"********************" lcdout $fe,$c0," MENUDEN CIKIS " lcdout $fe,$94," "

lcdout $fe,$D4,"********************"

IF GIRIS=1 AND E=0 then E=1

CALL CIKDEVAM ENDIF

IF GIRIS=0 THEN E=0

IF ASAGI=1 AND D=0 then D=1

CALL HAVA_SICAKLIK_AYARI ENDIF

IF ASAGI=0 THEN D=0

IF YUKARI=1 AND A=0 then A=1 CALL FAN_AYARI ENDIF IF YUKARI=0 THEN A= 0 goto CIK CIKDEVAM: LCDOUT $FE,1 GOTO BASLA

Benzer Belgeler