www.aliozdemir.net

22.06.2011 

 

MİKRODENETLEYİCİLER

(MICROCONTROLLER)

 

 

_______________________________________________________________________________________________

 

Mikrodenetleyiciler hakkında bilgiler içeren kitabımın

bir bölümünü buraya tıklayarak indirebilirsiniz.

 

_______________________________________________________________________________________________

 

 

 

 

_______________________________________________________________________________________________

 

Mikroişlemci (Mİ, MP)

 

Verilen komutlara göre matematiksel işlemleri yapan entegredir. Yüzlerce çeşidi vardır. Çok yüksek hızlarda (GHz) çalışabilir. Bilgisayar, telefon santrali, robot, otomasyon sistemleri ve uzay araçlarında kullanılır.

Mikroişlemcileri programlamak, devreye bağlamak için ileri elektronik ve bilgisayar programlama dili/dilleri bilmek gerekir.  

Ledleri, röleleri, tristörü, triyakı, optokuplörü vb. mikroişlemcili sistemlerle kontrol etmek pahalı bir yoldur.

 

 

_______________________________________________________________________________________________

 

Mikrodenetleyici (MD, MC)

 

Hız olarak mikroişlemciden çok düşüktür. Ancak MD’nin içinde bellek birimi, port birimi gibi düzenekler de mevcuttur.

 

Özet olarak Mİ’yi zeka düzeyi çok yüksek bir beyin olarak düşünebiliriz. MD ise orta zekalı bir beyin ve el, ayak, göz, kulaktan oluşan bir sistemdir.

 

Mİ’ye buton ve ledi doğrudan bağlayamayız. Ara yongalar (chip, entegre, tümleşik devre) gerekir. Ama MD’ye buton, anahtar, sensör, led, transistör, triyak gibi elemanlar direkt olarak bağlanabilir.

 

_______________________________________________________________________________________________

 

PIC'i programlamak için:

- Assembly

- BASIC

- JAL

- C

dilleri kullanılabilir.

 

Assembly dili karasabana, BASIC dili traktör pulluğuna, C ise tam otomatik pulluklu traktöre benzetilebilir.

Lise ve MYO öğrencilerinin en çabuk öğrendiği dil BASIC'dir. BASIC dilinin komutlarıyla elektrik, elektronikle ilgili her türlü cihazın üretimi yapılabilir.

 

BASIC dilinin piyasada değişik firmalar / kişiler tarafından üretilmiş 4-5 farklı türü vardır. Her bir dil arasında bir kaç komut farklı biçimde ifade edilir. Örneğin bekletme komutu WAITMS ve PAUSE olarak yazılabilmektedir.

 

Bu dokümanda anlatılan PIC SIMULATOR IDE yazılımının kullandığı (anladığı) bekletme komutu WAITMS'dir. Eğer bekletme mikrosaniye cinsinden olacaksa komut WAITUS olarak yazılır.

 

PIC BASIC PRO dilinde ise bekleme komutu PAUSE ve PAUSEUS'tur.

 

 

Uygun görülen / tercih edilen dille yazılan program PIC'e yükleneceği zaman MAKİNE DİLİ'ne çevrilir. Yani *.BAS olan dosya *.HEX biçimine çevrilir.

 

 

_______________________________________________________________________________________________

 

 

PIC SIMULATOR IDE

ve

PROTEUS / ISIS

 

YAZILIMLARI İLE PIC BASIC DİLİNİN KOMUTLARINI KULLANARAK MİKRODENETLEYİCİLERİ PROGRAMLAMAK

 

 

_______________________________________________________________________________________________

 

PIC SIMULATOR IDE'Yİ İNDİRMEK İÇİN LİNK

 

http://hotfile.com/dl/120428852/bd162a9/00PIC_SIM_IDE.rar.html

 

_______________________________________________________________________________________________

 

PROTEUS YAZILIMININ 6.9 YA DA 7.7 SÜRÜMÜNÜ GOOGLE.COM SİTESİNDEN ARATARAK TEMİN EDEBİLİRSİNİZ.

 

_______________________________________________________________________________________________

 

 

MİKRODENETLEYİCİ İLE ÇALIŞAN TEMEL DEVRELERİ BİLGSAYARINIZA İNDİREBİLMEK İÇİN BURAYA TIKLAYINIZ (22.06.2011)

 

 

_______________________________________________________________________________________________

 

 

 

PIC (perihaberal interface controller, çevre birimlerini denetleyen arayüz)

 

PIC ile:

- Her türlü otomatik kumanda devresi kontrol edilebilir.

- PLC cihazının yaptığı her iş 20’de 1 fiyata yapılabilir.

- Ledli kayan yazı panoları hazırlanabilir.

- Ledli, 220 V lambalı ışık oyunları hazırlanabilir.

- DC/AC motorlar, step (adım) motorlar kontrol edilebilir.

- Her türlü alarm (hırsız, yangın) devresi tasarlanabilir.

- Uzaktan kumandalı devreler yapılabilir.

- Isı, ışık, ses, nem, basınç, ağırlık ölçme devreleri yapılabilir.

 

_______________________________________________________________________________________________

 

PIC’in çalıştırılması için:

- 1 adet 220 V giriş / 6, 8, 12 V çıkışlı, 4-5 W güçlü bir trafo

- 1 adet 0,5-1 A köprü diyot

- 1 adet 470-1000 mikrofarat / 16 V kondansatör

- 1 adet 7805 regülatör entegresi

- 1 adet 100-330 nanofaratlık kondansatör

- 1 adet 4 – 20 MHz x-tall (kristal) ya da basit R-C osilatör

- 2 adet 22 pF kondansatör (x-tall için)

- 1 adet 3,3-10 K arası sabit direnç (MCLR ucuna besleme verebilmek için)

yeterlidir. Bu elemanlar PIC’in iş görür hale gelmesini sağlar.

 

Bilgisayar ortamında BASIC dilinin komutları kullanılarak yazılan program HEX kodlarına çevrilir. Yani, insanın anladığı komutlar entegrenin anladığı makine diline çevrilir. 


 

_______________________________________________________________________________________________

 

MİKRODENETLEYİCİLERİ TEMEL VE ORTA DÜZEYDE ÖĞRENMEK İÇİN YAPILMASI GEREKEN DENEYLER

 

 

Assembler diliyle sistem tasarlamak eziyettir. O nedenle BASIC ya da C diliyle çalışılmalıdır.

 

 

Aşağıda verilen deneyler PIC SIMULATOR IDE (PSI) yazılımının BASIC COMPILER adlı editörüyle yazılacak ve simülasyonları (benzetim) yine PSI ile yapılacaktır.

 

 

 

 

 

 

Deney 1: PIC16F84A adlı mikrodenetleyicinin B port’unun 0. bit’ine (PORTB.0) ledi yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz (derleyiniz, compile) ve benzetimini PSI ile yapınız.  

 

 

1. YÖNTEM

 

       TRISB = %00000000  'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB=%00000001

       END

 

Not: PORTB’yi çıkış olarak ayarlama işleminde BINARY (İKİLİ) sayı kullanılmıştır.

 

 

 

 

Yukarıdaki programın makine dilindeki karşılığı:

 

:100000008A110A120528000009008316860183124E
:08001000013086000A280B28CC
:02400E00FD3F74
:00000001FF
 

 

----------------------------------------------------------------------------------------------

 

2. YÖNTEM

 

       TRISB = 0                       'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB=%00000001

       END

 

Not: PORTB’yi çıkış olarak ayarlama işleminde DESIMAL (ONLU) sayı kullanılmıştır.

 

* END komutu programın bittiğini belirtir.

 

----------------------------------------------------------------------------------------------

 

 

3. YÖNTEM

 

       TRISB = 0x00                   'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB=%00000001

       END

 

Not: PORTB’yi çıkış olarak ayarlama işleminde HEXADECIMAL (ONALTILI) sayı kullanılmıştır.

 

----------------------------------------------------------------------------------------------

 

 

4. YÖNTEM

 

       TRISB = %00000000         'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB.0 = 1

       END

 

Not: PORTB’nin sadece 0. bit’ine lojik 1 (5 V) yollanmıştır.

      

 

 

 

_______________________________________________________________________________________________

 

 

 

Deney 2: PIC16F84A adlı mikrodenetleyicinin B port’unun 0. (PORTB.0) ve 1. bit’ine (PORTB.1) ledleri yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz (derleyiniz, compile) ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000                              'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB=%00000011

       END

 

 

Yukarıdaki programın makine dilindeki karşılığı:

 

:100000008A110A120528000009008316860183124E
:08001000033086000A280B28CA
:02400E00FD3F74
:00000001FF
 

 

_______________________________________________________________________________________________

 

Deney 3: PIC16F84A adlı mikrodenetleyicinin B port’unun 8 pin’ine bağlanan 8 ledi yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000                               'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB=%11111111

       END

 

_______________________________________________________________________________________________

 

 

Deney 4: PIC16F84A’nın PORTB.0’ına bağlı ledi yakan, bir süre sonra söndüren (turn-off tipi zamanlayıcı) programı BASIC dilinin komutlarıyla PSI programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000                              'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB = %00000001

       WAITMS 1                                                 'Ledi bir süre yanık tut     

       PORTB = %00000000

       END

 

Not: WAITMS değeri 1 – 255 arası olabilir. Gecikme süresi milisaniye (ms) cinsindendir. WAITMS yerine WAITUS yazılırsa gecikme süresi mikrosaniye cinsinden olur.

PSI ile simülasyon yaparken gecikme değerini WAITUS (1-100) ya da WAITMS 1-5 arası bir değer gireriz. Eğer yazdığımız programı PIC’e yükleyeceksek WAITMS değerini 50-100-200 gibi bir değer girebiliriz. 

 

 

_______________________________________________________________________________________________

 

 

Deney 5: PIC16F84A’nın PORTB.0’ına bağlı ledi bir süre sonra yakan (turn-on tipi zamanlayıcı) programı BASIC dilinin komutlarıyla PSI programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000                                'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       WAITMS 2                                                   'Bir süre bekle

       PORTB = %00000001

       END

 

 

_______________________________________________________________________________________________

 

 

Deney 6: PIC16F84A’nın PORTB.0’ına bağlı ledi sürekli olarak yakıp söndüren (flaşör) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

1. YÖNTEM

       TRISB = %00000000                               'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB = %00000001

       WAITMS 1

       PORTB = %00000000

       WAITMS 1

       GOTO BASLA                                          'BASLA adlı etikete git, dallan, döngü yap.

       END

 

 

Hatırlatma: GOTO ....  komutu istenilen satıra / etikete gidilmesini sağlar

 

 

 

2. YÖNTEM

       TRISB = %00000000                              'PIC’in B port’unu çıkış olarak ayarla

BASLA:

       PORTB.0 = 1

       WAITMS 1

       PORTB.0 = 0

       WAITMS 1

       GOTO BASLA                                         'BASLA adlı etikete git (dallan, döngü yap).

       END

 

 

_______________________________________________________________________________________________

 

 

Deney 7: PIC16F84A’nın PORTB.0’ına ve PORTB.1’ine bağlı iki ledi sürekli olarak yakıp söndüren (flip-flop) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

1. YÖNTEM

       TRISB = %00000000      

BASLA:

       PORTB = %00000001

       WAITMS 1

       PORTB = %00000010

       WAITMS 1

       GOTO BASLA               

       END

 

 

_______________________________________________________________________________________________

 

 

Deney 8: PIC16F84A’nın B port’unun 3 bit'ine bağlı 3 ledi sırayla yakan (üç kanal yürüyen ışık) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000      

BASLA:

       PORTB = %00000001

       WAITMS 1

       PORTB = %00000010

       WAITMS 1

       PORTB = %00000100

       WAITMS 1

       GOTO BASLA               

       END

 

 _______________________________________________________________________________________________

 

 

Deney 9: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bitine bağlı ledi yakan programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISA = %11111111      

       TRISB = %00000000      

BASLA:

       IF PORTA.0 = 0 Then

       PORTB = %00000001

       ELSE    

       GOTO BASLA

       ENDIF

       END

 

Not: IF … THEN … ELSE … ENDIF komutları PIC’e bağlı butondaki bilgiyi (datayı) okumada kullanılır. Uygulamada buton yerine sınır anahtarı, toggle (iki yollu) anahtar, ışık / sıcaklık / ses / titreşim vb. sensörler de bağlanabilir.

 

 

 

 

Deney 10: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bitine bağlı ledi yakan, butona basılmadığında ise B port’unun 1. bitine bağlı ledi yakan programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISA = %11111111      

       TRISB = %00000000      

BASLA:

       IF PORTA.0 = 0 Then

       PORTB = %00000001

       ELSE    

       PORTB = %00000010

       GOTO BASLA

       ENDIF

       END

 

 

 

 

 

Deney 11: PIC16F84A’nın A port’unun 0. ve 1. bit’lerine bağlı butonlara basıldığında B port’unun 0. bitine bağlı ledi yakan, butona basılmadığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISA = %11111111      

       TRISB = %00000000      

basla:

       If PORTA.0 = 0 AND PORTA.1 = 0 Then

       PORTB = %00000001

       Else     

       PORTB = %00000000

       Endif

       Goto basla

       End

 

 

 

 

Deney 12: PIC16F84A’nın A port’unun 0. ve 1. bit’lerine bağlı butonlardan herhangi birine ya da ikisine basıldığında B port’unun 0. bitine bağlı ledi yakan, iki butona da basılmadığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISA = %11111111      

       TRISB = %00000000      

basla:

       If PORTA.0 = 0 OR PORTA.1 = 0 Then

       PORTB = %00000001

       Else     

       PORTB = %00000000

       Endif

       Goto basla

       End

 

 * OR komutu lojik VEYA işlemini yapar. Yani iki girişten biri ya da ikisi "1" veya "0" olunca çıkış bilgisi oluşur.

 

 

Deney 13: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bit’ine bağlı ledi yakan, A port’unun 1. bit’ine bağlı butona basıldığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISA = %11111111      

       TRISB = %00000000      

basla:

       IF PORTA.0 = 0 THEN

       PORTB.0 = 1

       ENDIF

       IF PORTA.1 = 0 THEN

       PORTB.0 = 0

       ENDIF

       GOTO BASLA

       END

 

 

 

Deney 14: PIC16F84A’nın B port’unun 0. bit’ine bağlı ledi 5 kez yakıp söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000      

       DIM SAYAC AS BYTE

basla:

       FOR SAYAC = 1 TO 5

       PORTB.0 = 1

       WAITMS 1

       PORTB.0 = 0

       WAITMS 1

       NEXT SAYAC

       END

 

* DIM ..... AS BYTE komutu ...... adı verilen bir register'in 8 bit (1 byte) büyüklükte bilgi saklayabilmesini sağlar.

Eğer komutta BYTE yerine WORD yazılırsa 2 byte (16 bit) büyüklüğünde bilgi saklayan bir register (kayıtçı) elde edilir.

 

 

 

 

Deney 15: PIC16F84A’nın B port’unun 0. bit’ine bağlı ledi 5 kez yakıp söndüren, daha sonra 3-5 saniye bekleyen ardından B port’una bağlı 8 ledi 4 kez yakıp söndüren, bu işi sürekli tekrar eden programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.  

 

       TRISB = %00000000      

       DIM SAYAC AS BYTE

basla:

       FOR SAYAC = 1 TO 5

       PORTB.0 = 1

       WAITMS 1

       PORTB.0 = 0

       WAITMS 1

       NEXT SAYAC

 

       WAITMS 5

 

       FOR SAYAC = 1 TO 4

       PORTB = %11111111

       WAITMS 1

       PORTB = %00000000

       WAITMS 1

       NEXT SAYAC

           

       GOTO BASLA

       END

 

Not: DIM SAYAC AS BYTE komutu 8 bit’lik bir register’in (kaydedicinin, kayıtçının) adının SAYAC olmasını sağlar.

 

 

 

Deney 16: PIC16F84A’nın B port’una bağlı 8 ledi sırayla çalıştıran programı yazınız.

 

       TRISB = %00000000      

basla:

       PORTB = %00000001

       WAITMS 1

       PORTB = %00000010

       WAITMS 1

       PORTB = %00000100

       WAITMS 1

       PORTB = %00001000

       WAITMS 1

       PORTB = %00010000

       WAITMS 1

       PORTB = %00100000

       WAITMS 1

       PORTB = %01000000

       WAITMS 1

       PORTB = %10000000

       WAITMS 1

       GOTO BASLA

       END

 

Deney 17: PIC16F84A’nın B port’una bağlı 8 ledi ikişer ikişer çalıştıran programı yazınız.

 

       TRISB = %00000000      

basla:

       PORTB = %00000011

       WAITMS 1

       PORTB = %00001100

       WAITMS 1

       PORTB = %00110000

       WAITMS 1

       PORTB = %11000000

       WAITMS 1

       GOTO BASLA

       END

 

Deney 18: PIC16F84A’nın A ve B port’larına bağlı 13 ledi yakıp söndüren programı yazınız.

 

       TRISA = %00000000

        TRISB = %00000000      

basla:

       PORTA = %11111111

       PORTB = %11111111

       WAITMS 1

       PORTA = %00000000

       PORTB = %00000000

       WAITMS 1

       GOTO BASLA

       END

 

Not: 16F84'ün A port'u çıkış yapıldığında RA4 adlı pin ile +5 V'luk besleme arasına 1-2,2 K'lık bir direnç bağlanmalıdır. Bu yapılmaz ise RA4 adlı pin'de lojik 1, lojik 0 bilgileri oluşmaz.  

 

 

 

 

 

Deney 19: PIC16F84A’nın A port’unun pin’lerine bağlı bir butona basıldığında B port’unun aynı sayılı pin’ine bağlı ledi yakan programı yazınız.

 

       TRISA = %11111111

       TRISB = %00000000      

       DIM OKU AS BYTE          '8 bit’lik register’i OKU olarak adlandır.

BASLA:

       OKU = PORTA

       PORTB = OKU

       GOTO BASLA

       END

 

* Pin: Bağlantı noktasıdır. 16F84'te 13 pin vardır.

* Port: Belli sayıda pin içeren birim. 16F84'te 2 adet port vardır. PORTA'da 5 pin, PORTB'de 8 pin bulunur.

Yani 16F84 ile 13 alıcı çalıştırılabilir.

 

Deney 20: PIC16F84A’nın B port’una bağlı step (adım) motoru sürekli olarak sola döndüren programı yazınız.

 

        TRISB = %00000000      

BASLA:

        PORTB = %00000001

        WAITMS 1

        PORTB = %00000010

        WAITMS 1

        PORTB = %00000100

        WAITMS 1

        PORTB = %00001000

        WAITMS 1

        GOTO BASLA

        END

 

Not: Bu program PIC’e yüklenir. B port’unun 4 pin’ine 1-10 K’lık dirençler üzerinden 4 adet BD135 transistörün beyz ucu bağlanır. Transistörlerin kolektör uçlarına ise 5 kablolu step motorun her bir bobini bağlanır. Devre enerjilendiğinde step motor sürekli olarak 5-10 derecelik adımlarla belirli bir hızda dönmeye başlar. Dönme hızını değiştirmek için WAITMS ..... değeri değiştirilir. 

 

 

 

 

Deney 21: PIC16F84A’nın B port’una bağlı step (adım) motoru sürekli olarak sağa döndüren programı yazınız.

 

           TRISB = %00000000      

BASLA:

            PORTB = %00001000

            WAITMS 1

            PORTB = %00000100

            WAITMS 1

            PORTB = %00000010

            WAITMS 1

            PORTB = %00000001

            WAITMS 1

            GOTO BASLA

            END

 

 

 

 

 

Deney 22: PIC16F84A’nın B port’una bağlı step (adım) motoru gövde üzerinde yazılı ilerleme derecesinin yarısı hızında sürekli olarak sola döndüren programı yazınız.

 

       TRISB = %00000000      

BASLA:

       PORTB = %00000001

       WAITMS 1

       PORTB = %00000011

       WAITMS 1

       PORTB = %00000010

       WAITMS 1

       PORTB = %00000110

       WAITMS 1

       PORTB = %00000100

       WAITMS 1

       PORTB = %00001100

       WAITMS 1

       PORTB = %00001000

       WAITMS 1

       PORTB = %00001001

       WAITMS 1

       GOTO BASLA

       END

 

 Not: Bu programda iki bobine aynı anda DC verilmiş olan satırlarda rotor iki bobin arasında durur. Bu sayede dönüş yavaşlar.

 

Deney 23: PIC16F84A’nın B port’una bağlı step (adım) motoru belirli derecede sola döndüren programı yazınız.

 

     TRISB = %00000000      

     DIM SAYAC AS BYTE

BASLA:

     FOR SAYAC = 1 TO 5

     PORTB = %00000001

     WAITMS 1

     PORTB = %00000010

     WAITMS 1

     PORTB = %00000100

     WAITMS 1

     PORTB = %00001000

     WAITMS 1

     NEXT SAYAC

     END

 

Not: FOR SAYAC = 1 TO 5 komutunda “5” ifadesi 1 ile 255 arası olabilir.

Eğer DIM SAYAC AS BYTE komutu DIM SAYAC AS WORD biçiminde yazılırsa “5” ifadesinin yerine 1 ile 65535 arası bir değer yazılabilir. Yani step motoru istenilen derecede sola döndürmek mümkündür.

 

 

 

Deney 24: PIC16F84A’nın A port’unun 0. pin’ine bağlı butona belirli bir süre içinde kaç kez basıldığını B port’unda gösteren programı yazınız.

 

       TRISA = %11111111

       TRISB = %00000000

       Dim sayac As Byte

basla:

       Count PORTA.0, 10, sayac

       PORTA = sayac

       PORTB = sayac

       End

 

Not: COUNT komutu bir butona kaç kez basıldığını sayar. Örneğin bir yolcu teknesi 50 kişilik olsun. Yolcuların geçtiği turnikeye bağlanan sınır anahtarından giden bilgi sayısı 50 olduğunda gemiye giriş kapıları kapatılabilir.

Ya da bir kutuya 6 konserve konduğunda yürüyen bandı ilerleten programda COUNT komutu kullanılabilir.  

 

 

 

Deney 25: PIC16F84A’nın A port’unun 0. pin’ine bağlı butona belirli bir süre içinde 3 kez basıldığı taktirde B port’una bağlı tüm ledleri yakan programı yazınız.

 

       TRISA = %11111111

       TRISB = %00000000

       Dim sayac As Byte

basla:

       Count PORTA.0, 5, sayac

       If sayac = %00000011 Then

       PORTB = %11111111

       Else

       Goto basla

       Endif

       End

 

Deney 26: PIC16F84A’nın PORTA.0 ucuna bağlanan butona basıldığında PORTB.0’a bağlı ledi yakan, PORTA.1 ucuna bağlı butona basıldığında ise ledi söndüren programı yazınız.

 

1. YÖNTEM

        TRISA = %11111111

       TRISB = %00000000

basla:

       If PORTA.0 = 1 Then

       PORTB.0 = 1

       Endif

       If PORTA.1 = 1 Then

       PORTB.0 = 0

       Endif

       Goto basla

       End

 

 

2. YÖNTEM

        TRISA = %11111111

       TRISB = %00000000

       Symbol start = PORTA.0

       Symbol stop = PORTA.1

       Symbol led = PORTB.0

basla:

       If start = 1 Then

       led = 1

       Endif

       If stop = 1 Then

       led = 0

       Endif

       Goto basla

       End

 

Not: SYMBOL komutuyla buton ve alıcılara istenilen “ad” verilebilir.

 

 

 

 

Deney 27: PIC16F84A’nın PORTA.0, PORTA.1, PORTA.2 numaralı uçlarına bağlı butonların herhangi birine bağlı butona basıldığında PORTB.0’a bağlı ledi yakan programı yazınız.

 

       TRISA = %11111111

       TRISB = %00000000

basla:

       If PORTA.0 = 1 OR PORTA.1 = 1 OR PORTA.2 = 1 Then

       PORTB.0 = 1

       Else

       PORTB.0 = 0

       Endif

       Goto basla

       End

 

Not: Bu devre hırsız alarmı olabilir. Kapı ve pencerelere gizlenen butonlardan gelen bilgilere göre PORTB.0’a bağlanan led yakılabilir, buzer (bazır) çalıştırılabilir. Transistör ve röle üzerinden sisteme eklenecek siren çalıştırılabilir.

 

Deney 28: PIC’in B port’undan elde edilen binary sayının birer birer artırılmasını sağlayan programı yazınız.

 

        TRISB = %00000000

basla:

       PORTB = %00000000

topla:

       PORTB = PORTB + 1

       PORTB = PORTB

       WaitMs 1

       Goto topla

       End      

 

Deney 29: PIC’in B port’undan elde edilen binary sayının ikişer ikişer artırılmasını sağlayan programı yazınız.

 

        TRISB = %00000000

basla:

       PORTB = %00000000

topla:

       PORTB = PORTB + 2

       PORTB = PORTB

       WaitMs 1

       Goto topla

       End      

      

 

Deney 30: PIC’in B port’undan elde edilen binary sayının birer birer azaltılmasını sağlayan programı yazınız.

 

        TRISB = %00000000

BASLA:

       PORTB = %11111111

CIKAR:

       PORTB = PORTB - 1

       PORTB = PORTB

       WaitMs 1

       Goto CIKAR

       End      

 

Deney 31: PIC’in B port’undan elde edilen binary sayının ikişer ikişer azaltılmasını sağlayan programı yazınız.

 

        TRISB = %00000000

BASLA:

       PORTB = %11111111

CIKAR:

       PORTB = PORTB - 2

       PORTB = PORTB

       WaitMs 1

       Goto CIKAR

       End      

 

 

 

 

Deney 32: PIC’in B port’undan elde edilen sayının belirli bir değere (örneğin 7’ye yani %0000111’e) ulaştıktan sonra sıfır olmasını sağlayan programı yazınız.

 

       TRISB = %00000000

        Dim sayac As Byte

ilkdeger:

        PORTB = %00000000

basla:

        sayac = sayac + 1

        PORTB = sayac

        If PORTB = %00000111 Then

        PORTB = %00000000

        Else

        Goto basla

        Endif

        sayac = %00000000       

        Goto ilkdeger

        End

 

 

 

 

Deney 33: PIC’in B port’undan elde edilen sayının 1-9 arasında olmasını sağlayan programı yazınız. Yani B port’unda %00000001 ile %00001001 arasındaki sayılar görülsün. Başka bir deyişle 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 sayıları üretilsin.

 

         TRISB = %00000000

         Dim sayac As Byte

ilkdeger:

          PORTB = %00000001

basla:

          sayac = sayac + 1

          PORTB = sayac

          WaitMs 1

          If PORTB = %00001010 Then

          PORTB = %00000000

          Else

          Goto basla

          Endif

          sayac = %00000000       

          Goto ilkdeger

          End

 

 

 

 

Deney 34: PIC’in PORTB.0 ucuna bağlı ledin TOGGLE komutuyla yakılıp söndürülmesini sağlayan programı yazınız.

 

          TRISB = %00000000

           PORTB.0 = 0    

BASLA:

            WAITMS 1

            TOGGLE PORTB.0

            GOTO BASLA

            END

 

 

 

 

Deney 35: PIC’in PORTB.0 ucuna bağlı ledin PORTA.0 bağlı butona basıldığında yakılıp söndürülmesini sağlayan programı yazınız.

 

          TRISA = %11111111

          TRISB = %00000000

          Symbol BUTON = PORTA.0

          Symbol LED = PORTB.0

          LED = 0

basla:

          WaitUs 5

          If BUTON = 1 Then

          Toggle LED

         Else

         LED = 0

         Endif

         Goto basla

         End                                               

 

 

 

 

Deney 36: PIC’in PORTA.0’ına bağlı butona basılıyken B port’unda binary %00000111, basılı değilken %1111111 sayısını üreten programı yazınız.

 

         TRISA = %11111111

          TRISB = %00000000

         Symbol buton = PORTA.0           'PORTA.0’ın adı BUTON yapılmıştır.

basla:

         If buton = 1 Then

         PORTB = %00000111

         Else

         PORTB = %11111111

         Endif

         Goto basla

         End

 

 

 

 

Deney 37: PIC’in B port’undaki bilgi sürekli olarak 2 ile çarpılsın. B port’u %10000000 olunca başa dönülsün. Programı yazınız.

 

          TRISB = %00000000

basla:

          PORTB = %00000000

carp:

          PORTB = %00000001

carp1:

          PORTB = PORTB * 2

          PORTB = PORTB

          If PORTB = %10000000 Then

          Goto carp

          Else

          Goto carp1

          Endif

          End                 

 

Deney 38: PIC’in A port’unun pin’lerine bağlı butonların durumuna göre B port’unun çıkışlarının değişmesine ilişkin örnek program.

 

           TRISB = %00000000

           TRISA = %11111111

basla:

           PORTB = %00000000

           While PORTA.0 = 1

           PORTB = %10101010

           Wend

 

           While PORTA.1 = 1

           PORTB = %10101010

           Wend

 

           While PORTA.2 = 1

           PORTB = %00001111

           Wend

 

           Goto basla

           End

 

 

 

Deney 39: PIC’in B port’una bağlı katodu ortak (common cathode) ledli display’de rakam oluşturma

 

           TRISB = %00000000

basla:

            PORTB = %00111111      '0 oluşur

            WaitMs 1

            PORTB = %00000110      '1 oluşur

            WaitMs 1

            PORTB = %01011011      '2 oluşur

            WaitMs 1

            PORTB = %01001111      '3 oluşur

            WaitMs 1

            PORTB = %01100110      '4 oluşur

            WaitMs 1

            PORTB = %01101101      '5 oluşur

            WaitMs 1

            Goto basla

            End

 

 

 

 

Deney 40: PIC’in B port’una bağlı 8 ledi farklı biçimlerde çalıştırma (ışık oyunları)

 

           TRISB = %00000000

           DIM SAYAC AS BYTE       

basla:

            FOR SAYAC = 1 TO 5

            PORTB = %00000001

            WAITMS 1

            PORTB = %00000010

            WAITMS 1

            PORTB = %00000100

            WAITMS 1

            PORTB = %00001000

            WAITMS 1

            PORTB = %00010000

            WAITMS 1

            PORTB = %00100000

            WAITMS 1

            PORTB = %01000000

            WAITMS 1

            PORTB = %10000000

            WAITMS 1

            NEXT SAYAC

 

 

            FOR SAYAC = 1 TO 5

            PORTB = %00000011

            WAITMS 1

            PORTB = %00001100

            WAITMS 1

            PORTB = %00110000

            WAITMS 1

            PORTB = %11000000

            WAITMS 1

            NEXT SAYAC

 

            FOR SAYAC = 1 TO 5

            PORTB = %10000001

            WAITMS 1

            PORTB = %01000010

            WAITMS 1

            PORTB = %00100100

            WAITMS 1

            PORTB = %00011000

            WAITMS 1

            NEXT SAYAC

 

            FOR SAYAC = 1 TO 5

            PORTB = %00001111

            WAITMS 1

            PORTB = %11110000

            WAITMS 1

            NEXT SAYAC

 

            FOR SAYAC = 1 TO 5

            PORTB = %10101010

            WAITMS 1

            PORTB = %01010101

            WAITMS 1

            NEXT SAYAC

 

            Goto basla

            End

 

 

Deney 41: 16F877A adlı PIC’in A, B, C, D, E port'larına bağlı 34 ledi yakıp söndüren program

 

    TRISA = %00000000
    TRISB = %00000000
    TRISC = %00000000
    TRISD = %00000000
    TRISE = %00000000
basla:
    PORTA = %11111111
    PORTB = %11111111
    PORTC = %11111111
    PORTD = %11111111
    PORTE = %11111111
 

    WaitMs 1
 

    PORTA = %00000000
    PORTB = %00000000
    PORTC = %00000000
    PORTD = %00000000
    PORTE = %00000000
    WaitMs 1
 

    Goto basla
    End

 

 

 

Deney 42: 16F84A'nın A port'unun 0. bit'ine bağlı butona her basışta B port'unun 0. bit'ine bağlı ledin durumunu değiştiren program

 

TRISA = %00000001
TRISB = %00000000
Symbol buton = PORTA.0    'PORTA.0'a bağlanan kontrol elemanının (giriş biriminin) adı butondur.
Dim durum As Bit                  'Durum adlı register bit cinsinden bilgi saklamak üzere ayarlanmıştır.
PORTA = 0                            'PORTA içeriği sıfırlanmıştır.
PORTB = 0                            'PORTB içeriği sıfırlanmıştır.
 

basla:
 

If buton = 0 Then
WaitMs 200                         'Buton kontaklarındaki titreşim nedeniyle oluşan sinyallerin zararının önlenmesini sağlayan gecikme
PORTB.0 = 1
durum = 0
Else
Goto basla
Endif
 

butondur:
 

If buton = 0 Then
WaitMs 200
durum = 1
PORTB.0 = 0
Else
Goto butondur
Endif
Goto basla
End
 

Devrenin simülasyonu en iyi biçimde PROTEUS/ISIS ile yapılabilir.

Eğer simülasyon PIC SIMULATOR ile yapılacaksa WAITMS 200 değeri WAITUS 1 ya da WAITMS 1 yapılmalıdır. Eğer WAITMS 200 değeri kullanılırsa çok uzun süre beklemek gerekir.

 

 

BASIC dilinde yazılmış olan programın makine dilindeki karşılığı (derleme ile elde edilen kodlar)

Bu kodlar buradan kopyalanıp NOT DEFTERİ programında DOSYAADI.HEX olarak kaydedilip sonra uygun bir yükleyiciyle PIC'e aktarılırsa devre çalışır.

:100000008A110A12052800000900831601308500B4
:10001000860183128501860105181528C8308C00D9
:100020008D012B200614181018281F3083050C286A
:100030001F30830505182328C8308C008D012B2024
:100040001814061026281F3083051A281F30830530
:100050000C2829282A288C08031936283D208C03CF
:10006000000000000000000000002B288D0803198C
:1000700008003D208D038C032B280C309100910B40
:100080003F280000000012308E008E0B4C284E20BE
:100090004E200000000008004E2045280D30900042
:0800A000900B5028000008003D
:02400E00F13F80
:00000001FF

 

_______________________________________________________________________________________________

 

Deney 43: 0 - 99 yukarı sayıcı (up counter)

 

TRISA = %00000000
TRISB = %00000000
Dim sayac As Byte

basla:
PORTA = %00000011
sayac = %00000000
PORTB = %00000000

basla1:
sayac = sayac + 1
PORTB = sayac
WaitMs 100

If sayac = %00001001 Then 'sayacın degeri 9 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif

If sayac = %00011001 Then 'sayacın degeri 19 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif

If sayac = %00101001 Then 'sayacın degeri 29 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif

If sayac = %00111001 Then 'sayacın degeri 39 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif

If sayac = %01001001 Then  'sayacın degeri 49 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif

If sayac = %01011001 Then      'sayacın ...
sayac = sayac + 6
Endif

If sayac = %01101001 Then     'sayacın ...
sayac = sayac + 6
Endif

If sayac = %01111001 Then     'sayacın ...
sayac = sayac + 6
Endif

If sayac = %10001001 Then       'sayacın ...
sayac = sayac + 6
Endif

If sayac = %10011001 Then      'sayacın ...
sayac = sayac + 6
Endif

If PORTB = %10011001 Then               'PORTB nin değeri 99 olunca sayacı sıfırla
sayac = %00000000
PORTB = %00000000
WaitMs 100
Endif

Goto basla1
End

 


 

* Display'e uygulanan 5 V'un tümünün ledlere düşmemesi için 47 - 330 ohm'luk ön dirençler kullanılmalıdır.

 

* PIC'ın B port'una bağlanan 2 adet 74LS47 lojik entegresi binary bilgileri desimal'e dönüştürür. Başka bir deyişle bu entegre anodu ortak display'lerde desimal sayıları oluşturur.

 

* Eğer 74LS48 kullanılırsa display'leri katodu ortak modelden seçmek gereklidir.
 

_______________________________________________________________________________________________

 

 

Deney 43: 0 - 99 yukarı sayıcı (up counter)

* Bu sayıcıda göstergelerde 12 rakamı görülünce RA.2'ye bağlı transistör röleyi belirli bir süre çalıştırmaktadır.

 

 

TRISA = %00000000
TRISB = %00000000
Dim sayac As Word

basla:
PORTA = %00000011
sayac = %00000000
PORTB = %00000000

basla1:
sayac = sayac + 1
PORTB = sayac
WaitMs 100

If sayac = %00001001 Then
sayac = sayac + 6 'sayacın degeri 9 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

'--------------------------------------------------------------------------
If PORTB = %00010010 Then
PORTA.2 = 1
WaitMs 1000
PORTA.2 = 0
Endif
 

' PORTB'DE 0001 (1) 0010 (2) YANİ 12 DESİMAL DEĞERİ GÖRÜLÜNCE
' PORTA'NIN 2. BIT'İNE BAĞLI LEDİ YA DA RÖLEYİ ÇALIŞTIRAN BÖLÜM
 

'--------------------------------------------------------------------------

 

If sayac = %00011001 Then
sayac = sayac + 6    
'sayacın degeri 19 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %00101001 Then
sayac = sayac + 6     'sayacın degeri 29 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %00111001 Then
sayac = sayac + 6     'sayacın degeri 39 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %01001001 Then
sayac = sayac + 6     'sayacın degeri 49 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %01011001 Then
sayac = sayac + 6      'sayacın degeri 59 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %01101001 Then
sayac = sayac + 6       'sayacın degeri 69 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %01111001 Then
sayac = sayac + 6      'sayacın degeri 79 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

 

If sayac = %10001001 Then
sayac = sayac + 6      'sayacın degeri 89 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If sayac = %10011001 Then
sayac = sayac + 6      'sayacın degeri 99 olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif

If PORTB = %10011001 Then     
 'PORTB nin değeri 99 olunca sayacı sıfırla
sayac = %00000000
PORTB = %00000000
WaitMs 100
Endif

Goto basla1
End

 

 

Not: Deneyin basic ile hex kodlarını, Proteus ISIS 7.7 SP 2 ile çizilmiş devresini buraya tıklayarak indirebilirsiniz.

 

Devre, Proteus'un eski sürümleri ile çalışmaz. Yazılımı Google.com ile aratarak bir çok siteden temin edebilirsiniz. Yazılımın orjinali yüksek bir bedele sunulmaktadır. Demo sürümler ücretsizdir. Korsan sürümünü dağıtmak yasal olarak suçtur o nedenle tarafımızdan yazılım istemeyiniz. 

 

_______________________________________________________________________________________________

 

 

 

 

 

 

 

 

* 2011 yılı itibariyle mikrodenetleyicileri öğrenmeyen, öğrenmek istemeyen elektrik, elektronik, mekatronik alanındaki kişiler (öğrenci, teknik eleman, öğretmen, mühendis) mesleki anlamda çok kayıptadır. Çünkü MD'lerin girmediği sistem yoktur.

 

Sadece sayısal (dijital) elektroniği bilmem bana yeter demek yanlıştır. 

 

_______________________________________________________________________________________________

 

Assembler diliyle sistem tasarlamak eziyettir. O nedenle BASIC ya da C diliyle çalışılmalıdır.

 

_______________________________________________________________________________________________

 

Devamı yakında...

 

www.aliozdemir.net

22.06.2011 - KKTC