11.07.2015 Views

usb-pc-veri-aktarim - 320Volt

usb-pc-veri-aktarim - 320Volt

usb-pc-veri-aktarim - 320Volt

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

PIC18F4550 MİKRODENETLEYİCİSİ İLEUSB-PC VERİ AKTARIM ARABİRİMİGERÇEKLENMESİAdil Fatih KİREMİTCİY.Lisans TeziElektrik ve Elektronik Mühendisliği Anabilim DalıYrd. Doç. Dr. Tevhit KARACALI2007Her hakkı saklıdır


ÖZETY.Lisans TeziPIC18F4550 MİKRODENETLEYİCİSİ İLE USB-PC VERİ AKTARIM ARABİRİMİGERÇEKLENMESİAdil Fatih KİREMİTCİAtatürk ÜniversitesiMühendislik FakültesiElektrik ve Elektronik Mühendisliği Anabilim DalıDanışman: Yrd. Doç. Dr. Tevhit KARACALIGünümüz teknolojisinde <strong>veri</strong> toplama elektroniğindeki hızlı gelişim, aynı zamanda dahahızlı ve uyumlu <strong>veri</strong> iletişim metotlarına olan ihtiyacı da beraberinde getirmiştir.Bununla beraber kullanıcılar farklı tiplerde elektronik cihazlarla bilgisayar arasında birarabirime ihtiyaç duymuşlar ve bu cihazların bilgisayar tarafından kontrolünü sağlamayıamaçlamışlardır. Bu çalışmada, çevrebirimlerden alınacak elektriksel büyüklüklere ait<strong>veri</strong>lerin bilgisayar ortamına aktarılması ve bu <strong>veri</strong>lerin görsel bir şekilde kullanıcıyasunularak çevrebirimlerin kontrolünü sağlayacak bir arabirim devresinin tasarlanması vegerçekleştirilmesi amaçlanmıştır. Son zamanlarda <strong>veri</strong> iletişiminde yaygın olarakkullanılan en popüler standart USB standardıdır. Günümüz elektronik teknolojisininvazgeçilmezleri arasında yerini alan PIC mikrodenetleyicilerden PIC18F4550kullanılarak, çevrebirimler ile bilgisayar arasındaki <strong>veri</strong> toplama işlemi USB üzerindengerçekleştirilmiştir.2007, 95 sayfaAnahtar Kelimeler: PIC18F4550, USB, Veri Toplama, A/D Dönüştürücüi


ABSTRACTMS ThesisREALIZING OF PC-USB DATA TRANSFER INTERFACE WITH PIC18F4550MICROCONTROLLERAdil Fatih KİREMİTCİAtatürk UniversityFaculty of EngineeringDepartment of Electrical and Electronic EngineeringSupervisor: Asst. Prof. Dr. Tevhit KARACALIWith the rapid growth of data acquisition electronics in today’s technology, there alsocomes a need for faster and compatible data transfer methods. Although, users need aninterface for various types of electronic devices and a computer, and aimed thatcontrolling of these devices via computer. In this thesis it is aimed transferring electricalquantities data which is taken from peripherals to computer medium and visuallypresenting these data to user, and designing and realizing of an interface circuit tocontrol these peripherals. Nowadays, most popular and widely used method of datatransfer utilizes the USB standard. Using one of the today’s electronic technology’sindispensable PIC microcontrollers PIC18F4550, data acquisition is provided via USBstandard.2007, 95 pagesKeywords: PIC18F4550, USB, Data Acquisition, A/D Converterii


TEŞEKKÜRYüksek Lisans tezi olarak sunduğum bu çalışma, Atatürk Üniversitesi MühendislikFakültesi Elektrik ve Elektronik Mühendisliği Bölümü ve Erzincan Üniversitesi KelkitAydın Doğan Meslek Yüksekokulu’nda yapılmıştır.Çalışmalarımda her türlü desteği sağlayan çok değerli hocam Sayın Yrd. Doç. Dr.Tevhit KARAÇALI’ya en içten teşekkürlerimi sunarım.Erzincan Üniversitesi Kelkit Aydın Doğan Meslek Yüksekokulu’nda gerekli yardımı veilgiyi esirgemeyen yüksekokulumuz müdürü Sayın Yrd. Doç. Dr. SebahattinKARANLIK’a ve uygulama aşamasında yardımlarını esirgemeyen yüksekokulumuzpersoneline çok teşekkür ederim.Çalışmalarım sırasında ailemden görmüş olduğum destek ve teşvikten dolayıkendilerine de sonsuz teşekkürlerimi sunarım.Adil Fatih KİREMİTCİAğustos 2007iii


İÇİNDEKİLERÖZET ……………………………………………………………………………... iABSTRACT ………………………………………………………………………. iiTEŞEKKÜR ………………………………………………………………………. iiiSİMGELER ve KISALTMALAR DİZİNİ ……………………..…………………. viiŞEKİLLER DİZİNİ ……………………………………………………….............. ixÇİZELGELER DİZİNİ ……………………………………………………………. xi1. GİRİŞ ……………………………………………………………………........ 11.1. Çalışmanın Amacı ve Kapsamı …………………………………..………..... 11.2. Çalışmanın Anahatları ……………………………………………...…...….. 22. KURAMSAL TEMELLER …………………….…………………………... 32.1. USB ……………………………………………………………………...….. 32.1.1. Giriş …………………………………………………………………......... 32.1.2. USB protokolü …………………………………………………………..... 82.1.2.a. USB bileşenleri ………………………………………………….…........ 82.1.2.b. USB cihazlarda <strong>veri</strong> akışı ………...……………………………………...82.1.2.c. USB <strong>veri</strong> transfer tipleri …………………………………………............ 102.1.2.d. USB sürücüleri ………………………………………………….............. 122.1.2.e. USB konfigürasyonu ……………………….……………….................... 132.2. PIC Mikrodenetleyiciler …………………………………………………......152.2.1. PIC nedir? …………………….………………………………………....... 152.2.2. Neden PIC? ……………………………………………………………...... 162.2.3. Neden PIC18F4550? ………………………………………………............ 172.3. PIC18F4550 özellikleri ve yapısı ………..………………………………...... 192.3.1. PIC18F4550 ……………………………………………………………..... 192.3.1.a. USB desteği ..………………………………………………………......... 212.3.1.b. Çoklu osilatör seçenekleri ve özellikleri ……………...………………… 222.3.1.c. Hafıza özellikleri .……………………………………………………….. 222.3.2. PIC18F4550 giriş / çıkış portlarının fonksiyonları …...…………………... 232.3.3. PIC18F4550 osilatör özellikleri ……..………………………………......... 28iv


2.3.3.a. Osilatör kontrolü ….……………………………………………….......... 292.3.3.b. PIC18F4550’de reset (sıfırlama) işlemi ………………………………. 312.3.3.c. PIC18F4550 hafıza organizasyonu ……………………………………... 332.3.3.d. PIC18F4550 CCP (Capture/Compare/PWM) modülleri …….................. 362.3.4. 10-bit analog/dijital dönüştürme modülü …….……………………............ 372.3.4.a. A/D dönüşüm için gereksinimler …..…………………………................ 402.3.4.b. Elde edim zamanının seçimi ve yapılandırılması …………………......... 412.3.4.c. A/D dönüşümü için saat kaynağı seçimi ………………………………... 412.3.4.d. Analog port bacaklarını yapılandırma ………………….…………......... 422.3.4.e. A/D dönüşümü ………………….…………………………………......... 422.3.5. PIC18F4550 USB modülü ….………...…………………………………... 442.3.5.a. USB durum ve kontrolü ……..………………………………………….. 442.3.5.b. USB kontrol kaydedicisi (UCON) …..………………………………….. 452.3.5.c. USB konfigürasyon kaydedicisi (UCFG) ……………..………………... 462.3.6. PIC18F4550 komut seti …….…………………………………………….. 472.3.7 I/O portlarının konfigürasyonu ………….………………………………… 473. MATERYAL ve YÖNTEM …………………..…………………………….. 483.1. Paralel ve USB Programlama Devresi ……………………….……………... 483.1.1. Donanım (Hardware) ……………………………………………………... 483.1.2. Devre elemanları ………………………….………………………………. 513.1.2.a. PIC18F4550 …………………………………………………………...... 513.1.2.b. Osilatör ………………………………………………………………...... 523.1.2.c. USB konektör …………….……………………………………………... 523.1.2.d. Güç göstergesi ………….……………………………………………...... 533.1.2.e. Sıfırlama ve program butonları ………….……………………………… 543.1.3. Güç ………………………………………………………………………... 543.2. Yazılım (Software) …………………………………………….……............. 553.2.1 PIC18F4550’nin önyüklemesi (Bootload) ….……………………………... 553.3 Kodlama (Firmware) ………………………………………………................ 583.4 Görsel arabirim(GUI) ……………………..………………………………….594. ARAŞTIRMA BULGULARI …………………………………..…………… 605. TARTIŞMA ve SONUÇ …………………..………………………………… 67v


KAYNAKLAR ……………………………………………………………………. 69EKLER …………………………………………………………………………….. 70EK 1 ……………………………………………………………………………... 70EK 2 ……………………………………………………………………………... 71EK 3 ……………………………………………………………………………... 72EK 4 ……………………………………………………………………………... 73EK 5 ……………………………………………………………………………... 74EK 6 ……………………………………………………………………………... 75EK 7 ……………………………………………………………………………... 76EK 8 ……………………………………………………………………………... 78EK 9 ……………………………………………………………………………... 82EK 10…………………………………………………………………………….. 90EK 11 ……………………………………………………………………………. 93EK 12 ……………………………………………………………………………. 94EK 13 ……………………………………………………………………………. 95ÖZGEÇMİŞ ……………………………………………………………..………… 96vi


SİMGELER ve KISALTMALAR DİZİNİC HOLDR SR SST ACQT ADT AMPT CT COFFT OSCV DDÖrnekle/tut kondansatörüKaynak direnciÖrnekleme anahtarı iç direnciAnalog sinyali minimum algılama zamanıBit başına A/D dönüşüm zamanıYükseltme gecikme zamanıÖrnekle/tut kondansatörü şarj zamanıSıcaklık katsayısıOsilatör periyoduKaynak gerilimiKısaltmalarA/DADCAPIBORCCPCPUCRCDLLECCPEEPROMEUSARTGPRGUII/OAnalog/Digital (Analog/Dijital)Analog to Digital Converter (Analog/Dijital Dönüştürücü)Application Program Interface (Uygulama Programı Arayüzü)Brown-Out Reset (Gerilim Düşmesi Sıfırlaması)Capture/Compare/PWM(Yakalama/Karşılaştırma/Darbe Genlik Modülasyonu)Central Processing Unit (Merkezi İşlem Birimi)Cyclic Redundancy Check (Çevrimsel Artıklık Kodlaması)Dynamic Link Library (Dinamik Link Kütüphanesi)Enhanced Capture/Compare/PWM(Geliştirilmiş Yakalama/Karşılaştırma/Darbe Genlik Modülasyonu)Electrically Erasable Programmable Read-Only Memory(Elektrikle Silinebilir Salt Okunabilir Bellek)Enhanced Universal Synchronous Asychronous Receiver Transmitter(Geliştirilmiş Evrensel Senkron Asenkron Alıcı Verici)General Purpose Registers (Genel Amaçlı Kaydediciler)Graphical User Interface (Grafik Kullanıcı Arayüzü)Input/Output (Giriş/Çıkış)vii


I 2 CInter-Integrated Circuit (Tümleşik Devre Arabirimi)ICSP In-Circuit Serial Programming (Devre Üzerinden Seri Programlama)IRPInput/Output Request Packets (Giriş/Çıkış İstek Paketleri)LINLocal Interconnected Network (Yerel Bağlantılı Ağ)MSSP Main Sychronous Serial Port (Ana Senkron Seri Port)PEEC Positive Channel Metal-Oxide Electrically Erasable Cell(Pozitif Kanal Metal-Oksit Yarıiletken Tip Elektrikle Silinebilir Pil)PICPeripheral Interface Controller (Çevresel Arabirim Denetleyicisi)PIDProduct Identity (Ürün Kimliği)PLL Phase Locked Loop (Faz Kilitlemeli Döngü)PMOS Positive Channel Metal-Oxide Semiconductor(Pozitif Kanal Metal-Oksit Yarıiletken)POR Power-On Reset (Enerji Verildiğinde Sıfırlama)PWM Pulse Width Modulation (Darbe Genişlik Modülasyonu)RAM Random Access Memory (Rasgele Erişimli Bellek)RISC Reduced Instruction Set Computer (Komut Seti Azaltılmış Bilgisayar)SFR Special Function Registers (Özel Fonksiyon Kaydedicileri)SIESerial Interface Engine (Seri Arabirim Motoru)SPISerial Peripheral Interface (Seri Çevresel Arabirim)SPPStreaming Parallel Port (Duraksız Paralel Port)SRAM Static Random Access Memory (Statik Rasgele Erişimli Bellek)STSchmitt Trigger (Schmitt Tetiklemesi)TTL Transistor-Transistor Logic (Transistör-Transistör Lojik)USART Universal Synchronous Asynchronous Receiver Transmitter(Evrensel Senkron Asenkron Alıcı Verici)USB Universal Serial Bus (Evrensel Seri Yol)USB-IF Universal Serial Bus-Implementers Forum(Evrensel Seri Yol Gerçekleştiricileri Forumu)VID Vendor Identity (Üretici Kimliği)WDM Win32 Driver Model (Win32 Sürücü Modeli)viii


ŞEKİLLER DİZİNİŞekil 2.1. USB boruları ve son uç kavramı …………………………………..……. 9Şekil 2.2. USB <strong>veri</strong> hareketi ……………………………………………………....10Şekil 2.3. USB <strong>veri</strong> iletişim tiplerinin teorik olarak taşıyabilecekleri maksimum<strong>veri</strong> büyüklüğü ……………………………………………………...... 12Şekil 2.4. USB sürücü modeli ……………………………………………………... 13Şekil 2.5. Tanımlayıcı hiyerarşisi ……….………………………………………….14Şekil 2.6. PIC18F4550 bacak yapısı …………………………………………..……23Şekil 2.7. PIC18F4550 saat diyagramı ………………………………….………… 28Şekil 2.8. POR sıfırlama devresi …………………………………………………... 32Şekil 2.9. PIC18F4550 program hafızası …………….…..………………………... 34Şekil 2.10. PIC18F4550 <strong>veri</strong> hafızası ………………………………..……………. 75Şekil 2.11. PWM blok diyagramı ..………..………………………………………. 36Şekil 2.12. A/D dönüştürücü modülü blok diyagramı ...…………………………... 38Şekil 2.13. A/D dönüştürücü modülü analog giriş modeli …………………………40Şekil 2.14. A/D dönüşüm T AD zaman diyagramı(ACQT = 000, T ACQ = 0) ………………………………………... 43Şekil 2.15. A/D dönüşüm T AD zaman diyagramı(ACQT = 010, T ACQ = 4 T AD ) ………………………………….. 43Şekil 3.1. Programlama devresi paralel programlama kısmı ……………………… 49Şekil 3.2. Önyükleme için minimum donanım …….……………………………… 50Şekil 3.3. Paralel ve USB programlama devresi ………….……………………….. 51Şekil 3.4. B tipi USB konektör …….……………………………………………… 53Şekil 3.5. Winpic paralel programlama ayarları ……………….………………….. 56Şekil 3.6. Wzab2.ini tanımlama dosyası………………….. ………………………. 56Şekil 3.7. Winpic’de cihaz konfigürasyonu………………………………………... 58Şekil 4.1. main.c kaynak kodlarının bir bölümü …………………………………... 61Şekil 4.2. boot.h kaynak kodlarının bir bölümü …………………………………… 61Şekil 4.3. boot.c kaynak kodlarının bir bölümü …………………………………… 63Şekil 4.4. boot.c kaynak kodlarının bir bölümü …………………………………… 63ix


Şekil 4.5. Uygulama GUI kullanıcı formu ……………….………………………... 64Şekil 4.6. Uygulama kartı açık devre şeması ……………………………………… 66Şekil 4.7. Uygulama kartı ……………….………………………………………… 66x


ÇİZELGELER DİZİNİÇizelge 2.1. USB kronolojisi ……………………………………….……………... 3Çizelge 2.2. USB ile diğer arabirimlerin karşılaştırılması …………...……………. 5Çizelge 2.3. PORTA bacak fonksiyonları ..………………………………………... 70Çizelge 2.4. PORTB bacak fonksiyonları ..………………………………………... 71Çizelge 2.5. PORTC bacak fonksiyonları ..………………………………………... 72Çizelge 2.6. PORTD bacak fonksiyonları ..………………………………………... 73Çizelge 2.7. PORTE bacak fonksiyonları ..………………………………………... 74Çizelge 2.8. T AD zamanları için maksimum işlem frekansları …...…………..……. 42Çizelge 2.9. Bayt yönlendirmeli işlemler komut seti ……………………………… 93Çizelge 2.10.Bit yönlendirmeli işlemler, kontrol işlemlerive sade işlemler komut seti ………………………………………….. 94Çizelge 2.11.Hafıza işlemleri komut seti ve geliştirilmiş komut seti ……………... 95Çizelge 3.1. USB bacak tanımlamaları ……..……………………………………... 53xi


ATATÜRK ÜNİVERSİTESİFEN BİLİMLERİ ENSTİTÜSÜY.LİSANS TEZİPIC18F4550 MİKRODENETLEYİCİSİ İLE USB-PC VERİ AKTARIMARABİRİMİ GERÇEKLENMESİAdil Fatih KİREMİTCİELEKTRİK VE ELEKTRONİK MÜHENDİSLİĞİ ANABİLİM DALIERZURUM2007Her hakkı saklıdır.


Yrd.Doç.Dr. Tevhit KARACALI danışmanlığında, Adil Fatih KİREMİTCİ tarafındanhazırlanan bu çalışma 22/08/2007 tarihinde aşağıdaki jüri tarafından. Elektrik veElektronik Mühendisliği Anabilim Dalı’nda Yüksek Lisans tezi olarak kabul edilmiştir.Başkan : Doç. Dr. İrfan KAYMAZ İmza :Üye : Yrd. Doç. Dr. Tevhit KARACALI İmza :Üye : Yrd. Doç.Dr. Birol SOYSAL İmza :Yukarıdaki sonucu onaylarımProf.Dr. Mehmet ERTUĞRULEnstitü Müdürü


11. GİRİŞElektronik ve bilgisayar endüstrisindeki gelişmeler, günlük hayatta kullandığımız birçokcihazın daha hızlı, daha güvenilir ve daha kullanışlı olmasını gerektirmektedir. Bu amaçdoğrultusunda mikrodenetleyici olarak tanımlanan küçük bilgisayarlardan oldukça sıkyararlanılmaktadır. Özellikle elektronik ölçme ve enstrumasyon alanında bilgisayar vemikrodenetleyici destekli cihazların sayısı her geçen gün artmaktadır.Bilgisayar kullanan her kullanıcı yazıcı, fare, klavye, modem, tarayıcı, joystick, dijitalkamera gibi çevrebirimlerini sıklıkla kullanmaktadır. Bunun yanı sıra bilgisayarkontrolü gerektiren bilimsel çalışmalarda arabirim desteği önemli bir problem olarakgörülmektedir. USB (Universal Serial Bus) protokolünün teknolojinin kullanımınasunulmasıyla bu sıkıntılar önemli ölçüde azaltılmıştır.Bu çalışmada, PIC (Peripheral Interface Controller) mikrodenetleyicilerin diğermikrodenetleyicilere ve USB iletişimin paralel ve seri iletişime olan üstünlükleri biraraya getirilmiştir. USB protokolünün temelleri, kullanılan PIC18F4550mikrodenetleyicisinin özellikleri ve uygulamaları ayrıntılı olarak ele alınacaktır.1.1. Çalışmanın Amacı ve KapsamıBu çalışmanın amacı, özellikle enstrumantasyon alanında çevrebirimlerden alınan<strong>veri</strong>lerin USB portu üzerinden bilgisayara hızlı ve güvenli bir biçimde aktarımınısağlamaktır. Microchip firmasının üretmiş olduğu PIC mikrodenetleyicilerdenPIC18F4550, USB destekli üretilmiş bir mikrodenetleyici olup alınan sinyallerinişlenerek USB aracılığıyla bilgisayara gönderilmesi işlevini yerine getirmesi amacıylakullanılmıştır. Özellikle analog sinyallerin dijitale çevrilerek bilgisayar ortamındakullanıcıya görsel bir şekilde sunulması için Visual Basic programlama dili ile yazılmışbir arayüz tesis edilmiştir.


21.2. Çalışmanın AnahatlarıBu çalışma; giriş, kuramsal temeller, materyal ve yöntem, uygulama ve sonuç olmaküzere beş ana bölümden oluşmaktadır.Bölüm 2’de, USB seçiminin nedenleri, USB protokollerinin temelleri, PICmikrodenetleyici seçiminin nedenleri, PIC18F4550 mikrodenetleyicisinin özellikleri vePIC18F4550 A/D dönüştürücü modülü hakkında bilgi <strong>veri</strong>lmektedir.Bölüm 3’te, PIC18F4550 mikrodenetleyicisi için geliştirilen programlama devresinindonanım ve yazılım kısımları hakkında ayrıntılı bilgi <strong>veri</strong>lmektedir.Bölüm 4’te, uygulama için hazırlanan yazılım ve donanım yapılandırmalarıanlatılmaktadır. Uygulama devresinin özellikleri, C dilinde yazılan programlar, PICtarafında yazılan komutlar hakkında bilgi <strong>veri</strong>lmektedir.Bölüm 5’te, uygulamanın değerlendirilmesi ve tez uygulamasının pratikte kullanılmasıile ilgili bazı hususlar ve son olarak uygulamanın geliştirilmesi ile ilgili düşüncelerhakkında bilgi <strong>veri</strong>lmektedir.


32. KURAMSAL TEMELLER2.1. USB2.1.1. GirişUSB, Evrensel Seri Yol, bilgisayarlara çeşitli çevrebirimlerin takılabilmesi içingeliştirilmiş bir <strong>veri</strong> yolu standardıdır. Bilgisayar endüstrisinin ileri gelen firmalarındanCompaq, HP, IBM, Intel ve Microsoft firmaları tarafından Kasım 1994’de 0,7 sürümüile başlayan süreç, Nisan 2000’de 2,0 sürümü ile devam etmiştir. USB’nin kısa tarihçesiÇizelge 2.1’de özet olarak gösterilmiştir (Axelson 2005).Çizelge 2.1. USB kronolojisiSürümTarih0,7 11 Kasım 19940,8 30 Aralık 19940,9 13 Nisan 19950,99 25 Ağustos 19951,0 FDR 13 Kasım 19951,0 15 Ocak 19961,1 23 Eylül 19982,0 (0.79 tasarısı) 5 Ekim 19992,0 (0.9 tasarısı) 21 Aralık 19992,0 27 Nisan 2000USB’nin kullanım alanlarının başında ölçme ve kontrol gelmektedir. USB, kullanıcıyave tasarımcıya sağladığı avantajları ile günümüz teknolojisinin vazgeçilmez <strong>veri</strong> yolustandartlarından biri olmuştur. USB tasarımının 127 adet çevrebirimin bağlanabilmesine


4izin vermesi ve diğer avantajları göz önüne alındığında bu proje için en uygun <strong>veri</strong> yolustandardı olarak karşımıza çıkmıştır.USB’nin kullanıcıya sağladığı avantajlar:• Kullanım kolaylığı: USB’nin tasarımındaki başlıca neden kullanım kolaylığıdır.Otomatik tespit etme, tak çalıştır özelliği ile ayar gerektirmemesi, istenildiği andatakılıp sökülebilmesi ve harici güç kaynağı gerektirmemesi gibi özellikleriylekullanıcıya kullanım kolaylığı sağlamaktadır.• Güvenilirlik: USB’nin güvenilirliği donanım tasarımından ve transferprotokollerinden kaynaklanır. Programlamaya ya da manüel bir müdahaleye gerekkalmadan hatalar tespit edilerek, <strong>veri</strong>ciyi yeniden gönderim yapabileceği konusundabilgilendirmektedir.• Maliyet: Önceki arabirimlerden daha kompleks bir yapıya sahip olmasına rağmen,USB’nin devre elemanları pahalı sayılmazlar. Özellikle düşük hız gerektiren cihazlariçin son derece düşük maliyetlerle çalışmak mümkündür.• Esneklik: USB, dört transfer tipi ve üç farklı hızı ile birçok cihaz için uygulanabilirlikkazanmaktadır. USB sayesinde transferler gerçek zamanlara yakın düzeyde gerçekleşir.USB protokolünde diğer iletişim standartlarından farklı olarak sinyallere fonksiyonlaryüklenmez.• Güç Tüketimi: USB harici bir güç kaynağı gerektirmez. Tasarruflu devreler ve kodlaryardımıyla kullanılmayan cihazların gücü kesilir ve uyku moduna alınır.• Hız: USB, geleneksel seri ve paralel iletişime oranla çok daha yüksek bir <strong>veri</strong> iletişimisağlamaktadır. USB üç hızı destekler: Yüksek hız (480Mb/s), Tam hız (12Mb/s) ve


5Düşük Hız (1,5Mb/s). Çizelge 2.2’de çeşitli arabirimlerle USB’nin hız karşılaştırılmasıgösterilmiştir:Çizelge 2.2. USB ile diğer arabirimlerin karşılaştırılması (Axelson 2005)ArabirimUSBRS–232(EIA/TIA–232)RS–485(EIA/TIA–485)IrDAMicrowireSPII 2 CIEEE–1394(FireWire)FormatasenkronSeriasenkronSeriasenkronSeriasenkronseriinfraredsenkronSerisenkronSerisenkronSeriCihaz sayısı(max.)127232Seri 64Hız (max.)bit/saniye1,5M, 12M,480M20K (115Kbazıcihazlarda)10M2 115K Yazıcı, dizüstüKullanımFare, klavye, modem, audio vb.Modem, fare, enstrumantasyonVeri toplama ve kontrol sistemi8 2M Mikrodenetleyici haberleşmesi8 2,1M Mikrodenetleyici haberleşmesi40 3,4M Mikrodenetleyici haberleşmesi400M (IEEE–1394biçin 3,2G)Video, toplu kayıtIEEE–488(GPIB)Paralel 15 8M EnstrumantasyonEthernet Seri 1024 10M/100M/1G PC NetworkMIDIseri akımdöngüsü2 31,5K Müzik, görüntü kontrolüParalel printer port Paralel 2 8M Yazıcı, tarayıcı, disk sürgüleriUSB’nin tasarımcıya sağladığı avantajlar:• İşletim Sistemi Desteği: USB’ye destek veren bir sitemin üç asgarisi vardır: Sistemetakılan/sökülen cihazı algılamak, takılan cihazlarla haberleşmek ve son olarak yazılımsürücülerinin ve uygulamaların USB ile senkronize çalışmasını sağlamaktır.


6• Çevrebirim Desteği: USB’li cihazların donanımında bir kontrolör bulunur, istekleriyanıtlamak ise çevrebirimine düşer.• USB–IF Forum: USB–IF kâr amaçlı olmayan, bilgi, yazılım ve donanım aletleri iletest olanakları sağlayan bir kuruluştur.USB’nin gerek kullanıcıya gerekse tasarımcıya sağladığı avantajların yanı sıradezavantajlarından da kısaca bahsetmek gerekir. Bu dezavantajlar kullanıcı ve tasarımcıaçısından maddeler halinde aşağıdaki gibi sıralanabilir:• Kullanıcıya yönelik sorunlar: Eski donanımlar ve işletim sistemleriyle uyumluolmaması en temel handikaptır. Bundan başka, hız ve mesafe sınırlamaları nedeniyleUSB kullanımı bazı durumlarda pratik olmamaktadır.• Eski Donanımlarla Uyumsuzluk: Eski donanımlarda USB portu yoktur. USB olmayanbir cihazı USB porta bağlamanın yollarından biri konvertör kullanmaktır. Ancak buçözüm sadece konvertör sürücüsünün tanıdığı konvansiyonel protokollerin kullanıldığıçevrebirimlerinde olumlu sonuç <strong>veri</strong>r.• Sürat Limitleri: USB çok yönlü bir arabirim olmasına rağmen, USB ile her şeyihalletmeye çalışmak doğru değildir. Çizelge 2.1’e göre rakibi FireWire’dır. Yüksekhızlı USB, IEEE–1394 ile yarışabilirken IEEE–1394b ile yarışabilecek bir seçeneksunamamaktadır. Ancak FireWire’a göre yavaş olmasına rağmen daha ucuz olmasıUSB’nin bir avantajı olarak görülebilir.• Mesafe Sınırlamaları: USB masaüstü yol olarak tasarlanmıştır. USB için kablo boyu 5metreye kadar çıkabilir. Oysa RS–232, RS–485 veya Ethernet daha büyük mesafelereizin <strong>veri</strong>r. Bununla birlikte beş adet göbek (hub) kullanarak mesafeyi 30 metreyeçıkarmak olanaklıdır.


7• Cihazlar Arası Haberleşme: Masaüstü tasarımın bir sonucu haberleşmenin karargâhtarafından denetlenmesidir. Yani cihazlar doğrudan haberleşemezler.• Tasarımcıya yönelik sorunlar: Programlamanın karmaşıklığı başlıca handikaptır.Gerek PC’nin ve gerekse cihazın donanımında gözden kaçan noktalar (bug’lar) ciddisorunlar yaratır.• Protokolün Karmaşıklığı: USB çevrebiriminin programlanması, protokoller hakkındaayrıntılı bilgi sahibi olmayı gerektirir. Haberleşmenin büyük kısmı yonga tarafındanotomatik olarak halledilir. Ancak sürücü yazanlar, protokolleri ve sürücünün işleviniiyice anlamış olmaları gerekmektedir.• İşletim Sistemi Desteğinin Artırılması: Windows sınıf sürücüleri, uygulamalarıncihazlarla haberleşmesini sağlar. Cihaz bu sürücülerle çalışmadığı takdirde bir sürücüyazma problemi ortaya çıkabilir.• Donanım Sorunları (Bug’lar): İlk karargâh denetleyicilerinin donanımları sorunluolabiliyordu ve aynı şekilde çevrebirimlerinde de sorunlarla karşılaşılabiliyordu.Bundan kaçınmanın en iyi yolu donanım seçiminde gereken dikkati göstermek ve sonbilgileri elde etmektir.• Bedeller: USB–IF tarafından sunulan belirtim (spesifikasyon), web sitesinden ücretsizolarak alınabilir ve USB yazılımı geliştirmek için lisans bedeli ödemek gerekmez.Ancak USB arabirimi satışlarında durum farklıdır. Belirli bir Üretici Kimliğine sahipolmayı gerektirir ve bunun da belli bir bedeli vardır (Axelson 2005).


82.1.2. USB protokolüUSB seri, paralel vb. gibi diğer arabirimlere göre daha karmaşık bir iletişim protokolünesahiptir. Bu yüzden USB arabirimi ile dizayn edilecek bir cihazın belirligereksinimlerinden söz edilecektir.2.1.2.a. USB bileşenleriUSB’nin başlıca bileşenleri şunlardır:• USB Karargâhı (Host): USB karargâh platformu, USB karargâh denetleyicisininkurulduğu yer ile alıcı yazılım/cihazın çalıştığı yerdedir. USB Karargâh Denetleyicisi,karargâh ile USB çevrebirimleri arasında bir arabirimdir. Karargâh; USB cihazlarıntakılıp sökülmesi, karargâh ile cihazlar arasındaki <strong>veri</strong> akışının ve kontrolününyönetimi, takılan cihazlara güç sağlanması ve daha birçok işlemi yürütmekle görevlidir.• USB Göbek (Hub): Birçok USB cihazın tek bir USB portuna takılarak, USBkarargâhıyla haberleşebilmesi için kullanılan cihazlara göbek (hub) denir. Karargâhınarka alanında bulunan göbekler kök göbek (root hub) olarak adlandırılır. Diğer göbeklerise harici göbekler (external hubs) olarak adlandırılır.• USB Cihaz (Device): USB yolu üzerinden <strong>veri</strong> ya da kontrol bilgisi ileten veya alanaygıtlara USB cihaz adı <strong>veri</strong>lir (Şahin vd 2006).2.1.2.b. USB cihazlarda <strong>veri</strong> akışıUSB, karargâhla cihazların birbirleri arasında haberleşebilmeleri için bir protokolsağlar. Karargâh belirli bir zamanda sadece bir USB cihazı ile haberleşebilir, yani aynıanda birden çok cihazla haberleşme durumu söz konusu değildir. USB cihazların


9karargâhla olan haberleşmeleri, karargâh üzerindeki yazılım hafıza tamponları ilecihazların son uçları arasına kurulan sanal borular yordamıyla birebir gerçekleştirilir.USB yolundaki <strong>veri</strong> akışı yarı çift-yönlüdür (half-duplex), yani belirli bir zamanzarfında <strong>veri</strong> sadece bir yönde taşınabilir (Tan 1997).Büyük USB borusu (12 Mb/s)Küçücük borularSon uçlarUSB KarargâhBağlanacak her USB cihaz için küçük borular(maksimum 127 adet)USB CihazŞekil 2.1. USB boruları ve son uç kavramı (Tan 1997)Şekilde, USB karargâhının kendisine bağlanacak USB çevrebirimlerinin her birine (127adete kadar) küçük borular gönderdiği şematiksel olarak gösterilmiştir. USB alıntısı(token) içerisinde 7 adet adres bit’i bulunmaktadır. Ancak, USB varsayılan (default)adresi olarak adlandırılan, 0000 000B adresi yeni takılan her aygıt için onuyapılandırmak ve kontrol etmek için kullanılır.Şekil 2.1.’de gösterilen her küçük boru, 16 çift (16 adet IN ve 16 adet OUT) toplamda32 küçücük boruya (son uç) kadar ayrılabilir. Küçük borular, duraksız (stream) ve mesaj(message) boruları olmak üzere iki çeşittir. Duraksız borular eşzamanlı, kesme ve yığıntipi <strong>veri</strong> iletişiminde kullanılırken, mesaj boruları sadece kontrol <strong>veri</strong> iletişimindekullanılır. Her USB alıntısı 4 adet son uç bitine sahiptir ve bu alıntı IN (giriş) veya OUT(çıkış) alıntısı olarak tanımlanır. Eğer bir USB cihazı; karargâhtan bir IN alıntısı alırsa,karargâha <strong>veri</strong> gönderecektir, karargâhtan OUT alıntısı alırsa, karargâh <strong>veri</strong> gelmesinibekleyecektir (Tan 1997).


10PCUSB KarargahıUSB Alıntısı(Token)— Hedef cihaz adresi— Son uç numarası— Veri iletişim yönüUSB CihazŞekil 2.2. USB <strong>veri</strong> hareketiSon uç, karargâhla cihaz arasında yapılan haberleşmede <strong>veri</strong> akışının kaynak tarafındaya da sonlanma tarafında bulunan bir tampon olarak düşünülebilir. Her USB cihazıbirbirinden bağımsız son uç koleksiyonlarından oluşur. USB’nin tüm hız opsiyonlarıiçin (düşük, tam ve yüksek) bir çift-yönlü kontrol son uç (Son Uç 0) ve 15 tek yönlü sonucu destekler. Her tek-yönlü son uç gelen veya giden transfer işleminde kullanılabilir.2.1.2.c. USB <strong>veri</strong> transfer tipleriUSB cihaz, karargâh üzerindeki hafıza tamponu ile cihaz üzerindeki son uç arasındakiboru üzerinden karargâh ile haberleşir. USB spesifikasyonu dört <strong>veri</strong> transfer tipinidesteklemektedir. Belirli bir son uç için <strong>veri</strong> transfer tipi seçimi cihazın ve yazılımıngereksinimlerine göre seçilmektedir. Bu seçim son uç tanımlayıcıda seçilmektedir(Axelson 2005).Eşzamanlı (Isochronous) transferBüyük miktarlardaki <strong>veri</strong>nin (1023 bayt’a kadar), bilgisayar ile çevrebirim arasındaperiyodik ve sürekli bir şekilde iletilmesini sağlayan transfer tipidir. Zaman açısındankritik olan ama hataya karşı hassas olmayan akan <strong>veri</strong> (streaming data) iletimindekullanılır. Örneğin USB kamera ya da ses kartları gibi. Sabit bir bant genişliğisağlanarak küçük hatalara izin <strong>veri</strong>lirken <strong>veri</strong> akışının kesilmemesi sağlanır.


11Eşzamanlı borusu tek yönlü bir borudur, yani belirli bir son uç sadece <strong>veri</strong> iletir veya<strong>veri</strong> alır. İki yönlü bir eşzamanlı iletişim isteniyorsa, her iki yön için birer adet son uçkullanılmalıdır (Axelson 2005).Yığın (Bulk) tipi transferYığın tipi transfer ise büyük miktarlardaki <strong>veri</strong>nin aktarımı için kullanılan bir <strong>veri</strong>transfer tipidir. Taşınacak <strong>veri</strong>nin alıcı kısmında doğru bir biçimde alınması garantiedilirken, <strong>veri</strong>nin iletim zamanı konusunda garanti <strong>veri</strong>lemez. Tipik olarak, yazıcı vetarayıcı haberleşmesinde yığın tipi iletişim kullanılır.Diğer akış borularında olduğu gibi, yığın boruları da tek yönlüdür, yani çift yönlü biryığın iletişimi için iki adet yığın son ucuna ihtiyaç vardır.Yığın tipi iletişim diğer iletişim tiplerinden farklı olarak sadece tam-hız ve yüksek-hızUSB cihazlarda kullanılabilir. Yığın son uçları için maksimum <strong>veri</strong> paketi boyutu, tamhızlı cihazlar için 8, 16, 32 veya 64 bayt, yüksek hızlı cihazlar için ise sadece 512bayttır (Axelson 2005).Kesme (Interrupt) tipi transferAni reaksiyon gerektiren fare ya da klavye ile iletişimde kullanılır. Diğer <strong>veri</strong>transferlerine göre daha düşük miktarlardaki <strong>veri</strong>nin, zaman ve <strong>veri</strong>nin doğruluğugaranti altına alınarak iletilmesi için kullanılır. Örneğin, bilgisayara bağlı bir fare ileyapılan <strong>veri</strong> iletişiminde kullanılabilir. Kesme borusu da eşzamanlı boru gibi tek yönlüve periyodik bir borudur. Kesme son uçları için maksimum <strong>veri</strong> paketi boyutu, düşükhızlı cihazlar için 8 bayt veya daha az, tam hızlı cihazlar için 64 bayt veya daha az veyüksek hızlı cihazlar için ise sadece 1,024 bayt veya daha azdır (Axelson 2005).


12Kontrol (Control) tipi transferPC ile USB arasında kurulum, ilk değerlerin atanması ve konfigürasyon bilgilerinintaşınmasında kullanılır. Bu bilgiler önemli olduğundan CRC denilen kontrol kodlarıeklenir. Kontrol borusu çift-yönlü bir boru olup, her iki yönde <strong>veri</strong> akışınıdesteklemektedir. Kontrol son uçları için maksimum <strong>veri</strong> paketi boyutu, düşük hızlıcihazlar için 8 bayt, tam hızlı cihazlar için 16, 32 veya 64 bayt ve yüksek hızlı cihazlariçin ise sadece 64 bayttır.KByte/s140012001000800600400200121683224 64 0,81023Tam HızDüşük Hız0Kontrol Kesme Yığın EşzamanlıŞekil 2.3. USB <strong>veri</strong> iletişim tiplerinin teorik olarak taşıyabilecekleri maksimum <strong>veri</strong>büyüklüğüUSB <strong>veri</strong> iletişim tiplerinin taşıyabilecekleri <strong>veri</strong> miktarı açısından karşılaştırılmasıŞekil 2.3’te grafiksel olarak <strong>veri</strong>lmiştir (Axelson 2005).2.1.2.d. USB sürücüleriWin32 sürücü modeli (WDM, Win32 Driver Model) Windows sürücü sisteminintemelini oluşturur. Bu modelde donanım ile iletişim işlemi çeşitli katmanlaraayrılmıştır. Uygulama katmanında yazılım ile ilgilenenlerin tanıdığı API (ApplicationProgram Interface) çağrıları yer alır. API çağrıları WDM içerisinde yer alan hazırtanımlanmış sınıfları ya da kullanıcının tanımlamış olduğu sürücü fonksiyonlarını


13çağırır. Buradan da daha alt seviye giriş-çıkış istek paketleri (I/O request packets, IRP)kullanarak gerçekleştirilir. Bir alt kademede bulunan USB yol sürücüsü ise USBcihazlarına ilişkin güç, sayma (enumeration) ve çeşitli bilgi alış<strong>veri</strong>şi işlemlerinimeydana getirir. Daha aşağıdaki USB denetleyici sürücüsü ise bilgisayar içerisindekiUSB donanımına doğrudan erişimi sağlar. Bu sürücüler Windows içerisinde mevcuttur(Soydaş 2002).Uygulama KoduSınıf SürücüleriKullanıcı TanımlıSürücülerUSB YolSürücüsüUSB DenetleyiciSürücüsüUSB DonanımıŞekil 2.4. USB sürücü modeli2.1.2.e. USB konfigürasyonuBir USB fonksiyonu başlatılmadan önce, cihaz konfigürasyonu yapılmalıdır. Karargâh,yapılandırmayı, USB cihaz üzerinden <strong>veri</strong> sağlama yoluyla almış olduğu bilgilerlegerçekleştirir. USB cihazlar, işlevlerini tanımlayıcılar (decriptors) ile karargâha raporederler. Tanımlayıcı, hangi <strong>veri</strong>nin hangi formatta transfer edileceğini belirtir.USB tanımlayıcılar hiyerarşik bir yapı içerisinde dört kısımda incelenebilir:• Cihaz tanımlayıcıları


14• Konfigürasyon tanımlayıcıları• Arabirim tanımlayıcıları• Son uç tanımlayıcılarıHer USB cihaz için sadece bir adet cihaz tanımlayıcısı vardır. Şekil 2.5’te gösterildiğigibi her cihaz bir veya daha çok konfigürasyona, her konfigürasyon bir veya daha çokarabirime ve her arabirim sıfır veya daha çok son uca sahiptir (Microchip TechnologyInc. 2004).Cihaz TanımlayıcıKonfigürasyon TanımlayıcıKonfigürasyon TanımlayıcıArabirim TanımlayıcıArabirim TanımlayıcıSon Uç TanımlayıcıSon Uç TanımlayıcıŞekil 2.5. Tanımlayıcı hiyerarşisiCihaz tanımlayıcısıCihaz tanımlayıcısı, üretici kimliği (VID, Vendor Identity), ürün kimliği (PID, ProductIdentity), seri numarası, cihaz sınıfı ve konfigürasyon sayısı gibi genel bilgiler <strong>veri</strong>r.Daha önce de belirtildiği gibi her cihaz için sadece bir cihaz tanımlayıcı vardır.


15Konfigürasyon tanımlayıcısıKonfigürasyon tanımlayıcı, cihazın güç gereksinimleri ve belirli bir konfigürasyondakaç farklı arabirimin destekleneceği bilgilerini <strong>veri</strong>r. Bir cihaz için birden fazlakonfigürasyon olabilir, örneğin düşük-güç ve yüksek-güç konfigürasyonu gibi.Arabirim tanımlayıcısıArabirim tanımlayıcısı, arabirimin sınıfı yanında arabirimde kullanılacak son uçsayısının detaylarını da <strong>veri</strong>r. Bir konfigürasyon için birden fazla arabirim olabilir.Son uç tanımlayıcısıSon uç tanımlayıcı, son ucun transfer tipi ve yönü ile diğer spesifik özelliklerini <strong>veri</strong>r.Bir USB cihazı birçok son uca sahip olabileceği gibi, son uçlar farklı konfigürasyonlartarafından paylaşılmış olabilir.2.2. PIC Mikrodenetleyiciler2.2.1. PIC nedir?Microchip Technology firması tarafından üretilen mikrodenetleyici yongaları PIC“Çevresel Arabirim Denetleyicisi” olarak adlandırılmaktadır ve programlanabilenarabirim kontrolörü olarak görev yapmaktadır.İlk olarak 1994 yılında 16 bitlik ve 32 bitlik büyük işlemcilerin giriş ve çıkışlarındakiyükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu


16için geliştirilmiştir. Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54, bu ihtiyacınilk meyvesidir.PIC mikrodenetleyiciler hızlı çalışmaları amacıyla RISC (Reduced Instruction SetComputer) işlemciler olarak tasarlanmışlardır. Bu mimari biçiminde program kodları ve<strong>veri</strong>ler farklı bellek blokları içerisinde bulunmaktadır. Her bir komut çevriminde hemprogram hem de <strong>veri</strong> hücresine erişilebilmektedir. Bu nedenle işlem hızı yüksektir.RISC işlemcilerde bir komutun icra edilmesi için 1 dâhili saat çevrimi gerekir. Yazılanprogramların <strong>veri</strong>leri işlemesi için çok az sayıda komut gerekir (Şahin vd 2006).2.2.2. Neden PIC?PIC mikrodenetleyicilerinin tercih edilmesi noktasında, PIC’lerin diğermikrodenetleyicilere göre olan avantajları göz önüne alınmıştır. Bu avantajlar maddelerhalinde incelenmiştir:• Kod <strong>veri</strong>mliliği: PIC, Harvard mimarisi temelli 8 bit'lik bir mikrodenetleyicidir. Bu,bellek ve <strong>veri</strong> için ayrı yerleşik bus'ların bulunduğu anlamına gelir. Böylelikle akışmiktarı <strong>veri</strong>ye ve program belleğine anında erişim sayesinde arttırılmış olur. Gelenekselmikrodenetleyicilerde <strong>veri</strong> ve programı taşıyan bir tek yerleşik bus bulunur. Bu, PIC ilekarşılaştırıldığında işlem hızını en az iki kat yavaşlatır.• Güvenilirlik: Tüm komutlar 12 veya 14 bitlik bir program bellek sözcüğüne sığar.Yazılımın, programın <strong>veri</strong> kısmına atlamaya ve <strong>veri</strong>yi komut gibi çalıştırmasına gerekyoktur. Bu 8 bit'lik bus kullanan ve Harvard mimarisi temelli olmayanmikrodenetleyicilerde gerçekleşmektedir.• Komut Seti: 1980’lerin başından itibaren kullanılan RISC mimarisine sahip olmalarınedeniyle, çok az sayıda ve basit komutlar kullanıldığından öğrenilmesi kolaymikrodenetleyicilerdir.


17• Hız: PIC’ler oldukça hızlı mikrodenetleyicilerdir. Her bir komut döngüsü sadece1ms’lik zaman zarfında gerçekleştirilebilmektedir. Örneğin 5 milyon komutluk birprogramın, 20 MHz bir kristalle adımlanması yalnızca 0,25 saniye sürer. Bu süre 386SX 33 işlemcisinin hızının neredeyse iki katıdır.• Statik İşlem: PIC tamamıyla statik bir mikrodenetleyicidir. Başka bir deyişle saatidurdurduğunuzda, tüm kaydedici içeriği korunur. Pratikte bunu tam olarakgerçekleştirmeniz mümkün değildir. PIC' i uyutma moduna getirdiğinizde, saat durur vePIC' e uyutma işleminden önce hangi durumda olduğunu size hatırlatacak çeşitlibayraklar kurar. PIC uyuma modunda yalnızca 1 mA'dan küçük değere sahip beklemeakımı çeker.• Yazılım: PIC mikrodenetleyicileri programlamak için gerekli yazılım Microchipfirması tarafından internet vasıtasıyla ücretsiz olarak sağlanmaktadır. Bunun yanı sıraBasic ve C dili benzeri (PicBasic, Pic–C, JAL vb.) dillerle programlanabilmelerinedeniyle karmaşık sistem dizaynında programlamayı kolaylaştırmaktadırlar (Kızılbey2005).PIC mikrodenetleyicilerinin bu avantajlarının yanı sıra kolay bulunabilmeleri, ucuzolmaları, geniş bir kullanıcı kitlesinin bulunması nedeniyle bol miktarda örnekprogramın internet aracılığıyla paylaşılması, Microchip firmasının web sitesinden eldeedilebilecek uygulama programlarının yazılım geliştirmede örnek olarakkullanılabilmesi gibi avantajları, bu projede PIC mikrodenetleyicilerininkullanılmasındaki diğer etkenler olmuştur.2.2.3. Neden PIC18F4550?PIC18F4550, Microchip Technology firması tarafından üretilen en gelişmişmikrodenetleyicilerden biridir. PIC18F Tam Hız ailesi olarak adlandırılan gruptaki


18PIC18F2455/2550/4455/4550 mikrodenetleyicilerden biri olan PIC18F4550, birçoközelliğiyle kendi üretim grubundaki mikrodenetleyicilerden de üstündür. PIC18F TamHız ailesi mikrodenetleyiciler çok geniş bir kullanım alanına sahiptir :• Endüstriyel uygulamalar (üretim cihazları, <strong>veri</strong> günlükleyicileri, tarayıcılar, akıllıgöstergeler, mikro yakıt pilleri, robot kontrolör arabirimleri, endüstriyel zamanlayıcılar,kablo-test cihazları, gaz-akış analizörleri vb.),• Medikal uygulamalar (sese duyarlı uygulamalar, gelişmiş tekerlekli sandalyeler,araştırma cihazları otomasyonu vb.),• Otomotiv uygulamaları (araç arıza tanıma sistemleri, kara kutu uygulamaları,ultrasonik uygulamalar),• Pille çalışan aletler (portatif aletler, sensörler, güvenlik uygulamaları, uzaktankumanda kontrol sistemleri, ev otomasyonu)• Tüketici elektroniği (elektronik kartvizit tarayıcıları, ses kaydedicileri, UPS sistemleri,MP3 çalarlar, yangın alarm sistemleri, güvenlik sistemi programlayıcıları) (Chandler2004).USB aracılığıyla <strong>veri</strong> toplama (data acquisition) amacıyla elektronik piyasasına sürülenPIC18F4550, 48 MHz’lik hızıyla diğer mikrodenetleyicilere göre öne çıkmaktadır.Bunun yanı sıra PIC18F4550’nin USB desteği, çalışma frekans aralığı, haberleşme hızı,hafıza desteği, güç tüketimi, osilatör özellikleri, A/D çevirici desteği gibi avantajlarıayrıntılarıyla incelenecektir.USB aracılığıyla <strong>veri</strong> toplama amaçlı üretilen tek mikrodenetleyici PIC18F4550değildir. Atmel AVR-USB, Cypress EZ-USB, Cypress EnCoRe II, FreescaleMC68HC908JB16, Freescale MCF5482 ColdFire, Microchip 16C745/765 ve TexasInstruments, Silicon Laboratories firmalarının üretmiş olduğu birçok mikrodenetleyicimevcuttur. Ancak bunlardan bazıları USB 2.0 versiyonunu desteklememekte, bazılarıhız açısından yetersiz kalmakta, bazıları nispeten pahalı veya PIC kadar yaygınkullanılmayan ürünlerdir.


19PIC mikrodenetleyicilerinin avantajları ile PIC18F4550’nin avantajları bir arayagetirildiğinde, proje için en uygun seçimin PIC18F4550 mikrodenetleyici olduğusonucuna varılmıştır.2.3. PIC18F4550 Özellikleri ve Yapısı2.3.1 PIC18F4550PIC18F4550 diğer tüm PIC18 ailesi mikrodenetleyicilerinin sahip olduğu gibi ucuzolmasının yanında yüksek hesaplama performansı ile birlikte yüksek dayanıklılığa vegeliştirilmiş Flash program hafızasına sahiptir. Aynı zamanda PIC18F4550’nindizaynında yapılan geliştirmelerle, yüksek performanslı ve güç hassasiyetliuygulamalarda seçilmesi sağlanmıştır (Microchip Technology Inc. 2004).PIC18F4550 mikrodenetleyicisinin genel olarak özellikleri şu şekilde özetlenebilir(Microchip Technology Inc. 2004):USB Özellikleri• USB 2,0 versiyonu ile uyumludur.• Düşük Hız ve Tam Hız desteğine sahiptir.• Kontrol, Kesme, Eşzamanlı ve Yığın tipi <strong>veri</strong> transfer tiplerini destekler.• 32 uç noktasına kadar destek <strong>veri</strong>r. (16 iki-yönlü)• USB için çift erişimli 1 Kbayt’lık RAM’e sahiptir.• Yonga üzeri USB alıcı-<strong>veri</strong>cisi ve voltaj regülatörüne sahiptir.• Harici USB alıcı-<strong>veri</strong>cileri için arabirime sahiptir.• USB duraksız transferler için Duraksız Paralel Port’a (SPP) sahiptir.


20Güç Tasarruf Modları:• Çalışma modu: CPU açık, çevrebirimler açık• Boşta modu: CPU kapalı, çevrebirimler kapalı.• Uyku modu: CPU kapalı, çevrebirimler kapalı.• Boşta modunda çekilen akım tipik olarak 5,8 μA seviyelerindedir.• Uyku modunda çekilen akım tipik olarak 0,1 μA seviyelerindedir.• Timer1 osilatörü: 1,1 μA tipik, 32 kHz, 2 VEsnek Osilatör Yapısı:• Yüksek Duyarlıklı PLL içeren Dört kristal modu.• 48 MHz’e kadar iki farklı Harici Saat modu• Dâhili osilatör bloğu:• 31 kHz – 8 MHz arası kullanıcının seçebileceği frekanslar• Frekans sapmasını kompanze etmek için kullanıcı tarafından ayarlanabilme özelliği• 32 kHz’lik Timer1 kullanılarak oluşturulan ikincil osilatör• Çiftli osilatör seçenekleri, mikrodenetleyici ve USB modülünün farklı saat hızlarındaçalışabilmesini sağlar.• Arıza-güvenli saat monitörü, herhangi bir saatin durması halinde güvenli kapanmayısağlar.Çevrebirim Özellikleri:• Yüksek alıcı/kaynak akımı; 25 mA/25 mA• Üç harici keme• Dört Zamanlayıcı Modülü; Timer0:Timer3• 2 adet Yakalama (Capture)/Karşılaştırma (Compare)/Darbe Genişlik Modülasyonu(PWM) modülü (CCP)


21• Geliştirilmiş Yakalama/Karşılaştırma/Darbe Genişlik Modülasyonu modülü (ECCP)• Geliştirilmiş USART (Universal Synchronous Asynchronous ReceiverTransmitter/Evrensel Senkron Asenkron Alıcı Verici) modülüne sahiptir. Bu sayedeLIN (Local Interconnect Network/Yerel Bağlantılı Ağ) Yol’u destekler.• MSSP (Master Synchronous Serial Port/Ana Senkron Seri Port) modülü 3–tel SPI(Serial Peripheral Interface/Seri Çevrebirim Arabirimi) (dört modun tamamı) ve I 2 C(Inter–Integrated Circuit) ana–uydu modlarını desteklemektedir.• 13 adet elde etme zamanı programlanabilir 10–bitlik Analog/Dijital çevirici girişinesahiptir.• Giriş çoğullayıcılı çift analog karşılaştırıcıya sahiptir.Özel Mikrodenetleyici Özellikleri:• Genişletilmiş komut setiyle C derleyicileri için mükemmel bir mimariyeulaştırılmıştır.• 100 000 yazma/silme kapasitesine sahip geliştirilmiş Flash program hafızasınasahiptir.• yazma/silme kapasitesine sahip Data EEPROM’a sahiptir.• Flash/Data EEPROM’u 40 senelik uzun bir ömre kadar dayanıklıdır.• Yazılım kontrolü ile kendi kendisini programlayabilme özelliğine sahiptir.• Kesmeler için öncelik seviyelerine sahiptir.• 8 x 8 tek–döngülü donanım çarpanına sahiptir.• İki bacağından <strong>veri</strong>lecek 5 Voltluk tek bir kaynakla ICSP (In-Circuit SerialProgramming) sağlanır.• Geniş bir çalışma voltaj aralığına sahiptir. (2,0 V–5,5 V)2.3.1.a. USB desteğiPIC18F4550, USB 2,0 versiyonu ile çalışabilecek şekilde tam donanımlı bir haberleşmemodülüne sahiptir. Bu modül, tüm desteklenen <strong>veri</strong> transfer tiplerinde hem düşük – hız


22hem de tam–hızda çalışabilecek şekilde dizayn edilmiştir. Kendi üzerindeki USB alıcı<strong>veri</strong>cisive 3,3 Volt regülatör ile harici USB alıcı-<strong>veri</strong>cileri ve regülatörleridesteklemektedir. PIC18F4550’nin projede kullanılmasının temel nedeni USBdesteğidir. Microchip Technology firması tarafından PIC18F ailesi olarak adlandırılangruptaki PIC18F2455/2550/4455/4550 tüm mikrodenetleyicilerin USB desteğibulunmaktadır (Microchip Technology Inc. 2004).2.3.1.b. Çoklu osilatör seçenekleri ve özellikleriPIC18F4550, kullanıcıların uygulama donanımı geliştirme işlemlerinde on iki farklıosilatör seçeneğiyle geniş bir çalışma aralığı sunmaktadır. Bunlar; kristallerle veyaseramik rezonatörlerle gerçekleştirilebilecek olan dört kristal modu, dört harici saatmodu, 8 MHz’lik dâhili osilatör (±%2 doğruluk), 31 kHz’lik INTRC kaynak, 125 kHz–4 MHz arasında kullanıcının seçebileceği 6 farklı saat seçeneği, PLL frekansçoğullayıcısı sayesinde 4 MHz–48 MHz arası saat hızına sahiptir.2.3.1.c. Hafıza özellikleriPIC18F4550 mikrodenetleyicisi 32 kbayt’lık Flash memory’e, 2 kbayt’lık SRAM’e ve256 bayt’lık EEPROM’a sahiptir. Ayrıca, Microchip Technology firması tarafındangeliştirilmiş olan PEEC sayesinde, 100 000 yazma/silme kapasitesine sahip geliştirilmişFlash program hafızası ve 1 000 000 yazma/silme kapasitesine sahip EEPROM’u ile<strong>veri</strong>leri 40 yıla kadar hafızasında tutabilmektedir.PIC18F4550’nin en önemli avantajlarından biri de 32 kbayt’lık kendisiniprogramlayabilme özelliğine sahip Geliştirilmiş Flash hafızasıdır. Bu sayede USB portüzerinden gerçekleştirilen sonlandırma uygulamalarında alan yükseltmelerine izin<strong>veri</strong>lmiş olur (Microchip Technology Inc. 2004).


232.3.2. PIC18F4550 giriş/çıkış portlarının fonksiyonlarıŞekil 2.6’da gösterildiği gibi PIC18F4550 5 adet giriş/çıkış portuna sahiptir. Birkaçamaç için kullanılan mikrodenetleyici portlarının tümünde hangi amaç içinkullanılacaksa bacağı oraya yönlendiren multiplexer (çoklayıcı) bulunmaktadır.Giriş/çıkış portlarının bazı bacakları kullanılan çevrebirimin özelliklerine göre alternatifbir fonksiyonla çoklanabilir. Genel olarak, bir çevrebirim seçilir kılındığında,mikrodenetleyicinin ilgili bacağı artık sadece genel amaçlı bir giriş/çıkış bacağıolmayacaktır (Microchip Technology Inc. 2004).Şekil 2.6. PIC18F4550 bacak yapısıHer port kendi işlemi için üç kaydediciye sahiptir. Bunlar;• Port Kaydedici (denetleyicinin bacaklarındaki seviyeleri okur)• TRIS Kaydedici (<strong>veri</strong> yönünü belirleyen yazmaçtır)• LAT Kaydedicisi (çıkış mandalı)


24I/O portlarının tipleri analog, dijital, TTL veya Schmitt Trigger (ST) yapıda olabilir.Schmitt Trigger yapı ile TTL (Transistor-Transistor-Lojik) yapı arasındaki farklarşunlardır:• ST yapılı uçlarda ‘0’dan ‘1’e veya ‘1’den ‘0’a geçiş süresi daha kısadır. Bu nedenledaha yüksek frekanslı <strong>veri</strong> giriş/çıkışı yapılmasına uygundur.• ST yapılı uçlarda ‘0’ ve ‘1’i belirleyen gerilim aralıkları birbirinden uzaktır. Bir uçtangirilen 0 – 1 Volt arasındaki gerilimler “0”, 4–5,5 Volt arasındaki gerilimler “1” olarakalgılanır.• TTL yapılı uçlarda ‘0’dan ‘1’e veya ‘1’den ‘0’a geçiş süresi daha uzundur.• TTL yapılı uçlarda ‘0’ ve ‘1’i belirleyen gerilim aralıkları birbirine daha yakındır. Biruçtan girilen 0–2 Volt arasındaki gerilimler “0”, 2–5,5 Volt arasındaki gerilimler “1”olarak algılanır.PORTAPORTA, 8–bit genişliğinde hem giriş hem çıkış özelliğine sahip iki–yönlü bir porttur.Hangi bit’in giriş hangi bit’in çıkış olacağı TRISA kaydedicisi tarafından belirlenir.TRISA kaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTA bacaklarıgiriş, “0” olarak belirlenen bit’lerin karşılığındaki PORTA bacakları çıkış olarakbelirlenir. PORTA tamponlanmıştır, yani bir <strong>veri</strong> gönderilene kadar eski <strong>veri</strong> PORTAkaydedicisinde tutulur. LATA kaydedicisi de hafıza eşlemelidir. LATA kaydedicisi,PORTA için mandallanmış çıkış <strong>veri</strong>lerini okur ve yazar.RA4 bacağı Timer0 girişi ile çoklanmıştır ve RA4/TOCKI bacağı haline gelmiştir. RA4aynı zamanda USB modülü ile de çoklanmış olup, harici bir USB alıcı-<strong>veri</strong>cisindengelen bilgiyi alacak bir alıcı gibi kullanılabilir. Yine RA6 bacağı ana osilatör girişi ileçoklanmış olup, konfigürasyon kaydedicisi vasıtasıyla bir giriş/çıkış bacağı veya anaosilatör girişi olarak seçilebilir.


25PORTA bacaklarının çoğu, V REF+ , V REF- ve karşılaştırıcı referans çıkış voltajı gibianalog girişler olarak kullanılabilmektedir. RA0, RA1, RA2, RA3 ve RA5 bacaklarıanalog/dijital çevirici ile çoklanabilmektedirler. Tüm PORTA bacakları TTL girişseviyelerine ve tam CMOS çıkış sürücülerine sahiptir.A Portuna ait bacaklar ve işlevleri Çizelge 2.3’te <strong>veri</strong>lmiştir (EK 1).PORTBPORTB, 8–bit genişliğinde hem giriş hem çıkış özelliğine sahip iki–yönlü bir porttur.Hangi bit’in giriş hangi bit’in çıkış olacağı TRISB kaydedicisi tarafından belirlenir.TRISB kaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTB bacaklarıgiriş, “0” olarak belirlenen bit’lerin karşılığındaki PORTB bacakları çıkış olarakbelirlenir. LATB kaydedicisi de hafıza eşlemelidir. LATB kaydedicisi, PORTB içinmandallanmış çıkış <strong>veri</strong>lerini okur ve yazar.PORTB bacaklarından dördü (RB4, RB5, RB6 ve RB7) giriş olarak seçildiklerindekesme değiştirme özelliğine sahip olurlar. RB2 ve RB3 bacakları harici USB alıcı<strong>veri</strong>cileriiçin fark sinyali çıkışları olarak çoklanmışlardır. RB4 bacağı aynı zamandaDuraksız Paralel Port için yonga seçim fonksiyonu (CSSPP) olarak çoklanmıştır.B Portuna ait bacaklar ve işlevleri Çizelge 2.4’te <strong>veri</strong>lmiştir (EK 2).PORTCPORTC 8–bit genişliğinde hem giriş hem çıkış özelliğine sahip iki–yönlü bir porttur.Hangi bit’in giriş hangi bit’in çıkış olacağı TRISC kaydedicisi tarafından belirlenir.TRISC kaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTC bacaklarıgiriş, “0” olarak belirlenen bit’lerin karşılığındaki PORTC bacakları çıkış olarak


26belirlenir. LATC kaydedicisi de hafıza eşlemelidir. LATC kaydedicisi, PORTC içinmandallanmış çıkış <strong>veri</strong>lerini okur ve yazar.PORTC öncelikle EUSART, MSSP ve USB modüllerini de içine alan seri haberleşmemodülleri ile kullanılmak üzere çoklanmıştır. RC4 ve RC5 bacakları dışında PORTCSchmitt Trigger giriş tamponları kullanır.RC4 ve RC5 bacakları USB modül ile çoklanmıştır. USB modülünün konfigürasyonunabağlı olarak, entegre üzerindeki USB alıcı-<strong>veri</strong>cisi için fark <strong>veri</strong> hatları olarak ya daharici bir USB alıcı-<strong>veri</strong>ciden gelen <strong>veri</strong> girişleri olarak kullanılabilirler. RC4 ve RC5diğer PORTC bacaklarından farklı olarak TTL giriş tamponlarına sahiptirler ve aynızamanda TRISC bitleriyle durum değiştirmezler. Dijital portlar gibi sadece dijital girişolarak kullanılırlar. USB işlemi için yapılandırıldıklarında; <strong>veri</strong> yönü, konfigürasyontarafından ve USB modülünün belirlenen bir zamandaki durumuna göre belirlenir. Eğerharici bir USB alıcı-<strong>veri</strong>ci kullanılmışsa, RC4 ve RC5 her zaman <strong>veri</strong>ciden gelengirişler olarak görev yaparlar. Eğer entegre üzerindeki alıcı-<strong>veri</strong>ci kullanılmışsa, <strong>veri</strong>yönü USB modülü tarafından işlemin gerçekleştirildiği anda belirlenir.C Portuna ait bacaklar ve işlevleri Çizelge 2.5’te <strong>veri</strong>lmiştir (EK 3).PORTDPORTD, 8–bit genişliğinde hem giriş hem çıkış özelliğine sahip iki–yönlü bir porttur.Hangi bit’in giriş hangi bit’in çıkış olacağı TRISD kaydedicisi tarafından belirlenir.TRISD kaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTD bacaklarıgiriş, “0” olarak belirlenen bit’lerin karşılığındaki PORTD bacakları çıkış olarakbelirlenir. LATD kaydedicisi de hafıza eşlemelidir. LATD kaydedicisi, PORTD içinmandallanmış çıkış <strong>veri</strong>lerini okur ve yazar.


27PORTD’ye ait tüm bacaklar Schmitt Trigger giriş tamponları ile gerçekleştirilmiştir.Her bacak giriş veya çıkış olarak ayrı ayrı yapılandırılabilir. PORTD bacaklarından üçü(RD5, RD6 ve RD7) Geliştirilmiş CCP (Capture/Compare/PWM) modülünün çıkışlarıile çoklanmışlardır.PORTD aynı zamanda 8–bit genişliğinde Duraksız Paralel Port (Streaming Paralel Port,SPP) olarak yapılandırılabilir. Bu moda, giriş tamponları TTL’dir.D Portuna ait bacaklar ve işlevleri Çizelge 2.6’da <strong>veri</strong>lmiştir (EK 4).PORTEPORTE, 4–bit genişliğinde bir porttur. Üç bacağı (RE0, RE1 ve RE2) ayrı ayrı girişveya çıkış olarak yapılandırılabilir. Bu üç bacak Schmitt Trigger giriş tamponlarınasahiptir. Bu bacaklar analog giriş olarak seçildiklerinde ‘0’ları okuyacaklardır. Hangibit’in giriş hangi bit’in çıkış olacağı TRISE kaydedicisi tarafından belirlenir. TRISEkaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTE bacakları giriş, “0”olarak belirlenen bit’lerin karşılığındaki PORTE bacakları çıkış olarak belirlenir. TRISERE bacakları analog girişler olarak kullanıldıklarında yönlerini kontrol eder. LATEkaydedicisi de hafıza eşlemelidir. LATE kaydedicisi, PORTE için mandallanmış çıkış<strong>veri</strong>lerini okur ve yazar.PORTE’nin dördüncü bacağı (MCLR/V PP /RE3) sadece giriş bacağıdır. Bu bacağınişlevi MCLRE kontrol biti tarafından kontrol edilir. Eğer MCLRE = 0 seçilirse bu bacakdijital giriş olur ve TRIS veya LAT kaydedicilerinin bitlerine sahip olmaz, MCLRE = 1seçildiğinde ise görevi cihazın Master Clear (Ana Temizleme) girişi olur. Her ikikonfigürasyonda da, RE3 aynı zamanda programlama esnasında programlama voltajgirişi olarak görev yapar (Microchip Technology Inc. 2004).E Portuna ait bacaklar ve işlevleri Çizelge 2.7’de <strong>veri</strong>lmiştir (EK 5).


282.3.3. PIC18F4550 osilatör özellikleriPIC18F4550’nin de içinde bulunduğu PIC18F Tam Hız ailesi, daha önceki PIC18F tipicihazlardan farklı bir osilatör ve mikrodenetleyici saat sistemine sahiptirler. USBmodülünün eklenmesiyle, USB alçak-hız ve tam-hız için dengeli bir saat kaynağınaihtiyaç duyulmuştur. Bu gereksinimleri karşılamak üzere, PIC18F4550 ve içindebulunduğu ailedeki tüm mikrodenetleyicilere, USB tam-hız işleminigerçekleştirebilecek 48 MHz bir saat kısmı eklenmiştir. Diğer tüm osilatör özellikleriPIC18 geliştirilmiş mikrodenetleyicilerindekilerle aynı bırakılmıştır. Şekil 2.7’dePIC18F4550’nin saat diyagramı görülmektedir (Microchip Technology Inc. 2004).Şekil 2.7. PIC18F4550 saat diyagramı (Microchip Technology Inc. 2004)


292.3.3.a. Osilatör kontrolüPIC18F4550’nin osilatörü iki konfigürasyon kaydedicisi (CONFIG1L ve CONFIG1H)ile iki kontrol kaydedicisi (OSCCON ve OSCTUNE) tarafından kontrol edilir.Osilatör TipleriPIC18F4550 on iki farklı osilatör modunda çalıştırılabilir. Kullanıcılar FOSC3:FOSC0konfigürasyon bitlerini ayarlayarak bu on iki osilatör tipinden birini seçebilir:1. XT Kristal/Rezonatör2. XTPLL Kristal/Rezonatör (PLL seçili)3. HS Yüksek – Hız Kristal/Rezonatör4. HSPLL Yüksek – Hız Kristal/Rezonatör (PLL seçili)5. EC Harici Saat F OSC /4 çıkışı ile6. ECIO Harici Saat RA6 üzerindeki I/O ile7. ECPLL Harici Saat (PLL seçili) ve RA6 üzerindeki F OSC /4 ile8. ECPIO Harici Saat (PLL seçili) RA6 üzerindeki I/O ile9. INTHS Dâhili Osilatör (mikrodenetleyici saat kaynağı olarakkullanılır, HS osilatör USB saat kaynağı olarak kullanılır.)10. INTXT Dâhili Osilatör (mikrodenetleyici saat kaynağı olarakkullanılır, XT osilatör USB saat kaynağı olarak kullanılır.)11. INTIO Dâhili Osilatör (mikrodenetleyici saat kaynağı olarakkullanılır, EC osilatör USB saat kaynağı olarak kullanılır,RA6 üzerindeki dijital I/O ile.)12. INTCKO Dâhili Osilatör (mikrodenetleyici saat kaynağı olarakkullanılır, EC osilatör USB saat kaynağı olarak kullanılır,RA6 üzerindeki F OSC /4 ile.)


30Harici saat girişiEC, ECIO, ECPLL ve ECPIO Osilatör modları OSC1 bacağına bağlanabilmek içinharici bir saat kaynağına ihtiyaç duyarlar. EC ve ECPLL Osilatör modlarında, OSC1bacağı üzerindeki osilatör frekansı 4’e bölünür. ECIO ve ECPIO modları da EC veECPLL’e benzerler, ancak sadece bu modlarda OSC2 bacağı genel amaçlı bir giriş/çıkışbacağı haline gelir (Microchip Technology Inc. 2004).PLL frekans çarpıcıPIC18F4550 bir PLL (Phase Locked Loop/Faz Kilitlemeli Döngü) devresi içerir. Budevre, özellikle USB’nin daha alçak hızlı osilatörleri ile olan uygulamalarında vemikrodenetleyici için bir saat kaynağı olarak kullanılabilmektedir.PLL; HSPLL, XTPLL, ECPLL ve ECPIO Osilatör modlarında aktiftir. Sabitlenmiş 4MHz’lik girişten sabitlenmiş 96 MHz’lik referans saati üretmek üzere dizayn edilmiştir.Çıkış daha sonra hem USB hem de mikrodenetleyici çekirdek saati tarafından bölünürve kullanılır (Microchip Technology Inc. 2004).Dâhili osilatör bloğuPIC18F4550 mikrodenetleyici, saat kaynağı olarak kullanılmak üzere iki farklı saatsinyali üretilmesi için dizayn edilmiş bir dâhili osilatör içerir.Ana çıkış (INTOSC), cihazın saatini direk olarak sürebilecek 8 MHz’lik bir kaynaktır.Aynı zamanda 125 kHz ila 8 MHz arasında saat frekansı üretmek üzere seçilebildiğigibi, 31 kHz ila 4 MHz arasında ürettiği saat frekansları ile de kullanıcıya opsiyonlarsunmaktadır (Microchip Technology Inc. 2004).


31Diğer saat kaynağı olan dâhili RC osilatör (INTRC) ise nominal 31 KHz’lik bir çıkışsağlar. INTRC cihaz saat kaynağı olarak seçildiğinde aktif olur.USB için osilatör ayarlarıPIC18F4550’nin kullanıldığı bir işlemde, alçak–hız için 6 MHz, yüksek–hız için 48MHz’lik bir saat frekansı gerekmektedir. Bu nedenle osilatör frekansının seçimi vecihazın programlanması noktalarına dikkat edilmelidir.Alçak–Hız modu için gereken USB saati, direkt olarak PLL’den değil birincil osilatörzincirinden elde edilir ve 4’e bölünerek 6 MHz’lik saat darbesi üretilir. Bu yüzden, USBmodül aktifken ve denetleyici saat kaynağı birincil osilatör modlarından (XT, HS veyaEC, PLL ile birlikte veya değil) biri iken, mikrodenetleyici sadece 24 MHz’lik saatfrekansını kullanabilir. Bu kısıtlama mikrodenetleyici ikincil osilatör veya dâhiliosilatör bloğunu saat kaynağı olarak kullanıyorsa uygulanamaz.2.3.3.b. PIC18F4550’de reset (sıfırlama) işlemiPIC18F4550’de birçok farklı Reset (Sıfırlama) yapma özelliğini bünyesinde barındırır.RCON kaydedicisi PIC18F4550 için sıfırlama işlemlerini yürüten kaydedicidir.Sıfırlama işlemleri arasında en çok kullanılanlar MCLR ile sıfırlama ve POR (Power–On Reset/Enerji Verildiğinde Sıfırlama) dur. Diğer tüm sıfırlama durumları bu ikisıfırlamadan türetilmiştir (Microchip Technology Inc. 2004).MCLR ile sıfırlamaMCLR bacağı cihazı dışarıdan sıfırlama için geliştirilmiş metotlarından birisidir. MCLRgirişine 5 Volt uygulandığı sürece program normal akışına devam eder. MCLR’ye 0


32Volt uygulandığı anda sıfırlama gerçekleşir. MCLR girişinde bulunan bir filtreleme ileparazit gerilimlerin programı sıfırlaması engellenmiştir. Yine de girişin bir kondansatörile daha kararlı hale getirilmesi parazitlerin yoğun olduğu durumlarda gereklidir.Enerji <strong>veri</strong>ldiğinde sıfırlama (POR, Power–On Reset)PIC, V DD geriliminde gerilim yükselmesi algılandığında kaydedicileri hazır halegetirmek için kendi kendisine sıfırlama yapar. POR devresinin avantajı, MCLRbacağının bir direnç (1kΩ–10 kΩ) üzerinden V DD ’ye bağlanmasıdır. Bu sayede hariciRC elemanlarının sıfırlama yapma sıkıntısını ortadan kaldırmaktadır.Şekil 2.8. POR Sıfırlama DevresiŞekil 2.8’de gösterilen POR devresinde kullanılan diyot kondansatörün hızlı bir şekildeboşalması için kullanılmıştır. R direnci, cihazın elektriksel karakteristiklerinde birbozulmaya sebep olmaması açısından 40 kΩ’dan küçük seçilmelidir. R1 direnci ise,kondansatörden gelecek akımı, MCLR/VPP bacağının bozulmasını ve elektrostatikboşalmayı engellemek amacıyla 1 kΩ veya biraz büyük olacak şekilde seçilmelidir.Gerilim düşmesi sıfırlaması (BOR, Brown–Out Reset)Ani gerilim düşmelerinde kaydedicilerin içerikleri, program sayacının içeriği hatalıdeğerler alabilir. Bu gibi durumlarda programın kontrolünü sağlayabilmek için


33sıfırlanması en iyi çözümdür. BOR, BORV1:BORV0 ve BOREN1:BOREN0konfigürasyon bitleri tarafından kontrol edilmektedir(Microchip Technology Inc. 2004).2.3.3.c. PIC18F4550 hafıza organizasyonuPIC18F Tam Hız ailesindeki tüm mikrodenetleyicilerde olduğu gibi PIC18F4550 de üçfarklı hafızaya sahiptir:• Program Hafızası• Veri RAM Hafızası• Veri EEPROM HafızasıHarvard mimarisine sahip cihazlarda <strong>veri</strong> ve program hafızalarına ulaşım ayrı ayrıyollardan yapıldığından, her iki hafızaya da aynı anda ulaşmak mümkündür. EEPROMhafıza pratik olması açısından bir çevrebirim cihazı olarak kabul edilir, çünküadreslenmesi ve ulaşılması bir takım kontrol kaydedicileri tarafından gerçekleştirilir.PIC18F4550 2 MBayt’lık program hafıza alanını adresleyebilecek 21-bitlik bir sayıcıiçerir. Aynı zamanda 32 KBayt’lık bir Flash belleğe sahiptir. Bu Flash Bellek sayesinde16 384 adet tek-kelimelik komutu hafızasında saklayabilir. PIC18F4550 iki adet kesmevektörüne sahiptir. Sıfırlama vektör adresi 0000h ve kesme vektörleri adresleri 0008hve 0018h’dır.PIC18F4550 mikrodenetleyicisi için program hafıza haritası Şekil 2.9’da gösterilmiştir:


34Şekil 2.9. PIC18F4550 program hafızasıVeri RAM Hafızası PIC18 ailesi mikrodenetleyicileri için statik hafıza olarakadlandırılır. Data hafızasındaki her kaydedici 12-bitlik bir adrese sahiptir, böylece 4096baytlık bir <strong>veri</strong> hafızasına izin <strong>veri</strong>rler. Hafıza alanı 256 baytlık 16 sıraya bölünebilir.PIC18F4550’nin RAM hafızası, 2048 baytlık toplamda 8 tam sıraya bölünmüştür. Datahafızası, Özel Fonksiyon Kaydedicileri (SFR) ve Genel Amaçlı Kaydedicileri (GPR)olmak üzere iki farklı kaydedici ihtiva eder. SFR tipi kaydediciler, denetleyici ve


35çevrebirimlerin kontrol ve durum kaydedicileri olarak kullanılırken, GPR tipikaydediciler <strong>veri</strong> saklama ve kullanıcı uygulamalarında karalama bloknotu gibiişlemlerde kullanılır.PIC18F4550 mikrodenetleyicisi için <strong>veri</strong> hafızası haritası Şekil 2.10’da gösterilmiştir(EK 6).Flash Program Hafızası normal işlem sırasında okunabilir, yazılabilir ve silinebilir birbellektir. PIC18F4550, 32768 adet 16-bitlik program <strong>veri</strong>si alabilecek Flash programhafızasına sahip bir mikrodenetleyicidir (Microchip Technology Inc. 2004).2.3.3.d. PIC18F4550 CCP (Capture/Compare/PWM) modülleriCapture/Compare/PWM (CCP) modülleri; yakalama, karşılaştırma ve Darbe GenişlikModülasyonu işlemlerini gerçekleştirmek üzere bazı özelliklerle donatılmışlardır.PIC18F Tam Hız ailesindeki tüm mikrodenetleyiciler iki CCP modülüne sahiptir. Herbir CCP modülü;16 bit’lik yakalama kaydedicisi, 16 bitlik karşılaştırma kaydedicisineveya PWM kaydedicinse sahiptir. PIC18F Tam Hız ailesindeki 28-bacaklı cihazlar ikistandart CCP modülüne (CCP1 ve CCP2) sahip iken, PIC18F4550 gibi 40/44-bacaklıcihazlar ise bir standart CCP modülü (CCP2) ve bir geliştirilmiş CCP modülüne (CCP1veya ECCP) sahiptir. ECCP modülü ayrıca incelenecektir. Bu bölümde incelenecekCCP ise standart CCP modülüdür (Microchip Technology Inc. 2004).PWM (Darbe Genişlik Modülasyonu) moduPWM modunda, CCPx bacağı 10-bit çözünürlükte PWM çıkışı üretir. Bilindiği gibiCCP2 bacağı PORTB veya PORTC <strong>veri</strong> mandallarından biriyle çoklandığından, PWMmodunda işlem yapabilmek için uygun TRIS bit’i sıfırlanmalı ve CCP2 bacağı çıkışolarak seçilmelidir (Microchip Technology Inc. 2004).


36Şekil 2.11’de PIC18F4550 için basitleştirilmiş PWM blok diyagramı gösterilmiştir:Şekil 2.11. PWM blok diyagramıPIC18F4550 ECCP (Enhanced Capture/Compare/PWM) modülüPIC18F4550 için CCP1 modülü, Geliştirilmiş CCP modülü olarak belirlenmiştir. CCP1modülü geliştirilmiş PWM yetenekleri sayesinde kullanıcıya 2 veya 4 çıkış kanalı,kullanıcı seçimli polarite imkanı, ölü-bant kontrolü, otomatik kapanma ve açılma gibiolanaklar sağlamaktadır. Standart Yakalama/Karşılaştırma/PWM modu olan CCP2’denfarkı, PWM modunun geliştirilmiş olmasıdır. ECCP modülünün Yakalama,Karşılaştırma ve tek çıkış PWM özellikleri standart CCP modülüyle tamamen aynıdır.ECCP modülü CCP1CON kontrol kaydedicisi tarafından kontrol edilmektedir ve yapıitibarıyla standart CCP modülü için kullanılan kontrol kaydedicisinden farklı bir yapıyasahiptir. ECCP modülü ayrıca, Geliştirilmiş PWM işlemi ve otomatik kapanmaözelliklerini yerine getirebilmesi amacıyla geliştirilmiş olan ECCP1DEL (Ölü-Bant


37Gecikmesi) ve ECCP1AS (Otomatik Kapanma Konfigürasyonu) kaydedicilerinesahiptir (Microchip Technology Inc. 2004).2.3.4. 10-bit analog/dijital dönüştürme modülüPIC18F4550 13 adet A/D dönüştürücü girişine sahiptir (AN12:AN0). A/D dönüştürücümodülü, analog giriş sinyallerinin 10-bitlik dijital bilgi haline dönüştürülmesine izin<strong>veri</strong>r. Modül, beş kaydediciye sahiptir (Microchip Technology Inc. 2004) :• A/D Yüksek Sonuç Kaydedicisi (ADRESH)• A/D Düşük Sonuç Kaydedicisi (ADRESL)• A/D Kontrol Kaydedicisi 0 (ADCON0)• A/D Kontrol Kaydedicisi 1 (ADCON1)• A/D Kontrol Kaydedicisi 2 (ADCON2)ADCON0 kaydedicisi, A/D dönüştürücü modülünün işlemlerini kontrol eder. ADCON1kaydedicisi, port bacaklarının işlevlerini yapılandırır. ADCON2 kaydedicisi, A/D saatkaynağını, programlanmış kazanım zamanını ve gerekçeleme durumunu yapılandırır.Analog referans gerilimi yazılımla, cihazın pozitif veya negatif gerilim kaynağı (V DD veV SS ) olarak veya RA3/AN3/V REF+ ve RA2/AN2/V REF- /CV REF bacaklarında gerilimseviyesi olarak seçilebilir.A/D modülünün en önemli özelliklerinden biri de işlem yapmazken uyku modunageçmesidir. Uyku modunda iken A/D modülü için saat sinyali dâhili RC osilatöründensağlanır.A/D çevirici için kullanılan her port bacağı analog giriş veya dijital giriş/çıkış olarakyapılandırılabilir. Dijital bilgiye dönüşen analog sinyalin karşılığı ADRESH ve


38ADRESL kaydedicilerine yazılır. A/D çevirme işlemi bittiğinde sonuçlarADRESH:ADRESL kaydedici çiftine yüklenir, GO/DONE biti (ADCON0 kaydedicisi)sıfırlanır ve A/D Kesme Bayrağı biti ADIF set edilir. Analog/Dijital Dönüştürücümodülüne ait blok diyagram Şekil 2.12’de gösterilmiştir.Şekil 2.12. A/D Dönüştürücü Modülü Blok DiyagramıADRESH:ADRESL kaydedicilerinin içindeki değer POR (Power-On Reset, Enerji<strong>veri</strong>ldiğinde Sıfırlama) için değiştirilmemiştir. Bu yüzden ADRESH:ADRESLkaydedicileri POR tipi bir sıfırlama işleminden sonra bilinmeyen bir <strong>veri</strong> içereceklerdir.A/D modülünün isteğe göre yapılandırılmasından sonra, dönüştürme işlemi başlamadanönce seçilen kanallar mikrodenetleyiciden devralınmalıdır. Bu işlem, analog giriş


39kanallarının TRIS bitlerinin set edilmesiyle gerçekleştirilir. Elde edim zamanı sonaerdikten sonra A/D dönüştürme işlemi başlatılabilir. A/D dönüştürme işlemi şu adımlaruygulanarak gerçekleştirilir (Microchip Technology Inc. 2004):1.A/D modülünü yapılandır:• Analog girişleri, referans gerilimini ve giriş/çıkış bacaklarını yapılandır (ADCON1)• A/D giriş kanalını seç (ADCON0)• A/D elde edim zamanını seç (ADCON2)• A/D dönüştürme saatini seç (ADCON2)• A/D modülünü aç (ADCON0)2.A/D kesmesini yapılandır (eğer istenirse):• ADIF bitini sıfırla• ADIE bitini set et• GIE bitini set et3.Gerekli elde edim zamanını bekle (eğer gerekiyorsa):4.Dönüştürmeyi başlat:• GO/DONE bitini set et (ADCON0)5.A/D dönüştürmenin tamamlanmasını bekle:• GO/DONE bitinin ‘0’ olup olmadığını kontrol et veya• A/D kesmesinin bitip/bitmediğini kontrol et.6.A/D Sonuç Kaydedicilerini oku (ADRESH:ADRESL); eğer gerekiyorsa ADIF bitinisıfırla.7.Eğer gerekiyorsa, yeni bir dönüştürme için 1.veya 2.adıma geri dön


402.3.4.a. A/D dönüşüm için gereksinimlerBelirlenmiş doğruluğu karşılaştırmak için A/D çeviricinin C HOLD kondansatörü girişgerilimine şarj olması beklenmelidir. C HOLD kondansatörü kaynak empedansı (R S ) veörnekleme anahtarı iç direnci (R SS ) üzerinden şarj olur. Anahtar iç direnci, kaynakgeriliminin (V DD ) değerine göre değişir. Analog kaynaklar için tavsiye edilenmaksimum empedans 2,5 kΩ’dur. Analog giriş bacağı seçildikten sonra dönüştürmeişlemine geçilmeden, kanal en az elde edim zamanı kadar örneklenmelidir. Analog girişmodeli Şekil 2.13’de gösterilmiştir.Şekil 2.13. A/D dönüştürücü modülü analog giriş modeliMikrodenetleyicinin analog sinyali minimum algılama zamanı şu şekilde hesaplanır:T ACQ = T AMP + T C + T COFFT ACQ = Analog sinyali minimum algılama zamanıT AMP = Yükseltme gecikme zamanıT C = C HOLD şarj zamanı= Sıcaklık katsayısıT COFF


412.3.4.b. Elde edim zamanının seçimi ve yapılandırılmasıADCON2 kaydedicisi kullanıcılara, GO/DONE bit’inin her set edilmesiyle elde edimzamanını seçme izni <strong>veri</strong>r. Aynı zamanda kullanıcılara otomatik olarak hesaplanan eldeedim zamanı seçeneğini de sunar.Elde edim zamanı ACQT2:ACQT0 bit’lerinin (ADCON2) set edilmesiyleayarlanabilir. T AD bit başına A/D dönüşüm zamanı olarak tanımlandığında, bu bitler 2T AD ’den 20T AD ’ye bir aralık sağlar. GO/DONE bit’i set edildiği zaman, A/D modülügirişi seçilen elde edim zamanı için örneklemeye devam eder ve dönüşüm otomatikolarak başlar.ACQT2:ACQT0 = 000 yapıldığı zaman manüel olarak elde edim seçilmiş olur.GO/DONE bit’i set edildiğinde örnekleme durur ve dönüşüm başlar. Dönüşüm sonaerdiğinde GO/DONE bit’i sıfırlanır, ADIF bayrağı set edilir ve A/D modül o anda seçiliolan kanalı tekrar örneklemeye başlar (Microchip Technology Inc. 2004).2.3.4.c. A/D dönüşümü için saat kaynağı seçimiT AD , bit başına A/D dönüşüm zamanı olarak tanımlanmıştır. 10-bit A/D dönüşümü için11 T AD periyodu gerekir. A/D dönüşümü saat kaynağı yazılımla seçilebilmektedir. T ADseçimi için mümkün olan yedi farklı seçenek vardır:2 T OSC, 4 T OSC, 8 T OSC, 16 T OSC, 32T OSC, 64 T OSC ve Dâhili A/D modülü RC Osilatörü.A/D dönüşümünün doğru olarak yapılabilmesi için, T AD zamanı mümkün olduğuncakısa fakat minimum T AD değerinden büyük seçilmelidir. Çizelge 2.8’de T AD zamanlarıiçin maksimum işlem frekansları <strong>veri</strong>lmiştir (Microchip Technology Inc. 2004):


42Çizelge 2.8. T AD zamanları için maksimum işlem frekanslarıA/D Saat Kaynağı (T AD )Maksimum İşlemİşlemADCS2:ADCS0Frekansı2 T OSC 000 2.86 MHz4 T OSC 100 5.71 MHz8 T OSC 001 11.43 MHz16 T OSC 101 22.86 MHz32 T OSC 010 40.0 MHz64 T OSC 110 40.0 MHzRC (2) x11 1.00 MHz (1)(1) İşlemci çalışma frekansı 1 MHz’den büyük olduğunda, cihaz tüm dönüşüm boyunca uyku modundaolmalıdır veya A/D doğruluğu belirtimlerin dışında olmalıdır.(2)RC kaynağı için tipik T AD zamanı 4 ms’dir.2.3.4.d. Analog port bacaklarını yapılandırmaADCON1, TRISA, TRISB ve TRISE kaydedicileri, tüm A/D port bacaklarınıyapılandırırlar. Port bacakları, bağlı bulundukları analog girişlerin TRIS bit’lerinin setedilmesine (giriş) ihtiyaç duyarlar. TRIS bit’i sıfırlanmış ise (çıkış), dijital çıkışseviyesine (V OH veya V OL ) dönüştürme yapılmış demektir.2.3.4.e. A/D dönüşümüŞekil 2.14’te bir analog sinyalin, GO/DONE bitinin (ADCON) set edilmesi veACQT2:ACQT0 bit’lerinin sıfırlanmasıyla, nasıl dijital bilgiye dönüştürüldüğününzamanlama diyagramı <strong>veri</strong>lmiştir. Şekilden de anlaşılacağı gibi A/D dönüşüm işlemi,100ns’lik bir gecikme sonrasında başlar. Bu işleme başlarken, donanım tarafındanC HOLD kondansatörünün analog girişle olan bağlantısı, A/D dönüşüm işlemi bitene kadarkesilir.


43Şekil 2.14. A/D dönüşüm T AD zaman diyagramı (ACQT = 000, T ACQ = 0)Şekil 2.15’te ise, dönüşüm başlamadan GO/DONE biti set edilmiş, ACQT2:ACQT0bitleri ‘010’a set edilmiş ve 4 T AD ’lik elde edim zamanı için A/D dönüştürücününişlemini göstermektedir.Şekil 2.15. A/D dönüşüm T AD zaman diyagramı (ACQT = 010, T ACQ = 4 T AD )GO/DONE bit’inin dönüşüm işlemi sırasında sıfırlanması, geçerli işlemi durduracaktır.Bu durumda, ADRESH:ADRESL kaydedicileri son tamamlanmış dönüşümünbilgilerini içereceklerdir. Yeni bir <strong>veri</strong> sağlama işleminin başlatılabilmesi için, A/Ddönüşümün tamamlanmasından veya durdurulmasından itibaren 2 T AD süresi kadarbeklemek gerekir. Bu beklemeden sonra, seçili kanaldan <strong>veri</strong> sağlama otomatik olarakbaşlayacaktır (Microchip Technology Inc. 2004).


442.3.5. PIC18F4550 USB modülüPIC18F4550, USB karargâh ile PIC mikrodenetleyicisi arasında hızlı bir iletimisağlamak amacıyla, alçak–hız ve tam–hız uyumlu USB Seri Arabirim Motoruna (SerialInterface Engine, SIE) sahiptir. SIE, dâhili USB alıcı-<strong>veri</strong>cisi üzerinden veyabağlanabilecek harici bir USB alıcı-<strong>veri</strong>cisi üzerinden USB için direk bir arayüz olarakkullanılabilir. Aynı zamanda 3,3 V’luk dâhili regülatör, 5 V’luk uygulamalarda dâhilialıcı-<strong>veri</strong>ci için güç kaynağı olarak mevcuttur (Microchip Technology Inc. 2004).Performansı artırmak için bazı özel donanım özellikleri bulunmaktadır. Cihazın <strong>veri</strong>hafıza alanında bulunan çiftli port hafızası (USB RAM), mikrodenetleyici ile SIEarasında direkt hafıza erişiminin paylaşımını sağlayacaktır. USB RAM alanındaki sonuç hafıza kullanımının, kullanıcı tarafından serbestçe programlanabilmesi için tampontanımlayıcılar sağlanmıştır. Ayrıca SPP desteği sayesinde, eşzamanlı transferde olduğugibi büyük miktarlardaki <strong>veri</strong>nin kesintisiz biçimde harici hafıza tamponlarına iletilmesisağlanabilmektedir.2.3.5.a. USB durum ve kontrolüUSB modülünün çalışması, üç kontrol kaydedicisi tarafından yapılandırılır ve yönetilir.Ayrıca, gerçek USB işlemleri için toplamda 19 kaydedici kullanılmaktadır. Bukaydediciler:• USB Kontrol kaydedicisi (UCON)• USB Konfigürasyon kaydedicisi (UCFG)• USB Transfer Durum kaydedicisi (USTAT)• USB Cihaz Adres kaydedicisi (UADDR)• Çerçeve Numarası kaydedicisi (UFRMH:UFRML)• Son Uç Seçim kaydedicileri 0’dan 15’e kadar (UEPn)


452.3.5.b. USB kontrol kaydedicisi (UCON)USB Kontrol kaydedicisi, transfer işlemleri sırasında modülün davranışını kontroledecek bit’leri içerir. Kaydedicinin içerdiği konfigürasyon bitlerinin kontrol ettiğiolgular şunlardır:• Ana USB Çevrebirim Seçili kılınması• Pinpon Tampon İşaretleyici Sıfırlaması• Askı (duraklatma) modu kontrolü• Paket transfer Seçili kılınmamasıUSB Kontrol kaydedicisi aynı zamanda, <strong>veri</strong> yolunda oluşabilecek tekli-sonlanmış sıfırıişaret etmek için kullanılan durum biti içerir, SE0 (UCON). USB modülünün tümişlemleri USBEN bit’i (UCON) tarafından kontrol edilir. Bu bit’in set edilmesi ilemodül aktif hale gelir ve aynı zamanda yonga üzerindeki voltaj regülatörünü aktif halegetirir. Kısaca bu bit, USB modülünün sisteme takılıp çıkarılmasını sağlar ve bitdeğerinin ‘0’ olması durumunda tüm durum ve konfigürasyon bitleri ihmal edilir.PPBRST biti (UCON), Çiftli-Tamponlama modunda (pinpon modu) çalışılırkenSıfırlama durumunu kontrol etmek için kullanılır. PPBRST biti set edildiğinde tümpinpon tampon işaretçileri çift tampon olarak set edilir. PPBRST biti kodlama kısmındasıfırlanabilir.PKTDIS biti (UCON) SIE’nin paket iletimi ve alımı için kullanılamaz durumdaolduğunu işaret eden bayraktır. Bu bit kurulum işlemine izin <strong>veri</strong>lmesi amacıyla SIEtarafından set edilir, mikrodenetleyici tarafından set edilemez.RESUME biti (UCON), USB çevrebirimin Resume sinyalinin uzaktan kumandaedilerek uyandırma (wake-up) işlemini gerçekleştirebilmesi için kullanılır. Geçerli bir


46uzaktan kumanda uyandırma işlemi için, kodlama RESUME bitini 10ms için set etmelive sonra sıfırlamalıdır.SUSPND biti (UCON), USB modülün ve desteklediği devrenin (örneğin voltajregülatör devresi) düşük-güç modunda çalışmasını sağlar. Aynı zamanda SIE giriş saatdarbesi seçilemez kılınır. SUSPND biti yazılımla set edilip, mikrodenetleyici kodlamasıile sıfırlanabilir. Bu bit aktif edildiğinde, cihaz yola bağlı kalır ancak alıcı/<strong>veri</strong>ciçıkışları halen boştadır (Idle Modu). V USB bacağındaki gerilim bu bitin değerine bağlıolarak değişir.2.3.5.c. USB konfigürasyon kaydedicisi (UCFG)USB üzerinden haberleşmenin önceliğine göre USB modülünün ilişkili olduğu dâhilive/veya harici donanım yapılandırılmalıdır. Yapılandırma işleminin büyük çoğunluğuUCFG kaydedicisi ile gerçekleştirilmektedir. Ayrı USB voltaj regülatörü konfigürasyonkaydedicileri tarafından kontrol edilmektedir.UCFG kaydedicisi, USB modülünün sistem seviye davranışını kontrol eden birçok bitiçermektedir. Sistem seviye davranışını etkileyen durumlar şu şekildedir:• Yol (bus) hızı (tam-hıza karşılık alçak-hız)• Yonga üzeri çekme (pull-up) dirençlerinin seçili kılınması• Yonga üzeri alıcı/<strong>veri</strong>cinin seçili kılınması• Pinpon tamponunun kullanımı (PPB1:PPB0)


472.3.6. PIC18F4550 komut setiPIC18F4550, PIC18 serisi mikrodenetleyicilerin standart 75 komutluk setine sahipken,bunun yanı sıra kodların optimizasyonu veya yazılım yığınının kullanımını sağlamakamacıyla genişletilmiş 8 yeni komuta sahiptir.PIC18 serisi mikrodenetleyicilerin komut setleri, bir önceki PICmicro denetleyicilerininkomut setlerinin üzerinde birçok geliştirmeler yapılarak oluşturulmuştur. Ancak bugeliştirmeler yapılırken, PICmicro komut setlerinden yenilere geçişin kolay olması gözönünde tutulmuştur.Komut setleri dört ana kategoride incelenebilir:• Bayt yönlendirmeli işlemler• Bit yönlendirmeli işlemler• Yalın (sade) işlemler• Kontrol işlemleriÇizelge 2.9’da Bayt yönlendirmeli işlemler komut seti (EK 11), Çizelge 2.10’da Bityönlendirmeli işlemler, kontrol işlemleri ve sade işlemler komut seti (EK 12) ve Çizelge2.11’de Hafıza işlemleri komut seti ve geliştirilmiş komut setine ait komutlar veaçıklamaları <strong>veri</strong>lmiştir (EK 13) (Microchip Technology Inc. 2004).2.3.7. I/O portlarının konfigürasyonuDevrenin donanımsal olarak yapılandırılmasından sonra, öncelikle PIC18F4550’ningiriş/çıkış (I/O) portlarının yapılandırılması gerekmektedir. PIC18F4550’nin I/Oportlarının isim ve fonksiyonları EK 1-5’te çizelgeler halinde <strong>veri</strong>lmiştir.


483. MATERYAL ve YÖNTEM3.1. Paralel ve USB Programlama DevresiParalel ve USB programlama devresi, PIC18F4550 mikrodenetleyicisi ile analogsinyallerin ölçülmesi, sayısal giriş-çıkışların kontrolü ve bilgisayar ortamındagösterilmesi için geliştirilmiştir. Devrenin geliştirilmesi işlemi dört ana kısımdaincelenecektir:• Donanım (hardware)• Yazılım (software)• Kodlama (firmware)• Görsel arabirim (GUI)3.1.1. Donanım (Hardware)Donanım bölümünde, PIC18F4550 mikrodenetleyicisinin boot edilmesi için gereklidevreler ile Microchip firmasının sunmuş olduğu programlama yazılımı ile PIC’in nasılprogramlandığı hakkında bilgiler <strong>veri</strong>lmiştir. Genellikle PIC18F4550mikrodenetleyicisinin programlanması için üretici firma Microchip’in geliştirdiğiPICDEM FS USB geliştirme kartı kullanılmasına rağmen, bu çalışmada kendigeliştirdiğimiz programlama kartı kullanılmıştır.Projede kullanılan elektronik devrelerinin açık devre şemaları Proteus ISIS programındaçizilmiş ve devrelerin çalışıp çalışmadığı bu program aracılığıyla test edilmiştir.Programlama ve uygulama devreleri için Proteus ARES programı kullanılarak baskıdevreleri çıkartılmış ve bakır plaketlere baskı devreleri gerçekleştirilmiştir.


49Programlama devresinin programlama kısmının açık devre şeması Şekil 3.1’de<strong>veri</strong>lmiştir.Şekil 3.1. Programlama devresi paralel programlama kısmıParalel programlama konektörü, her proje devresi için sadece bir defa kullanılır. Bukonektörün amacı, bir defaya mahsus olmak üzere PIC18F4550 hafızasının içineönyükleme programının yazılmasıdır. Paralel portu kullanan paralel programlamadevresi, 7407 tampon entegresi ve transistor sürücü devreleri ile PIC’in seri olarakprogramlanması için kullanışlı hale getirilmektedir. PIC’in önyüklemesinde ICSP (In-Circuit Serial Programming) kullanılmaktadır. Bu programlamada MCLR girişi V ppolarak davranır (PIC’in 1 nolu bacağı). V pp için 13 V dc den daha yüksek gerilime ihtiyaçduyulur. Bu gerilimi sağlamak için 7812 regülatörünün şase bacağına iki adet seri diyotbağlanarak ekstra 1,2 V dc elde edilir. Böylece 7812 regülatörünün 12 V’luk dc çıkışınaiki adet 1N4148 diyotunun 0,6 V’luk dc çıkışlarının eklenmesiyle toplamda 13,2 V’luk


50dc bir gerilim elde edilmiş olur. Bu gerilim PIC’in programlanabilmesi için yeterlidir.Bilgisayarın paralel portunun 8 nolu bacağı (D6 biti) V pp için tahsis edilmiştir. PIC’inönyükleme işlemi için Winpic yazılımı kullanılmıştır.PIC18F4550, USB’den gelen 5V ile 11. ve 32. bacaklar olan V DD üzerindenbeslenmekte ve 12. ve 32. bacaklar olan V SS bacaklarıyla toprağa bağlanmaktadır.Devrede kullanılan elemanlar ve kullanım amaçları ayrı ayrı incelenmiştir.Şekil 3.2. Önyükleme için minimum donanımŞekil 3.2’de <strong>veri</strong>len devrede PIC’in önyüklemesinin yapılabilmesi için gerekli asgaridonanım gösterilmiştir. Devrede kullanılan elemanların özellikleri ve kullanım amaçlarıBölüm 3.1.2’de ayrı ayrı açıklanmıştır.


51Hem paralel konektör programlayıcı hem de Şekil 3.2’de <strong>veri</strong>len minimum önyüklemedonanımı bir araya getirilerek, Şekil 3.3’deki programlama devresi elde edilmiştir.Şekil 3.3. Paralel ve USB programlama devresi3.1.2. Devre elemanları3.1.2.a. PIC18F4550PIC18F4550 tüm USB işlevlerini içermesi, analog sinyallerin dijitale çevrilmesi,dönüştürülen sinyallerin işlenmesi vb. gibi özelliklerinden dolayı devrenin tammanasıyla kalbidir.


523.1.2.b. OsilatörUSB modülünün ihtiyaçları yüzünden, saat işlemine farklı bir yaklaşım gereği ortayaçıkmıştır. Daha önceki PIC’lerde tüm çekirdek ve çevrebirim saatleri tek bir osilatörkaynağı ile sürülüyordu. PIC18F4550 de ise birincil osilatör USB modülünün birparçası durumuna gelmiştir ve diğer saat kaynakları için kaynak olarakkullanılamamaktadır. Böylece, USB modülü birincil osilatör kaynağı tarafındantetiklenirken, mikrodenetleyici çekirdeği ve diğer çevrebirimler ikincil veya dâhiliosilatörler tarafından tetiklenmişlerdir. USB’nin zamanlama ihtiyaçları göz önünealındığında, USB modülü aktif edildiğinde 6 MHz’ den 48 MHz’e kadar dâhili bir saateihtiyaç vardır. İşin güzel yönü, mikrodenetleyici ve diğer çevrebirimlerin birincilosilatörü kullanırken bu saat hızında çalışmaya ihtiyaç duymamalarıdır.Bu çalışmada 20 MHz’lik (HS tip) kristal osilatör OSC1/CLKI (13.bacak) ileOSC2/CLKO/RA6 (14.bacak) arasına bağlanmıştır. PIC18F4550 bu osilatörükullanarak, USB Seri Arabirim Motoru (Serial Interface Engine) ve denetleyiciçekirdeği için gerekli sat darbelerini üretmektedir. Osilasyonun düzgün bir biçimdeyürütülebilmesi için, 20 MHz’lik HS tipi kristal osilatör için kullanılması gereken15pF’lık kondansatörler ve 1MΩ’luk direnç devreye eklenmiştir.3.1.2.c. USB konektörDevrede kullanılan USB konektör, standart B-tipi konektördür. Konektörün dörtucundan ikisi güç iletimi için kullanılan VCC ve GND (toprak) bacakları, diğer ikisi ise<strong>veri</strong> iletimi için kullanılan D+ ve D- bacaklarıdır. USB portu, PIC ile bilgisayarınhaberleşmesini sağlaması ve çevrebirimlerden gelen kodlama <strong>veri</strong>lerinin alınıpgönderilmesinde önemli rol oynamaktadır. Şekil 3.4’te USB-B tipi dişi konektörünresmi ve bacak durumları gösterilmiştir. Çizelge 3.1’de ise USB için bacaktanımlamaları <strong>veri</strong>lmiştir.


53Şekil 3.4. B tipi USB konektörÇizelge 3.1. USB bacak tanımlamalarıBacak İsim Açıklama Kablo rengi1 VCC + 5V DC Kırmızı2 D – Data – Beyaz3 D + Data + Yeşil4 GND Toprak Siyah3.1.2.d. Güç göstergesiUSB üzerinden devreye güç geldiğinde, güç göstergesi olarak kullanılan kırmızı LEDyanar. USB üzerinden gelebilecek akımın 100 mA ile sınırlı olmasından dolayı, dahafazla akım çeken uygulamalar için LM7805 regülatörü kullanılması uygun olacaktır.LM7805, güç kaynağından +5V sabit bir DC gerilim sağlarken 1 000 mA’e kadar akımçekilmesine olanak sağlayacaktır. Ayrıca LM7805’in kullanımıyla 9V’luk bir pilkullanılarak, devre kendi başına kullanılabilecektir (Overholt 2005).


543.1.2.e. Sıfırlama ve program butonlarıDevrede kullanılan iki buton, PIC18F4550’nin programlanması işlemi sırasındakullanılır. PIC18F4550’nin MCLR bacağına (bacak 1) bağlı olan Reset butonunabasılması, devrenin USB kablosunun bilgisayardan çıkartılıp tekrar takılması işlevinigörür. Böylece bilgisayar, arabirim devresini tanır ve gerekli sürücüyü kullanıma alır.Eğer RB5/KBI1/PGM bacağına (bacak 38) bağlı olan Program butonuna basılı tutarken,Reset butonuna basılırsa devre önyükleme moduna geçer ve böylece PIC’e yeni biruygulamanın yüklenmesine izin <strong>veri</strong>lmiş olur (Overholt 2005).3.1.3. GüçProgramlama devresi 5V DC gerilim ile çalışır. Bu gerilim direkt olarak USB’densağlanabileceği gibi harici bir güç kaynağı da kullanılabilir. Ancak devrede, güçkaynağı seçimi için bir atlama kablosu (jumper) bulunmamaktadır. Çünkü güç devresiher iki güç kaynağı aynı anda mevcut olduğunda otomatik olarak harici güç kaynağınıseçecektir. Birçok USB çevrebiriminin kullanımında olduğu gibi, arabirim devresi USBkablosundan gelen 5 Voltluk gerilim ile beslenebilir.USB <strong>veri</strong> yolunda bir cihazın çekebileceği minimum akım 100 mA, maksimum akım ise500 mA’dir. Başka bir cihazın kullanılmadığı durumlarda 500 mA’lik akımın tamamıkullanılabilir durumda olsa da, bu limitlerin zorlanması bilgisayar ve devre donanımınazarar verebilir. 500 mA’den daha fazla akım gereksinimi duyulan uygulamalarda haricibir güç kaynağı kullanılması gerekmektedir.Hem programlama devresinde hem de uygulama kartında USB’den sağlanan ve haricigüç kaynağından yapılan beslemelerin durumu LED gösterge ile gerçeklenmiştir.


553.2. Yazılım (Software)3.2.1. PIC18F4550’nin önyüklemesi (Bootload)Bootloader, mikrodenetleyicinin hafızasına yüklenen ve genellikle bu yonganın USBaracılığıyla bilgisayarla haberleşmesini sağlayan hex dilinde yazılmış bir programdır.Her mikrodenetleyici yongasının kendisine özgü bir önyükleme programıbulunmaktadır. Bu programlar, yonganın üretici firması tarafından yazılarakkullanıcıların ve tasarımcıların hizmetine sunulur.Önyükleme kullanılan programlayıcının bilgisayarla olan haberleşmesine görefarklılıklar göstermektedir. Bu çalışmada, PIC’in önyüklenmesi paralel port üzerindengerçekleştirilmiştir.Paralel programlama konektörü üzerinden ön yükleme şu şekilde gerçekleştirilmektedir(Overholt 2005) :• Öncelikle internetten ücretsiz olarak sağlanabilen ve PIC mikrodenetleyicilerinintamamına yakınını programlayabilme özelliğine sahip olan Winpic programı çalıştırılır.Programın içerisindeki menülerden cihaz seçimi gerçekleştirilerek kullanacakolduğumuz PIC18F4550 mikrodenetleyici seçilir.• Cihaz seçimi gerçekleştirildikten sonra, programlama kartı bilgisayara paralel porttanbağlandığı için Winpic programı paralel programlama konektörü ile uyumlu halegetirilir. Şekil 3.5’te bu ayarların nasıl yapıldığı gösterilmiştir.


56Şekil 3.5. Winpic paralel programlama ayarları[Info]Purpose=Sample PIC programmer interface for the parallel port[ProgrammerControlLines]DataIn=ackOkButton=ncVppOnOff=!D6VddOnOff=ncConnect=ncClockOut=D4DataOut=D3DataOutWhileReading=1PullMclrDown=ncClkEnable=ncOutEnable=ncRedLed=ncGreenLed=ncŞekil 3.6. Wzab2.ini tanımlama dosyası“Özel arabirim tanımlama dosyası” (Custom interface definition file) olan Wzab2.inidosyası Şekil 3.1’de <strong>veri</strong>len programlama devresi ile Winpic arasında tanımlama bilgisisunar. Şekil 3.6’da Wzab2.ini tanımlama dosyasının paralel portun hangi bacaklarınınkullanıldığını tanımlayan program gösterilmiştir.


57• Şekil 3.7’de gösterilen PIC18F4550 için cihaz konfigürasyonu, program içindeyapılabileceği gibi Winpic programı içindeki cihaz konfigürasyon seçeneği kullanılarakda yapılabilmektedir. Bu konfigürasyonda yonganın çalışma saat frekansı, kullanılanosilatör tipi ve frekansı, çalışma bölgesi ayarlandığı gibi yonga bacaklarının ne amaçlakullanılacağı, Watchdog Timer’ın kullanılıp kullanılmayacağı, kullanıldığında ise hangizamanlarda devreye gireceği ayarları yapılmaktadır. PIC18F4550’de bir bacağa birdençok fonksiyon yüklendiğinden, bacak konfigürasyonun önemi bir kez daha artmaktadır.• Microchip firması tarafından, PIC18F4550 için özel olarak yazılmış olanMCHPUSB.hex (C:\MCHPFSUSB\fw\Boot\_output\ MCHPUSB.hex) dosyası PIC’eyüklenerek yonganın önyüklemesi tamamlanmış olur.• Önyükleme işlemi tamamlandıktan sonra programlayıcı devre, üzerinde bulunanmikro anahtarın yönleri değiştirilerek, USB moduna alınır ve bilgisayarın USB portunabağlanır. Önyükleme her mikrodenetleyici için sadece bir kez yapılması gerektiğinden,programlayıcı devrenin paralel port üzerinden haberleşen kısmı artıkkullanılmayacaktır.• Cihazın USB portuna bağlanmasıyla “Yeni donanım bulundu” bilgisi ekrana gelinceC:\MCHPFSUSB\Pc\MCHPUSB Driver\Release\ mchp<strong>usb</strong>.inf sürücü dosyası ileMCHPUSB.SYS sistem dosyası Windows işletim sistemine kurularak PIC sistemetanıtılmış olur.• Microchip firması tarafından yazılımış olan C:\MCHPFSUSB\Pc\Pdfs<strong>usb</strong>\PDFSUSB.exe programı ile, Winpic programına ihtiyaç duymadan USB portundanPIC’e firmware yazılımları atılabilir konuma gelinir.


58Şekil 3.7. Winpic’de cihaz konfigürasyonu3.3. Kodlama (Firmware)PIC’in kodlaması Assembler dili ile yapılabilirken PIC18XXXX serisi PIC’ler içinMicrochip firması tarafından geliştirilmiş C18 dili yaygın olarak kullanılmaktadır. YineMicrochip firmasının yayınlamış olduğu çekirdek programlar başlangıç olarakkullanılarak, USB tabanlı HID veya DAQ uygulamaları için kod geliştirilmesiyapılmaktadır. Bu çekirdekte temel USB yapılandırılmaları ve PORT konfigürasyonlarıbulunmaktadır (typedefs.h, <strong>usb</strong>9.c, <strong>usb</strong>dsc.c vb. ). Kullanıcı amacına göre bukonfigürasyonlara ekleme yada çıkarma yaparak programını geliştirebilmektedir(iocfg.h, main.c, user.c, user.h vb.).


593.4. Görsel arabirim (GUI)Görsel program geliştirme araçları ve USB aracılığı ile PIC18F4550 arasında iletişimkurabilmek için, Microchip firmasının yayınladığı API uygulama kütüphanesiMPUSBAPI.DLL kullanılır. Bu dosya aşağıdaki fonksiyon ve alt yordamlarıbulundurur.Public Declare Function MPUSBGetDLLVersion Lib "mp<strong>usb</strong>api" () As LongPublic Declare Function MPUSBGetDeviceCount Lib "mp<strong>usb</strong>api" (ByValpVID_PID As String) As LongPublic Declare Function MPUSBOpen Lib "mp<strong>usb</strong>api" (ByVal instance As Long,ByVal pVID_PID As String, ByVal pEP As String, ByVal dwDir As Long,ByVal dwReserved As Long) As LongPublic Declare Function MPUSBRead Lib "mp<strong>usb</strong>api" (ByVal handle As Long,ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByValdwMilliseconds As Long) As LongPublic Declare Function MPUSBWrite Lib "mp<strong>usb</strong>api" (ByVal handle As Long,ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByValdwMilliseconds As Long) As LongPublic Declare Function MPUSBReadInt Lib "mp<strong>usb</strong>api"(ByVal handle As Long,ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByValdwMilliseconds As Long) As LongPublic Declare Function MPUSBClose Lib "mp<strong>usb</strong>api"(ByVal handle As Long)AsLongBu fonksiyonlar modül olarak uygulama programına eklenen VBMPUSBAPI.BASdosyasında bulunan aşağıdaki uygulamaları yerine getirir.• Initialize: Değişkinleri başlangıçta tanımlamak için kullanılır.• OpenMPUSBDevice: Uygulamanın <strong>veri</strong> borularını açmak için kullanılır.• CloseMPUSBDevice: Açık <strong>veri</strong> borularını kapamak için kullanılır.• SendReceivePacket: Uygulama <strong>veri</strong>lerinin transferinde kullanılır. 64 elemanlıgönderme ve alma dizileri ile <strong>veri</strong>lerin gönderiliş ve geri alınışı izlenilebilir.


604. ARAŞTIRMA BULGULARIMateryal ve Yöntem bölümünde tanıtılan ve tasarım ile gerçeklemesi yapılan PICprogramlama devresi yardımıyla, Microchip firmasının yayınlamış olduğu USB bootönyükleme programı PIC18F4550 mikrodenetleyicisine aktarıldı.Ancak aktarım gerçekleştirilmeden önce Microchip MPLAB IDE programı ile io_cfg.h,boot.c, boot.h, main.c dosyaları bu çalışmaya özel tasarlanmış GUI uygulaması içinyeniden yapılandırıldı.io_cfg.h dosyasında A/D dönüştürme işlemi için A portunun birinci bacağı en yavaşdönüşüm zamanına göre tanımlandı (TRISAbits.TRISA0=1;ADCON0=0x01;ADCON2=0x3C;). Aynı şekilde D portu sayısal çıkış (LATD &=0x00; TRISD &= 0x00;) ve B portunun 4. ve 5. bitleri sayısal giriş olarak tanımlandı(TRISBbits.TRISB4=1;TRISBbits.TRISB5=1).main.c dosyası ise USB, giriş/çıkış ve A/D dönüştürme için başlatma tanımlamalarınıyapacak şekilde yapılandırıldı.Şekil 4.1’de main.c kaynak dosyası içerisinde yapılan değişikliklerden bir bölümgösterilmiştir. main.c dosyasının tamamı ise EK 7’de <strong>veri</strong>lmiştir.


61Şekil 4.1. main.c kaynak kodlarının bir bölümüboot.h dosyası Visual Basic ile yazılan GUI programı ile iletişim kuracak tanımlamalarıiçermektedir. GUI programında kullanılan versiyon okuma, potansiyometre yordamıylagerilim okuma ve devrenin sıfırlanması gibi komutların gerçekleştirilebilmesi içinkullanılan adresler boot.h dosyasında tanımlanmaktadır. boot.h kaynak kodlarının birkısmı Şekil 4.2’de gösterilmiştir. boot.h dosyasının tamamı ise EK 8’de <strong>veri</strong>lmiştir.Şekil 4.2. boot.h kaynak kodlarının bir bölümü


62boot.c dosyası ise GUI programında “SendReceivePacket” altyordamı ile gönderilenadres,durum ve özellik bilgilerine göre PIC’i çalıştırarak eğer geriye bilgi dönmesigerekiyorsa bu bilgileri döndürmektedir. Şekil 4.3’te boot.c kaynak kodlarının birbölümü gösterilmiştir.boot.c dosyasında, Visual Basic’de yazılan GUI programıyla kullanılan üç LED’inyakılıp söndürülmesi durumunda gönderilen <strong>veri</strong> paketinin durumu ayarlanmaktadır.UPDATE_LED case’i GUI yazılımının send_data dizisi ile 0x32 (onluk tabanda 50)yazma talebi, hangi LED’in seçileceği ve LED'in yanıp yanmayacağını belirler.Yine PIC’in RA0/AN0 bacağına bağlanmış olan potansiyemetre ile dışarıdan alınananalog sinyalin (gerilim), PIC18F4550 mikrodenetleyicisi tarafından A/D dönüştürmeişlemine tabi tutulması için gerekli ayarlar bu dosyanın içerisinde gerçekleştirilmektedir.READ_POT case’i GUI yazılımının send_data dizisi ile 0x37 (onluk tabanda 55)okuma talebi, ADC veya sayısal bilgi girişi dizinin 2. elemanı ile belirlenir. Eğer ADCişlemi yapılmış ise geriye iki bilgi döndürülür. ReadPOT() alt yordamı ile ADCçevrimin başlaması ve çevrim bitene kadar beklemesini içerir. Şekil 4.4’te boot.ckaynak kodlarının bir bölümü gösterilmiştir. boot.c dosyasının tamamı ise EK 9’da<strong>veri</strong>lmiştir.io_cfg.h dosyasının tamamı EK 10’da <strong>veri</strong>lmiştir.


63Şekil 4.3. boot.c kaynak kodlarının bir bölümüŞekil 4.4. boot.c kaynak kodlarının bir bölümüMPLAB programı ile bütün header ve c dosyaları derlenerek hex dosyası oluşturulur.Oluşturulan hex dosyası Winpic programı ile programlama devresi kullanılarakPIC18F4550 mikrodenetleyicisine yüklenir.


64GUI yazılımı Visual Basic 6.0’da gerçeklendi. Şekil 4.5’te gösterilen kullanıcı formuDLL versiyonu, LED’lerin yakıp söndürülmesi, anahtara basılıp basılmadığını kontrolederken aynı zamanda 1. kanaldan ADC okuması yapabilmektedir.Şekil 4.5. Uygulama GUI kullanıcı formuGUI formunda Voltaj Oku olarak kullanılan komutla, potansiyometre üzerindenmikrodenetleyiciye uygulanan gerilim değerlerinin değiştirilerek dijitale çevrilmesiişlemi gerçekleştirildi. Burada uygulaması yapılan A/D dönüştürme işlemi için gerekliolan PIC hex dosyaları derlendikten sonra Visual Basic 6.0’da ayarlamaları yapıldı.PIC18F4550, daha önce de belirtildiği gibi, 10 bitlik A/D dönüştürücü işlemigerçekleştirmektedir. Dönüştürme işlemi başlamadan önce TRIS bitleri ilgili bacağıanalog giriş olarak seçmek üzere set edilir. Bu uygulamada PORTA’nın RA0 bacağıanalog giriş olarak seçildiğinden TRISA0=1 olarak seçildi. A/D dönüştürme işlemindedijital bilgiye dönüşen analog sinyalin karşılığı ADRESH ve ADRESL kaydedicilerine


65yazılmaktadır. Bu yazım sırasında gelen 16 bitlik <strong>veri</strong>nin düşük anlamlı ilk sekiz bitiADRESL kaydedicisine, geri kalan sekiz bitlik <strong>veri</strong> ise ADRESH kaydedicisine yazılır.ADRESH kaydedicisinin öncelikle sola kaydırma işlemine tabi tutulduktan sonra, bu ikikaydedicinin lojik VEYA işlemine tabi tutulmasıyla bu <strong>veri</strong>ler birleştirilmiş olur.Adres kaydedicilerine yazılan dijital gerilim bilgisinin çözünürlüğünü ayarlamak içinsonuç 5 ile çarpıldıktan sonra onaltılı (hexadecimal) sayı sisteminde H3FF sayısınabölünür. 5 ile çarpılmasının nedeni, devreye güç kaynağından <strong>veri</strong>len gerilimin 7805regülatörü ile potansiyometreye 5V olarak <strong>veri</strong>lmesidir. H3FF onaltılı sayısı ikili sayısisteminde 10 bitlik 1111111111 sayısına karşılık gelmektedir. Bu da PIC18F4550’ninA/D dönüştürme kapasitesine denk gelmektedir.Anahtar durumunun kontrolü ise sadece giriş/çıkış portundan “SendReceivePacket”altyordamı ile gönderilen adres, durum ve özellik bilgilerine göre PIC’i çalıştırarak,PIC’den geriye dönen bilgileri göstermektedir. Kısaca, anahtarın basılı olması durumuLojik 1 ve basılı olmaması durumu ise Lojik 0 ile değerlendirilmektedir.Son olarak kullanılan LED’lerin bilgisayardan kontrolü yapılırken, send_data dizisi ile0x32 (onluk tabanda 50) yazma talebi, hangi LED’in seçileceği ve LED'in yanıpyanmayacağını belirler.Uygulama GUI’nin kontrol ettiği uygulama kartının açık devre şeması Şekil 4.6’da<strong>veri</strong>lmiştir. Uygulama kartının baskı devresi ise Şekil 4.7’de <strong>veri</strong>lmiştir.


66Şekil 4.6. Uygulama kartı açık devre şemasıŞekil 4.7. Uygulama kartı


675. TARTIŞMA ve SONUÇElektronik ölçme sektöründeki hızlı gelişmeler ve bilgisayar tabanlı sistemlerin ölçmesistemlerindeki yerinin her geçen gün artması, hızlı ve güvenilir <strong>veri</strong> iletişimmetotlarına olan ihtiyacı arttırmaktadır.Özellikle gömülü sistemlerde sıklıkla kullanılan mikroişlemci ve mikrodenetleyiciler iseelektronik alanındaki gelişmelerde lokomotif görevi üstlenmişlerdir. Programlanabilmeözellikleri ile gerek üreticiye gerekse de kullanıcıya yönelik hayal gücü ile sınırlıopsiyonlar sağlanmıştır.Sonuç olarak üzerinde çalışılan projede, çevrebirimlerin PIC18F4550mikrodenetleyicisi ile USB üzerinden bilgisayarla haberleştirilmesi sağlanmıştır. USBprotokolünün karmaşıklığı bir takım zorluklara yol açsa da, kullanılan mikrodenetleyiciüretici firması olan Microchip’in internet ortamında sunmuş olduğu Kernel’ler ileuygulamanın yazılım kısmının hazırlanmasını kolaylaştırmıştır.Kullanılan mikrodenetleyicinin bir kaç yıl öncesinde kullanılan bilgisayarişlemcilerinden bile daha üstün bir yonga olması, uygulama alanlarını oldukçagenişletmektedir. Endüstriyel elektronik, medikal, otomotiv, tüketici elektroniği vb. gibigenel başlıklarıyla <strong>veri</strong>len birçok alanda çeşitli uygulamalar için kullanılabilecek birproje hazırlanmıştır. Projede kullanılan uygulama kartı genel amaçlı bir arabirim olaraktasarlandığından uygulaması yapılacak sisteme adapte edilerek kullanılabilecektir.Üzerinde çalışılan projede, PIC18F4550’nin ICSP yöntemiyle paralel porttanönyüklenmesi ve USB portu üzerinden programlanabilmesi için yeni bir kartgeliştirilmiştir. Böylelikle kullanıcının önyükleme ve programlama için ayrı kartlarkullanma ihtiyacı ortadan kaldırılarak, Microchip firmasının üretmiş olduğuprogramlayıcı kartına göre daha kullanışlı bir sistem oluşturulmuştur.


68Uygulama kartı olarak düzenlenen devre ile analog bir sinyalin dijitale çevrilmesi,giriş/çıkış portlarının kullanılarak bilgisayarın <strong>veri</strong>len girişleri algılayabilmesi ve yinegiriş/çıkış portlarına bağlanmış olan devre elemanlarının bilgisayarla kontrolüsağlanmıştır.Bu çalışma temel alınarak PIC18F4550 mikrodenetleyicisi ile gerçekleştirilebilecekyeni projelerde, programlama kartında herhangi bir değişikliğe gidilmeden sadeceuygulama kartına yapılabilecek revizyonlar yeterli olacaktır. Bu bağlamda,mikrodenetleyici temelli tüm uygulamalar için prototip sayılabilecek bir uygulamagerçekleştirilmiş ve yeni tasarımcılar için bir yol açılmıştır.


69KAYNAKLARAxelson, J., 2005, USB Complete:Everything You Need to Develop Custom USBPeripherals, 3 rd ed., Labview Research, 572 p, Madison, USAChandler, A., 2006, New 48 MHz Microchip PIC18 Microcontrollers with USB 2.0,http://www.microcontroller.com/news/microchip_pic18_<strong>usb</strong>2.asp (21.09.2006)Kızılbey, O., 2005, Deniz Suyu Termometresi, İstanbul Teknik Üniversitesi Elektrik-Elektronik Fakültesi Bitirme Ödevi, 77 s, İstanbulMicrochip Technology Inc., 2004, DS39632B, PIC18F2455/2550/4455/4550 DataSheet, Microchip Technology IncorporationOverholt, D., 2005, The Create USB Interface, Massachusetts Institute of Techology,http://www.create.ucsb.edu/~dano/CUI/ (05.08.2006)Soydaş, R., 2002, USB Port ve Dahası, Marmara Üniversitesi Teknik Bilimler MYOAraştırma Ödevi, 13 s, İstanbulŞahin, C., Dayanık, A. ve Altınbaşak, C., 2006, PIC Programlama Teknikleri vePIC16F877A, 1. baskı, Altaş Yayınları, 526 s, İstanbulTan, W.M., 1997, Developing USB PC Peripherals Using The Intel 8x930Ax USBMicrocontroller, Annabooks, 189 p, San Diego, USA


70EKLEREK 1Çizelge 2.3. PORTA bacak fonksiyonlarıBacakRA0/AN0RA1/AN1RA2/AN2/V REF- /CV REFRA3/AN3/V REF+RA4/TOCKI/C1OUT/RCVRA5/AN4/SS/HLVDIN/C2OUTOSC2/CLKO/RA6FonksiyonTRISAyarıI/O I/O tipi AçıklamaRA00 Çıkış Dijital LATA dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTA <strong>veri</strong> girişiAN0 1 Giriş Analog A/D analog giriş kanalı 0 ve karşılaştırıcı C1 - girişiRA10 Çıkış Dijital LATA dijital <strong>veri</strong> çıkışı1 Giriş TTL PORTA<strong>veri</strong> girişi; POR’da ‘0’ okur.RA1 1 Giriş Analog A/D analog giriş kanalı 1 ve karşılaştırıcı C2 - girişiRA20 Çıkış DijitalLATA dijital <strong>veri</strong> çıkışı. CV REF çıkışıetkinleştirildiğinde kullanılmaz.1 Giriş TTLPORTA <strong>veri</strong> girişi; CV REF çıkışı veya analogfonksiyonlar etkinleştirildiğinde kullanılmaz.AN2 1 Giriş Analog A/D analog giriş kanalı 2 ve karşılaştırıcı C2 + girişiA/D analog girişi ve karşılaştırıcı düşük giriş voltajV REF- 1 Giriş Analogreferans girişi.Karşılaştırıcı voltaj referans çıkışı. Bu özellikCV REF x Çıkış Analogseçildiğinde dijital giriş kullanılamaz.RA30 Çıkış Dijital LATA dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTA <strong>veri</strong> girişiAN3 1 Giriş Analog A/D analog giriş kanalı 3 ve karşılaştırıcı C1 + girişiA/D analog girişi ve karşılaştırıcı yüksek giriş voltajV REF+ 1 Giriş Analogreferans girişi.RA40 Çıkış Dijital LATA dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTA <strong>veri</strong> girişiTOCKI 1 Giriş ST Timer1 saat girişiC1OUT 0 Çıkış Dijital Karşılaştırıcı 1 çıkışıRCV x Giriş TTLHarici USB alıcı-<strong>veri</strong>cisi (Fark alıcısından gelengiriş) girişiRA50 Çıkış Dijital LATA dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTA <strong>veri</strong> girişiAN4 1 Giriş Analog A/D analog giriş kanalı 4SS 1 Giriş TTL SSP için uydu seçme girişi (MSSP modülü için)HLVDIN 1 Giriş Analog Yüksek/Alçak – Voltaj Tespit GirişiC2OUT 0 Çıkış Dijital Karşılaştırıcı 2 çıkışıRA60 Çıkış DijitalLATA dijital <strong>veri</strong> çıkışı; ECIO, ECPIO veINTIO modlarında kullanılır, yoksa ‘0’ okunur.1 Giriş TTLPORTA <strong>veri</strong> girişi; ECIO, ECPIO ve INTIOmodlarında kullanılır, yoksa ‘0’ okunur.OSC2 x Çıkış AnalogAna osilatör geri besleme çıkışı bağlantısı (tüm XTve HS modları için)CLKO x Çıkış DijitalSistem döngü saati çıkışı; EC, ECPLL ve INTCKOmodlarında kullanılır.


71EK 2Çizelge 2.4. PORTB bacak fonksiyonlarıBacakRB0/AN12/INT0/FLT0/SDI/SDARB1/AN10/INT1/SCK/SCLRB2/AN8/INT2/VMORB3/AN9/CCP2/VPORB4/AN11/KBI0/CSSPPRB5/KBI1/PGMRB6/KBI2/PGCRB7/KBI3/PGDFonksiyonTRISAyarıI/O I/O tipi AçıklamaRB00 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiAN12 1 Giriş Analog A/D analog giriş kanalı 12.INT0 1 Giriş ST Harici Kesme 0 girişiFLT0 1 Giriş STGeliştirilmiş PWM Hata girişi (ECCP1 modülü);yazılımla etkinleştirilir.SDI 1 Giriş ST SPI <strong>veri</strong> girişi (MSSP modülü)SDA0 Çıkış Dijital I 2 C <strong>veri</strong> çıkışı (MSSP modülü)1 Giriş I 2 C/SMB I 2 C <strong>veri</strong> girişi (MSSP modülü)RB10 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiAN10 1 Giriş Analog A/D analog giriş kanalı 10.INT1 1 Giriş ST Harici Kesme 1 girişiSCK0 Çıkış Dijital SPI saat çıkışı (MSSP modülü)1 Giriş ST SPI saat girişi (MSSP modülü)SCL0 Çıkış Dijital I 2 C saat çıkışı (MSSP modülü)1 Giriş I 2 C/SMB I 2 C saat girişi (MSSP modülü)RB20 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiAN8 1 Giriş Analog A/D analog giriş kanalı 8.INT2 1 Giriş ST Harici Kesme 2 girişiVM0 0 Çıkış Dijital Harici USB alıcı-<strong>veri</strong>cisi VMO <strong>veri</strong> çıkışıRB30 Çıkış TTL LATB dijital <strong>veri</strong> çıkışı.1 Giriş Analog PORTB <strong>veri</strong> girişiAN9 1 Giriş Analog A/D analog giriş kanalı 9.CCP20 Çıkış Dijital CCP2 Karşılaştırma ve PWM çıkışı1 Giriş ST CCP2 Yakalama girişiVPO 0 Çıkış Dijital Harici USB alıcı-<strong>veri</strong>cisi VPO <strong>veri</strong> çıkışıRB40 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiAN11 1 Giriş Analog A/D analog giriş kanalı 11.KBI0 1 Giriş TTL Bacak değiştirme üzerinde kesme.CSSPP 0 Çıkış Dijital SPP yonga seçim kontrol çıkışıRB50 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiKBI1 1 Giriş TTL Bacak değiştirme üzerinde kesme.PGM x Giriş ST Tek-Kaynak Programlama modu girişi (ICSP)RB60 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiKBI2 1 Giriş TTL Bacak değiştirme üzerinde kesme.PGC x Giriş ST ICSP saat girişiRB70 Çıkış Dijital LATB dijital <strong>veri</strong> çıkışı.1 Giriş TTL PORTB <strong>veri</strong> girişiKBI3 1 Giriş TTL Bacak değiştirme üzerinde kesme.PGDx Çıkış Dijital ICSP <strong>veri</strong> çıkışıx Giriş ST ICSP <strong>veri</strong> girişi


72EK 3Çizelge 2.5. PORTC bacak fonksiyonlarıBacakRC0/T1OSO/T13CKIRC1/T1OSI/CCP2/UOERC2/CCP1/P1ARC4/D – /VMRC5/D + /VPRC6/TX/CKRC7/RX/DT/SDOFonksiyonTRISAyarıI/O I/O tipi AçıklamaRC00 Çıkış Dijital LATC dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTC <strong>veri</strong> girişiT1OSO x Çıkış AnalogTimer1 osilatör çıkışı;Timer1 seçildiğinde seçiliduruma gelir. Dijital giriş/çıkışlar seçilemez.T13CKI 1 Giriş ST Timer1/Timer3 sayıcı girişiRC10 Çıkış Dijital LATC dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTC <strong>veri</strong> girişiT1OSI x Giriş AnalogTimer1 osilatör girişi;Timer1 seçildiğinde seçiliduruma gelir. Dijital giriş/çıkışlar seçilemez.CCP20 Çıkış Dijital CCP2 Karşılaştırma ve PWM çıkışı1 Giriş ST CCP2 Yakalama girişiUOE 0 Çıkış DijitalHarici USB alıcı-<strong>veri</strong>ci OE (çıkış seçilir kılınmış)çıkışıRC20 Çıkış Dijital LATC dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTC <strong>veri</strong> girişiCCP10 Çıkış Dijital ECCP1 Karşılaştırma ve PWM çıkışı1 Giriş ST ECCP1 Yakalama girişiP1A 0 Çıkış Dijital ECCP1 Geliştirilmiş PWM çıkışıRC4 - Giriş TTL PORTC <strong>veri</strong> girişi; USB seçili iken seçilemez.D –- ÇıkışUSBVericisiUSB yolu fark eksi hat çıkışı (dâhili alıcı-<strong>veri</strong>ci)- GirişUSBVericisiUSB yolu fark eksi hat girişi (dâhili alıcı-<strong>veri</strong>ci)VM - Giriş TTLHarici USB alıcı-<strong>veri</strong>ci VM (D – ‘den gelen girişhattı) girişiRC5 - Giriş TTL PORTC <strong>veri</strong> girişi; USB seçili iken seçilemez.- ÇıkışUSBUSB yolu fark artı hat çıkışı (dâhili alıcı-<strong>veri</strong>ci)D +- GirişVericisiUSBVericisiVP - Giriş TTLRC6USB yolu fark artı hat girişi (dâhili alıcı-<strong>veri</strong>ci)Harici USB alıcı-<strong>veri</strong>ci VP (D + ‘dan gelen girişhattı) girişi0 Çıkış Dijital LATC dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTC <strong>veri</strong> girişiAsenkron seri gönderme <strong>veri</strong> çıkışı (EUSARTmodülü)0 Çıkış Dijital Senkron seri saat çıkışı (EUSART modülü)TX 0 Çıkış DijitalCK1 Giriş ST Senkron seri saat girişi (EUSART modülü)RC70 Çıkış Dijital LATC dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTC <strong>veri</strong> girişiRX 1 Giriş ST Asenkron seri alma <strong>veri</strong> girişi (EUSART modülü)0 Çıkış Dijital Senkron seri <strong>veri</strong> çıkışı (EUSART modülü)DT1 Giriş ST Senkron seri <strong>veri</strong> girişi (EUSART modülü)SDO 1 Giriş Dijital SPI <strong>veri</strong> çıkışı (MSSP modülü)


73EK 4Çizelge 2.6. PORTD bacak fonksiyonlarıBacakRD0/SPP0RD1/SPP1RD2/SPP2RD3/SPP3RD4/SPP4RD5/SPP5/P1BRD6/SPP6/P1CRD7/SPP7/P1DFonksiyonTRISAyarıI/O I/O tipi AçıklamaRD00 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP01 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.RD10 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP11 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.RD20 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP21 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.RD30 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP31 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.RD40 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP41 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.RD50 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP51 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.P1B 0 Çıkış Dijital ECCP1 Geliştirilmiş PWM çıkışı, kanal BRD60 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP61 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.P1C 0 Çıkış Dijital ECCP1 Geliştirilmiş PWM çıkışı, kanal CRD70 Çıkış Dijital LATD dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTD <strong>veri</strong> girişiSPP71 Çıkış Dijital SPP dijital <strong>veri</strong> çıkışı.1 Giriş TTL SPP dijital <strong>veri</strong> girişi.P1D 0 Çıkış Dijital ECCP1 Geliştirilmiş PWM çıkışı, kanal D


74EK 5Çizelge 2.7. PORTE bacak fonksiyonlarıBacakRE0/AN5/CK1SPPRE1/AN6/CK2SPPRE2/AN7/OESPPMCLR/V PP /RE3FonksiyonTRISAyarıI/O I/O tipi AçıklamaRE00 Çıkış Dijital LATE dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTE <strong>veri</strong> girişiAN5 1 Giriş Analog A/D giriş kanalı 5CK1SPP 0 Çıkış Dijital SPP saat 1 çıkışı (SPP seçili kılındığında)RE10 Çıkış Dijital LATE dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTE <strong>veri</strong> girişiAN6 1 Giriş Analog A/D giriş kanalı 6CK1SPP 0 Çıkış Dijital SPP saat 2 çıkışı (SPP seçili kılındığında)RE20 Çıkış Dijital LATE dijital <strong>veri</strong> çıkışı.1 Giriş ST PORTE <strong>veri</strong> girişiAN7 1 Giriş Analog A/D giriş kanalı 7OESPP 0 Çıkış Dijital SPP seçme çıkışı (SPP seçili kılındığında)MCLR - Giriş STPORTE <strong>veri</strong> girişi; MCLRE konfigürasyon biti‘0’ seçildiğinde.V PP - Giriş STHarici Ana Temizleme girişi; MCLREkonfigürasyon biti ‘1’ seçildiğinde.Yüksek-voltaj denetleme, ICSP modunda girişRE3 - Giriş Analog denetlemesi için kullanılır. Bacak modundanbağımsız olarak her zaman mevcuttur.


75EK 6Şekil 2.10. PIC18F4550 <strong>veri</strong> hafızası


76EK 7/*********************************************************************** Microchip USB Bootloader Version 1.0*********************************************************************** FileName: main.c* Dependencies: See INCLUDES section below* Processor: PIC18* Compiler: C18 2.30.01+* Company: Microchip Technology, Inc.** Software License Agreement** The software supplied herewith by Microchip Technology Incorporated* (the “Company”) for its PICmicro® Microcontroller is intended and* supplied to you, the Company’s customer, for use solely and* exclusively on Microchip PICmicro Microcontroller products. The* software is owned by the Company and/or its supplier, and is* protected under applicable copyright laws. All rights are reserved.* Any use in violation of the foregoing restrictions may subject the* user to criminal sanctions under applicable laws, as well as to* civil liability for the breach of the terms and conditions of this* license.** Author Date Comment*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* Rawin Rojvanit 11/19/04 Original.********************************************************************//** I N C L U D E S **********************************************************/#include #include "system\typedefs.h"// Required#include "system\<strong>usb</strong>\<strong>usb</strong>.h"// Required#include "io_cfg.h"// Required#include "system\<strong>usb</strong>\<strong>usb</strong>_compile_time_validation.h" // Optional/** V A R I A B L E S ********************************************************/#pragma udata/** P R I V A T E P R O T O T Y P E S ***************************************//** V E C T O R R E M A P P I N G *******************************************/#pragma code _HIGH_INTERRUPT_VECTOR = 0x000008void _high_ISR (void){_asm goto RM_HIGH_INTERRUPT_VECTOR _endasm}#pragma code _LOW_INTERRUPT_VECTOR = 0x000018void _low_ISR (void){


77}_asm goto RM_LOW_INTERRUPT_VECTOR _endasm#pragma code/** D E C L A R A T I O N S **************************************************/#pragma code/******************************************************************************* Function: void main(void)** PreCondition: None** Input: None** Output: None** Side Effects: None** Overview: Main program entry point.** Note: None*****************************************************************************/void main(void){byte temp;temp = ADCON1;ADCON1 |= 0x0F;//TRISBbits.TRISB4 = 1;// Reset value is already '1'//Check Bootload Mode Entry Conditionif(PORTBbits.RB4 == 1) // If not pressed, User Mode{ADCON1 = temp; // Restore reset value_asm goto RM_RESET_VECTOR _endasm}//end if//Bootload ModemInitAllLEDs();mInitAllSwitches()mInitPOT();ADCON2bits.ADFM = 1; // ADC result right justifiedmInitializeUSBDriver(); // See <strong>usb</strong>drv.hUSBCheckBusStatus(); // Modified to always enable USB modulewhile(1){USBDriverService(); // See <strong>usb</strong>drv.cBootService();}//end while}//end main// See boot.c#pragma code user = RM_RESET_VECTOR/** EOF main.c ***************************************************************/


78EK 8/*********************************************************************** Microchip USB C18 Firmware - USB Bootloader Version 1.00*********************************************************************** FileName: boot.h* Dependencies: See INCLUDES section below* Processor: PIC18* Compiler: C18 2.30.01+* Company: Microchip Technology, Inc.** Software License Agreement** The software supplied herewith by Microchip Technology Incorporated* (the “Company”) for its PICmicro® Microcontroller is intended and* supplied to you, the Company’s customer, for use solely and* exclusively on Microchip PICmicro Microcontroller products. The* software is owned by the Company and/or its supplier, and is* protected under applicable copyright laws. All rights are reserved.* Any use in violation of the foregoing restrictions may subject the* user to criminal sanctions under applicable laws, as well as to* civil liability for the breach of the terms and conditions of this* license.** Author Date Comment*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* Rawin Rojvanit 11/19/04 Original.********************************************************************/#ifndef BOOT_H#define BOOT_H/** I N C L U D E S **********************************************************/#include "system\typedefs.h"/** D E F I N I T I O N S ****************************************************//****** Compiler Specific Definitions *******************************/#if defined(HI_TECH_C)#define HITECH_C18#else#define MCHP_C18#endif#if defined(MCHP_C18) && defined(HITECH_C18)#error "Invalid Compiler selection."#endif#if !defined(MCHP_C18) && !defined(HITECH_C18)#error "Compiler not supported."#endif#if defined(MCHP_C18)#define EECON1_RDEECON1bits.RD


79#define EECON1_WR#endifEECON1bits.WR/****** Processor Specific Definitions ******************************/#if defined(__18F2455) || defined(__18F2550) ||\defined(__18F4455)|| defined(__18F4550)/****** Remapped Vectors ********************* _____________________* | RESET | 0x000000* | LOW_INT | 0x000008* | HIGH_INT | 0x000018* | TRAP | 0x000028* | Bootloader | 0x00002E* . .* . .* | USER_RESET | 0x000800* | USER_LOW_INT | 0x000808* | USER_HIGH_INT | 0x000818* | USER_TRAP | 0x000828* | |* | Program Memory |* . .* |___________________| 0x0005FFF / 0x0007FFF*/#define RM_RESET_VECTOR 0x000800#define RM_HIGH_INTERRUPT_VECTOR 0x000808#define RM_LOW_INTERRUPT_VECTOR 0x000818#else"Processor not supported."#endif/* Bootloader Version */#define MINOR_VERSION 0x00 //Bootloader Version 1.00#define MAJOR_VERSION 0x01/* State Machine */#define WAIT_FOR_CMD 0x00 //Wait for Command packet#define SENDING_RESP 0x01 //Sending Response/******************************************************************************* Macro: (bit) mBootRxIsBusy(void)** PreCondition: None** Input: None** Output: None** Side Effects: None** Overview: This macro is used to check if the bulk OUT endpoint is* busy (owned by SIE) or not.* Typical Usage: if(mBootRxIsBusy())** Note: None


80*****************************************************************************/#define mBootRxIsBusy() BOOT_BD_OUT.Stat.UOWN/******************************************************************************* Macro: (bit) mBootTxIsBusy(void)** PreCondition: None** Input: None** Output: None** Side Effects: None** Overview: This macro is used to check if the bulk IN endpoint is* busy (owned by SIE) or not.* Typical Usage: if(mBootTxIsBusy())** Note: None*****************************************************************************/#define mBootTxIsBusy() BOOT_BD_IN.Stat.UOWN/** S T R U C T U R E S ******************************************************//********************************************************************** General Data Packet Structure:* ACCESS RAM: Buffer Starting Address is assigned by compiler.* __________________ DATA_PACKET.FIELD* | COMMAND | 0 [CMD]* | LEN | 1 [LEN]* | ADDRL | 2 [ ] [ADR.LOW]* | ADDRH | 3 [ADR.pAdr]: [ADR.HIGH]* | ADDRU | 4 [ ] [ADR.UPPER]* | | 5 [DATA]* | |* . DATA .* . .* | | 62* |________________| 63*********************************************************************/#define OVER_HEAD 5 //Overhead: #define DATA_SIZE (BOOT_EP_SIZE - OVER_HEAD)typedef union _BOOT_DATA_PACKET{byte _byte[BOOT_EP_SIZE]; //For Byte Accessstruct{enum{READ_FLASH = 0x01,WRITE_FLASH = 0x02,ERASE_FLASH = 0x03,READ_EEDATA = 0x04,WRITE_EEDATA = 0x05,


81READ_CONFIG = 0x06,WRITE_CONFIG = 0x07,READ_VERSION = 0x00,UPDATE_LED = 0x32,READ_POT = 0x37,RESET = 0xFF}CMD;byte len;union{rom far char *pAdr; //Address Pointerstruct{byte low; //Little-indian orderbyte high;byte upper;};}ADR;byte data[DATA_SIZE];};struct{unsigned :8;byte led_num;byte led_status;};} BOOT_DATA_PACKET;/** E X T E R N S ************************************************************//** P U B L I C P R O T O T Y P E S *****************************************/void BootInitEP(void);void BootService(void);#endif //BOOT_H


82EK 9/*********************************************************************** Microchip USB C18 Firmware - USB Bootloader Version 1.00*********************************************************************** FileName: boot.c* Dependencies: See INCLUDES section below* Processor: PIC18* Compiler: C18 2.30.01+* Company: Microchip Technology, Inc.** Software License Agreement** The software supplied herewith by Microchip Technology Incorporated* (the “Company”) for its PICmicro® Microcontroller is intended and* supplied to you, the Company’s customer, for use solely and* exclusively on Microchip PICmicro Microcontroller products. The* software is owned by the Company and/or its supplier, and is* protected under applicable copyright laws. All rights are reserved.* Any use in violation of the foregoing restrictions may subject the* user to criminal sanctions under applicable laws, as well as to* civil liability for the breach of the terms and conditions of this* license.** Author Date Comment*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* Rawin Rojvanit 11/19/04 Original. USB Bootloader********************************************************************//******************************************************************************* -boot.c-* This file contains functions necessary to carry out bootloading tasks.* The only 2 USB specific functions are BootInitEP() and BootService().* All other functions can be reused with other communication methods.*****************************************************************************//** I N C L U D E S **********************************************************/#include #include "system\typedefs.h"#include "system\<strong>usb</strong>\<strong>usb</strong>.h"#include "io_cfg.h"/** V A R I A B L E S ********************************************************/#pragma udatabyte counter;byte byteTemp;byte trf_state;word big_counter;/** P R I V A T E P R O T O T Y P E S ***************************************/void BlinkUSBStatus(void);void ReadPOT(void);BOOL Switch3IsPressed(void);


83void Exercise_02(void);/** D E C L A R A T I O N S **************************************************/#pragma code/** C L A S S S P E C I F I C R E Q ****************************************//** U S E R A P I ***********************************************************//******************************************************************************* Function: void BootInitEP(void)** PreCondition: None** Input: None** Output: None** Side Effects: None** Overview: BootInitEP initializes bootloader endpoints, buffer* descriptors, internal state-machine, and variables.* It should be called after the USB host has sent out a* SET_CONFIGURATION request.* See USBStdSetCfgHandler() in <strong>usb</strong>9.c for examples.** Note: None*****************************************************************************/void BootInitEP(void){trf_state = WAIT_FOR_CMD;BOOT_UEP = EP_OUT_IN|HSHK_EN; // Enable 2 data pipes/** Do not have to init Cnt of IN pipes here.* Reason: Number of bytes to send to the host* varies from one transaction to* another. Cnt should equal the exact* number of bytes to transmit for* a given IN transaction.* This number of bytes will only* be known right before the data is* sent.*/BOOT_BD_OUT.Cnt = sizeof(dataPacket); // Set buffer sizeBOOT_BD_OUT.ADR = (byte*)&dataPacket; // Set buffer addressBOOT_BD_OUT.Stat._byte = _USIE|_DAT0|_DTSEN;// Set statusBOOT_BD_IN.ADR = (byte*)&dataPacket; // Set buffer addressBOOT_BD_IN.Stat._byte = _UCPU|_DAT1; // Set buffer status}//end BootInitEPvoid ReadPOT(void){ADCON0bits.GO = 1; // Start AD conversionwhile(ADCON0bits.NOT_DONE); // Wait for conversion


84return;}//end ReadPOTvoid StartWrite(void){/** A write command can be prematurely terminated by MCLR or WDT reset*/EECON2 = 0x55;EECON2 = 0xAA;EECON1_WR = 1;}//end StartWritevoid ReadVersion(void) //TESTED: Passed{dataPacket._byte[2] = MINOR_VERSION;dataPacket._byte[3] = MAJOR_VERSION;}//end ReadVersionvoid ReadProgMem(void) //TESTED: Passed{for (counter = 0; counter < dataPacket.len; counter++){//2 separate inst prevents compiler from using RAM stackbyteTemp = *((dataPacket.ADR.pAdr)+counter);dataPacket.data[counter] = byteTemp;}//end forTBLPTRU = 0x00; // forces upper byte back to 0x00// optional fix is to set large code model}//end ReadProgMemvoid WriteProgMem(void) //TESTED: Passed{/** The write holding register for the 18F4550 family is* actually 32-byte. The code below only tries to write* 16-byte because the GUI program only sends out 16-byte* at a time.* This limitation will be fixed in the future version.*/dataPacket.ADR.low &= 0b11110000; //Force 16-byte boundaryEECON1 = 0b10000100; //Setup writes: EEPGD=1,WREN=1//LEN = # of byte to writefor (counter = 0; counter < (dataPacket.len); counter++){*((dataPacket.ADR.pAdr)+counter) = \dataPacket.data[counter];if ((counter & 0b00001111) == 0b00001111){StartWrite();}//end if}//end for}//end WriteProgMemvoid EraseProgMem(void) //TESTED: Passed


85{//The most significant 16 bits of the address pointer points to the block//being erased. Bits5:0 are ignored. (In hardware).//LEN = # of 64-byte block to eraseEECON1 = 0b10010100; //Setup writes: EEPGD=1,FREE=1,WREN=1for(counter=0; counter < dataPacket.len; counter++){*(dataPacket.ADR.pAdr+(((int)counter) > 8);EECON1_RD = 1;dataPacket.data[counter] = EEDATA;}//end for}//end ReadEEvoid WriteEE(void) //TESTED: Passed{for(counter=0; counter < dataPacket.len; counter++){EEADR = (byte)dataPacket.ADR.pAdr + counter;//EEADRH = (BYTE)(((int)dataPacket.FIELD.ADDR.POINTER + counter) >> 8);EEDATA = dataPacket.data[counter];EECON1 = 0b00000100; //Setup writes: EEPGD=0,WREN=1StartWrite();while(EECON1_WR);}//end for}//end WriteEE//Wait till WR bit is clear//WriteConfig is different from WriteProgMem b/c it can write a bytevoid WriteConfig(void) //TESTED: Passed{EECON1 = 0b11000100; //Setup writes: EEPGD=1,CFGS=1,WREN=1for (counter = 0; counter < dataPacket.len; counter++){*((dataPacket.ADR.pAdr)+counter) = \dataPacket.data[counter];StartWrite();}//end forTBLPTRU = 0x00; // forces upper byte back to 0x00// optional fix is to set large code model}//end WriteConfigvoid BootService(void)


86{BlinkUSBStatus();if((<strong>usb</strong>_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;if(trf_state == SENDING_RESP){if(!mBootTxIsBusy()){BOOT_BD_OUT.Cnt = sizeof(dataPacket);mUSBBufferReady(BOOT_BD_OUT);trf_state = WAIT_FOR_CMD;}//end ifreturn;}//end ifif(!mBootRxIsBusy()){counter = 0;switch(dataPacket.CMD){case READ_VERSION:ReadVersion();counter=0x04;break;case READ_FLASH:case READ_CONFIG:ReadProgMem();counter+=0x05;break;case WRITE_FLASH:WriteProgMem();counter=0x01;break;case ERASE_FLASH:EraseProgMem();counter=0x01;break;case READ_EEDATA:ReadEE();counter+=0x05;break;case WRITE_EEDATA:WriteEE();counter=0x01;break;case WRITE_CONFIG:WriteConfig();counter=0x01;break;


87case RESET://When resetting, make sure to drop the device off the bus//for a period of time. Helps when the device is suspended.UCONbits.USBEN = 0;big_counter = 0;while(--big_counter);Reset();break;case UPDATE_LED:if(dataPacket.led_num == 3){mLED_3 = dataPacket.led_status;counter = 0x01;}//end ifif(dataPacket.led_num == 4){mLED_4 = dataPacket.led_status;counter = 0x01;}//end ifif(dataPacket.led_num == 5){mLED_5 = dataPacket.led_status;counter = 0x01;}//end ifbreak;case READ_POT:if(dataPacket.led_num == 6){dataPacket._byte[1] = sw3;counter=0x02;}else{ReadPOT();dataPacket._byte[1] = ADRESL;dataPacket._byte[2] = ADRESH;counter=0x03;}//end Switch3IsPressedbreak;default:break;}//end switch()trf_state = SENDING_RESP;if(counter != 0){BOOT_BD_IN.Cnt = counter;mUSBBufferReady(BOOT_BD_IN);}//end if}//end if}//end BootService/******************************************************************************* Function: void BlinkUSBStatus(void)


88** PreCondition: None** Input: None** Output: None** Side Effects: None** Overview: BlinkUSBStatus turns on and off LEDs corresponding to* the USB device state.** Note: mLED macros can be found in io_cfg.h* <strong>usb</strong>_device_state is declared in <strong>usb</strong>mmap.c and is modified* in <strong>usb</strong>drv.c, <strong>usb</strong>ctrltrf.c, and <strong>usb</strong>9.c*****************************************************************************/void BlinkUSBStatus(void){static word led_count=0;if(led_count == 0)led_count = 20000U;led_count--;#define mLED_Both_Off()#define mLED_Both_On()#define mLED_Only_1_On()#define mLED_Only_2_On(){mLED_1_Off();mLED_2_Off();}{mLED_1_On();mLED_2_On();}{mLED_1_On();mLED_2_Off();}{mLED_1_Off();mLED_2_On();}if(UCONbits.SUSPND == 1){if(led_count==0){mLED_1_Toggle();mLED_2 = mLED_1; // Both blink at the same time}//end if}else{if(<strong>usb</strong>_device_state == DETACHED_STATE){mLED_Both_Off();}else if(<strong>usb</strong>_device_state == ATTACHED_STATE){mLED_Both_On();}else if(<strong>usb</strong>_device_state == POWERED_STATE){mLED_Only_1_On();}else if(<strong>usb</strong>_device_state == DEFAULT_STATE){mLED_Only_2_On();}else if(<strong>usb</strong>_device_state == ADDRESS_STATE){if(led_count == 0)


89{mLED_1_Toggle();mLED_2_Off();}//end if}else if(<strong>usb</strong>_device_state == CONFIGURED_STATE){if(led_count==0){mLED_1_Toggle();mLED_2 = !mLED_1; // Alternate blink}//end if}//end if(...)}//end if(UCONbits.SUSPND...)}//end BlinkUSBStatus/** EOF boot.c ***************************************************************/


90EK 10/*********************************************************************** Microchip USB C18 Firmware Version 1.0*********************************************************************** FileName: io_cfg.h* Dependencies: See INCLUDES section below* Processor: PIC18* Compiler: C18 2.30.01+* Company: Microchip Technology, Inc.** Software License Agreement** The software supplied herewith by Microchip Technology Incorporated* (the “Company”) for its PICmicro® Microcontroller is intended and* supplied to you, the Company’s customer, for use solely and* exclusively on Microchip PICmicro Microcontroller products. The* software is owned by the Company and/or its supplier, and is* protected under applicable copyright laws. All rights are reserved.* Any use in violation of the foregoing restrictions may subject the* user to criminal sanctions under applicable laws, as well as to* civil liability for the breach of the terms and conditions of this* license.** Author Date Comment*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* Rawin Rojvanit 11/19/04 Original.********************************************************************//******************************************************************************* -io_cfg.h-* I/O Configuration File* The purpose of this file is to provide a mapping mechanism between* pin functions and pin assignments. This provides a layer of abstraction* for the firmware code and eases the migration process from one target* board design to another.******************************************************************************/#ifndef IO_CFG_H#define IO_CFG_H/** I N C L U D E S *************************************************/#include "autofiles\<strong>usb</strong>cfg.h"/** T R I S *********************************************************/#define INPUT_PIN 1#define OUTPUT_PIN 0/** U S B ***********************************************************/#define tris_<strong>usb</strong>_bus_sense TRISAbits.TRISA1 // Input#if defined(USE_USB_BUS_SENSE_IO)


91#define <strong>usb</strong>_bus_sense PORTAbits.RA1#else#define <strong>usb</strong>_bus_sense 1#endif#define tris_self_powerTRISAbits.TRISA2 // Input#if defined(USE_SELF_POWER_SENSE_IO)#define self_power PORTAbits.RA2#else#define self_power 1#endif/** L E D ***********************************************************/#define mInitAllLEDs() LATD &= 0x00; TRISD &= 0x00;#define mLED_1#define mLED_2#define mLED_3#define mLED_4#define mLED_5LATDbits.LATD0LATDbits.LATD1LATDbits.LATD2LATDbits.LATD3LATDbits.LATD4#define mLED_1_On() mLED_1 = 1;#define mLED_2_On() mLED_2 = 1;#define mLED_3_On() mLED_3 = 1;#define mLED_4_On() mLED_4 = 1;#define mLED_5_On() mLED_5 = 1;#define mLED_1_Off() mLED_1 = 0;#define mLED_2_Off() mLED_2 = 0;#define mLED_3_Off() mLED_3 = 0;#define mLED_4_Off() mLED_4 = 0;#define mLED_5_Off() mLED_5 = 0;#define mLED_1_Toggle()#define mLED_2_Toggle()#define mLED_3_Toggle()#define mLED_4_Toggle()#define mLED_5_Toggle()mLED_1 = !mLED_1;mLED_2 = !mLED_2;mLED_3 = !mLED_3;mLED_4 = !mLED_4;mLED_5 = !mLED_5;/** S W I T C H *****************************************************/#define mInitAllSwitches() TRISBbits.TRISB4=1;TRISBbits.TRISB5=1;TRISBbits.TRISB5=1;#define mInitSwitch2() TRISBbits.TRISB4=1;#define mInitSwitch3() TRISBbits.TRISB5=1;#define sw3 PORTBbits.RB4#define sw2 PORTBbits.RB5/** P O T ***********************************************************/#define mInitPOT() TRISAbits.TRISA0=1;ADCON0=0x01;ADCON2=0x3C;/** S P I : Chip Select Lines *************************************#define tris_cs_temp_sensor TRISBbits.TRISB2 // Output#define cs_temp_sensor LATBbits.LATB2#define tris_cs_sdmmc#define cs_sdmmcTRISBbits.TRISB3 // OutputLATBbits.LATB3


92/** S D M M C *******************************************************/#define TRIS_CARD_DETECT TRISBbits.TRISB4 // Input#define CARD_DETECT PORTBbits.RB4#define TRIS_WRITE_DETECT TRISAbits.TRISA4 // Input#define WRITE_DETECT PORTAbits.RA4#endif //IO_CFG_H


93EK 11Komut Alanı Türkçe AçıklamaADDWF f,d,a W ile f ’yi toplaADDWFC f,d,a W ile f ' yi topla elde bitini f ' ye ekleANDWF f,d,a W ile f ’yi VE işlemine tabi tut.CLRF f,a f ’yi sıfırla.COMF f,d,a f ’nin tersini alCPFSEQ f,a WREG ile f ' yi karşılaştır. Eşitse alttaki komuta atlaCPFSGT f,a WREG ile f ' yi karşılaştır. WREG küçükse alttaki komuta atlaCPFSLT f,a WREG ile f ' yi karşılaştır. WREG büyükse alttaki komuta atlaDECF f,d,a f’deki sayıyı bir azalt.DECFSZ f,d,a f’deki sayıyı bir azalt, sonuç 0’sa altındaki komutu atla.DCFSNZ f,d,a f’deki sayıyı bir azalt, sonuç 0’dan farklı ise altındaki komuta atla.INCF f,d,a f’deki sayıyı bir arttır.INCFSZ f,d,a f’deki sayıyı bir arttırır, sonuç 0’sa altındaki komuta atlaINFSNZ f,d,a f’deki sayıyı bir arttırır, sonuç 0 değilse altındaki komuta atlaIORWF f,d,a W ile f’yi VEYA işlemine tabi tut.MOVF f,d,a f’deki sayıyı hedefe taşı.MOVFF f s , f d f’deki sayıyı ikinci word’e taşıMOVWF f,a W’deki sayıyı f’de hedefe taşı.MULWF f,a f 'deki sayıyı WREG ile çarpNEGF f,a f 'yi negatif yapRLCFf,d,af’deki 8 biti başa Status 0 bitini ekleyerek sola kaydır,Dokuzuncu bitteki değeri sıfırıncı bite ata.RLNCF f,d,a f’deki 8 biti başa Status 0 bitini ekleyerek sola kaydır.RRCFf,d,af’deki 8 biti başa Status 0 bitini ekleyerek sağa kaydır,Dokuzuncu bitteki değeri sıfırıncı bite ata.RRNCF f,d,a f’deki 8 biti başa Status 0 bitini ekleyerek sağa kaydır.SETF f,a f 'yi 1 yapSUBFWB f,d,a Elde kullanarak WREG den f 'yi çıkartSUBWF f,d,a W’deki sayıyı f’deki sayıdan çıkart.SUBWFB f,d,a W’deki sayıyı f’deki sayıdan çıkart. Eldeyi değiştir.SWAPF f,d,a İlk dört bitle son dört bitin yerlerini değiştir.TSTFSZ f,a f 'yi test et 0 ise sonraki komuta atlaXORWF f,d,a W ile f’i XOR işlemine tabi tut.Çizelge 2.9. Bayt yönlendirmeli işlemler komut seti


94EK 12Komut Alanı Türkçe AçıklamaBit yönlendirmeli işlemlerBCF f, b, a f’deki bir biti sıfırla.BSF f, b, a f’deki bir biti set et.BTFSC f, b, a f’deki sayı 0’sa altındaki komutu atlaBTFSS f, b, a f’deki sayı 1’se altındaki komutu atla.BTG f, d, a f’deki biti tersleKontrol İşlemleriBC n Elde varsa n adresine gidilir.BN n Sayı negatif ise n adresine giderBNC n Elde yoksa n adresine gidilir.BNN n Sayı Negatif değilse n adresine giderBNOV n Taşma yoksa n adresine gidilir.BNZ n Z=0 ise n adresine gidilir.BOV n Taşma varsa n adresine gidilir.BRA n n adresine gidilir.BZ n Z=1 ise n adresine gidilir.CALL n,s Alt programı çağırCLRWDT - WDT’deki değeri sıfırla.DAW - WREG’i desimal düzeltGOTO n Programda istenilen yere atla.NOP - İşlem yapmaNOP - İşlem yapma 2 wordPOP - Yığına ATPUSH - Yığından ALRCALL n n kadar ilerdeki komutu Göreli Çağır.RESET - Yazılımla sıfırlamaRETFIE s Kesme sonunda yapılan işlemden normal programa dön.RETURN s Çağır’la çağırılan alt programın sonu.SLEEP - Uyku moduna geç.Sade İşlemlerADDLW kk Verilen sabit sayıyı W’deki sayıya ekle.ANDLW kk Verilen sabit sayıyla W’deki sayıyı VE işlemine tabi tut.IORLW kk Verilen sabit sayıyla W’deki sayıyı VEYA işlemine tabi tut.LFSR r,kk 1.Word değeri 2.Word e kopyeleMOVLB k k Bank Seçme kaydedicisine yazılırMOVLW kk Verilen sabit sayıyı W’nin içine ata.MULLW kk WREG i kk ile çarpRETLW kk Tablolama sırasında sayı değerini W’ye ataSUBLW kk W’deki sayıyı <strong>veri</strong>len sabit sayıdan çıkart.XORLW kk Verilen sabit sayıyla W’deki sayıyı ÖZELVEYA işlemine tabi tutÇizelge 2.10. Bit yönlendirmeli işlemler, kontrol işlemleri ve sade işlemler komut seti


95EK 13Komut Alanı Türkçe AçıklamaHafıza işlemleriTBLRD* - Tabloyu okuTBLRD*+ - Sonrakini arttırarak tabloyu okuTBLRD*- - Sonrakini azaltarak tabloyu okuTBLRD+* - Öncekini arttırarak tabloyu okuTBLWT* - Tabloya yazTBLWT*+ - Sonrakini arttırarak tabloya yazTBLWT*- - Sonrakini azaltarak tabloya yazTBLWT+* - Öncekini arttırarak tabloya yazGeliştirilmiş Komut SetiADDFSR f, k Verilen sabit sayıyı FSR’ye ekleADDULNK k Verilen sabit sayıyı FSR2’ye ekle ve geri dörCALLW - WREG’i kullanarak altprogramı çağırMOVSF z s , f d Kaynağı birinci kelimeye taşıMOVSS z s , f d Hedefi ikinci kelimeye taşıPUSHL k Verilen sabit sayıyı FSR2’de sakla, FSR2’yi azaltSUBFSR f, k Verilen sabit sayıyı FSR2’den çıkartSUBULNK k Verilen sabit sayıyı FSR2’den çıkart ve geri dönÇizelge 2.11. Hafıza işlemleri komut seti ve geliştirilmiş komut seti


96ÖZGEÇMİŞ1978 yılında Karabük’te doğdu. İlk ve ortaöğretimini bu şehirde tamamladıktan sonra1995 yılında Gaziantep Üniversitesi Mühendislik Fakültesi Elektrik-ElektronikMühendisliği Bölümünü kazandı. Lisans öğreniminden sonra, 2003 yılında ErzincanÜniversitesi Kelkit Aydın Doğan Meslek Yüksekokulu Endüstriyel ElektronikProgramında Öğretim Görevlisi olarak göreve başladı. 2004 yılında AtatürkÜniversitesi Fen Bilimleri Enstitüsü Elektrik ve Elektronik Mühendisliği AnabilimDalı’nda yüksek lisans öğrenimine başladı.Erzincan Üniversitesi Kelkit Aydın Doğan Meslek Yüksekokulu Endüstriyel ElektronikProgramı Koordinatörü ve Müdür Yardımcısı olarak görevine devam etmektedir. Evlive bir çocuk babasıdır. İngilizce bilmektedir.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!