usb-pc-veri-aktarim

Transkript

usb-pc-veri-aktarim
PIC18F4550 MİKRODENETLEYİCİSİ İLE
USB-PC VERİ AKTARIM ARABİRİMİ
GERÇEKLENMESİ
Adil Fatih KİREMİTCİ
Y.Lisans Tezi
Elektrik ve Elektronik Mühendisliği Anabilim Dalı
Yrd. Doç. Dr. Tevhit KARACALI
2007
Her hakkı saklıdır
ÖZET
Y.Lisans Tezi
PIC18F4550 MİKRODENETLEYİCİSİ İLE USB-PC VERİ AKTARIM ARABİRİMİ
GERÇEKLENMESİ
Adil Fatih KİREMİTCİ
Atatürk Üniversitesi
Mühendislik Fakültesi
Elektrik ve Elektronik Mühendisliği Anabilim Dalı
Danışman: Yrd. Doç. Dr. Tevhit KARACALI
Günümüz teknolojisinde veri toplama elektroniğindeki hızlı gelişim, aynı zamanda daha
hızlı ve uyumlu veri iletişim metotlarına olan ihtiyacı da beraberinde getirmiştir.
Bununla beraber kullanıcılar farklı tiplerde elektronik cihazlarla bilgisayar arasında bir
arabirime 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
verilerin bilgisayar ortamına aktarılması ve bu verilerin görsel bir şekilde kullanıcıya
sunularak çevrebirimlerin kontrolünü sağlayacak bir arabirim devresinin tasarlanması ve
gerçekleştirilmesi amaçlanmıştır. Son zamanlarda veri iletişiminde yaygın olarak
kullanılan en popüler standart USB standardıdır. Günümüz elektronik teknolojisinin
vazgeçilmezleri arasında yerini alan PIC mikrodenetleyicilerden PIC18F4550
kullanılarak, çevrebirimler ile bilgisayar arasındaki veri toplama işlemi USB üzerinden
gerçekleştirilmiştir.
2007, 95 sayfa
Anahtar Kelimeler: PIC18F4550, USB, Veri Toplama, A/D Dönüştürücü
i
ABSTRACT
MS Thesis
REALIZING OF PC-USB DATA TRANSFER INTERFACE WITH PIC18F4550
MICROCONTROLLER
Adil Fatih KİREMİTCİ
Atatürk University
Faculty of Engineering
Department of Electrical and Electronic Engineering
Supervisor: Asst. Prof. Dr. Tevhit KARACALI
With the rapid growth of data acquisition electronics in today’s technology, there also
comes a need for faster and compatible data transfer methods. Although, users need an
interface for various types of electronic devices and a computer, and aimed that
controlling of these devices via computer. In this thesis it is aimed transferring electrical
quantities data which is taken from peripherals to computer medium and visually
presenting these data to user, and designing and realizing of an interface circuit to
control these peripherals. Nowadays, most popular and widely used method of data
transfer utilizes the USB standard. Using one of the today’s electronic technology’s
indispensable PIC microcontrollers PIC18F4550, data acquisition is provided via USB
standard.
2007, 95 pages
Keywords: PIC18F4550, USB, Data Acquisition, A/D Converter
ii
TEŞEKKÜR
Yüksek Lisans tezi olarak sunduğum bu çalışma, Atatürk Üniversitesi Mühendislik
Fakültesi Elektrik ve Elektronik Mühendisliği Bölümü ve Erzincan Üniversitesi Kelkit
Aydı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ı ve
ilgiyi esirgemeyen yüksekokulumuz müdürü Sayın Yrd. Doç. Dr. Sebahattin
KARANLIK’a ve uygulama aşamasında yardımlarını esirgemeyen yüksekokulumuz
personeline ç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 2007
iii
İÇİNDEKİLER
ÖZET ……………………………………………………………………………... i
ABSTRACT ………………………………………………………………………. ii
TEŞEKKÜR ………………………………………………………………………. iii
SİMGELER ve KISALTMALAR DİZİNİ ……………………..…………………. vii
ŞEKİLLER DİZİNİ ……………………………………………………….............. ix
ÇİZELGELER DİZİNİ ……………………………………………………………. xi
1. GİRİŞ ……………………………………………………………………........ 1
1.1. Çalışmanın Amacı ve Kapsamı …………………………………..………..... 1
1.2. Çalışmanın Anahatları ……………………………………………...…...….. 2
2. KURAMSAL TEMELLER …………………….…………………………... 3
2.1. USB ……………………………………………………………………...….. 3
2.1.1. Giriş …………………………………………………………………......... 3
2.1.2. USB protokolü …………………………………………………………..... 8
2.1.2.a. USB bileşenleri ………………………………………………….…........ 8
2.1.2.b. USB cihazlarda veri akışı ………...……………………………………...8
2.1.2.c. USB veri transfer tipleri …………………………………………............ 10
2.1.2.d. USB sürücüleri ………………………………………………….............. 12
2.1.2.e. USB konfigürasyonu ……………………….……………….................... 13
2.2. PIC Mikrodenetleyiciler …………………………………………………......15
2.2.1. PIC nedir? …………………….………………………………………....... 15
2.2.2. Neden PIC? ……………………………………………………………...... 16
2.2.3. Neden PIC18F4550? ………………………………………………............ 17
2.3. PIC18F4550 özellikleri ve yapısı ………..………………………………......19
2.3.1. PIC18F4550 ……………………………………………………………..... 19
2.3.1.a. USB desteği ..……………………………………………………….........21
2.3.1.b. Çoklu osilatör seçenekleri ve özellikleri ……………...………………… 22
2.3.1.c. Hafıza özellikleri .……………………………………………………….. 22
2.3.2. PIC18F4550 giriş / çıkış portlarının fonksiyonları …...…………………... 23
2.3.3. PIC18F4550 osilatör özellikleri ……..………………………………......... 28
iv
2.3.3.a. Osilatör kontrolü ….……………………………………………….......... 29
2.3.3.b. PIC18F4550’de reset (sıfırlama) işlemi ………………………………. 31
2.3.3.c. PIC18F4550 hafıza organizasyonu ……………………………………... 33
2.3.3.d. PIC18F4550 CCP (Capture/Compare/PWM) modülleri …….................. 36
2.3.4. 10-bit analog/dijital dönüştürme modülü …….……………………............ 37
2.3.4.a. A/D dönüşüm için gereksinimler …..…………………………................ 40
2.3.4.b. Elde edim zamanının seçimi ve yapılandırılması …………………......... 41
2.3.4.c. A/D dönüşümü için saat kaynağı seçimi ………………………………... 41
2.3.4.d. Analog port bacaklarını yapılandırma ………………….…………......... 42
2.3.4.e. A/D dönüşümü ………………….…………………………………......... 42
2.3.5. PIC18F4550 USB modülü ….………...…………………………………... 44
2.3.5.a. USB durum ve kontrolü ……..………………………………………….. 44
2.3.5.b. USB kontrol kaydedicisi (UCON) …..………………………………….. 45
2.3.5.c. USB konfigürasyon kaydedicisi (UCFG) ……………..………………... 46
2.3.6. PIC18F4550 komut seti …….…………………………………………….. 47
2.3.7 I/O portlarının konfigürasyonu ………….………………………………… 47
3. MATERYAL ve YÖNTEM …………………..…………………………….. 48
3.1. Paralel ve USB Programlama Devresi ……………………….……………... 48
3.1.1. Donanım (Hardware) ……………………………………………………... 48
3.1.2. Devre elemanları ………………………….………………………………. 51
3.1.2.a. PIC18F4550 …………………………………………………………...... 51
3.1.2.b. Osilatör ………………………………………………………………...... 52
3.1.2.c. USB konektör …………….……………………………………………... 52
3.1.2.d. Güç göstergesi ………….……………………………………………......53
3.1.2.e. Sıfırlama ve program butonları ………….……………………………… 54
3.1.3. Güç ………………………………………………………………………... 54
3.2. Yazılım (Software) …………………………………………….…….............55
3.2.1 PIC18F4550’nin önyüklemesi (Bootload) ….……………………………... 55
3.3 Kodlama (Firmware) ………………………………………………................ 58
3.4 Görsel arabirim(GUI) ……………………..………………………………….59
4. ARAŞTIRMA BULGULARI …………………………………..……………60
5. TARTIŞMA ve SONUÇ …………………..………………………………… 67
v
KAYNAKLAR ……………………………………………………………………. 69
EKLER …………………………………………………………………………….. 70
EK 1 ……………………………………………………………………………... 70
EK 2 ……………………………………………………………………………... 71
EK 3 ……………………………………………………………………………... 72
EK 4 ……………………………………………………………………………... 73
EK 5 ……………………………………………………………………………... 74
EK 6 ……………………………………………………………………………... 75
EK 7 ……………………………………………………………………………... 76
EK 8 ……………………………………………………………………………... 78
EK 9 ……………………………………………………………………………... 82
EK 10…………………………………………………………………………….. 90
EK 11 ……………………………………………………………………………. 93
EK 12 ……………………………………………………………………………. 94
EK 13 ……………………………………………………………………………. 95
ÖZGEÇMİŞ ……………………………………………………………..………… 96
vi
SİMGELER ve KISALTMALAR DİZİNİ
CHOLD
Örnekle/tut kondansatörü
RS
Kaynak direnci
RSS
Örnekleme anahtarı iç direnci
TACQ
Analog sinyali minimum algılama zamanı
TAD
Bit başına A/D dönüşüm zamanı
TAMP
Yükseltme gecikme zamanı
TC
Örnekle/tut kondansatörü şarj zamanı
TCOFF
Sıcaklık katsayısı
TOSC
Osilatör periyodu
VDD
Kaynak gerilimi
Kısaltmalar
A/D
Analog/Digital (Analog/Dijital)
ADC
Analog to Digital Converter (Analog/Dijital Dönüştürücü)
API
Application Program Interface (Uygulama Programı Arayüzü)
BOR
Brown-Out Reset (Gerilim Düşmesi Sıfırlaması)
CCP
Capture/Compare/PWM
(Yakalama/Karşılaştırma/Darbe Genlik Modülasyonu)
CPU
Central Processing Unit (Merkezi İşlem Birimi)
CRC
Cyclic Redundancy Check (Çevrimsel Artıklık Kodlaması)
DLL
Dynamic Link Library (Dinamik Link Kütüphanesi)
ECCP
Enhanced Capture/Compare/PWM
(Geliştirilmiş Yakalama/Karşılaştırma/Darbe Genlik Modülasyonu)
EEPROM
Electrically Erasable Programmable Read-Only Memory
(Elektrikle Silinebilir Salt Okunabilir Bellek)
EUSART
Enhanced Universal Synchronous Asychronous Receiver Transmitter
(Geliştirilmiş Evrensel Senkron Asenkron Alıcı Verici)
GPR
General Purpose Registers (Genel Amaçlı Kaydediciler)
GUI
Graphical User Interface (Grafik Kullanıcı Arayüzü)
I/O
Input/Output (Giriş/Çıkış)
vii
I2C
Inter-Integrated Circuit (Tümleşik Devre Arabirimi)
ICSP
In-Circuit Serial Programming (Devre Üzerinden Seri Programlama)
IRP
Input/Output Request Packets (Giriş/Çıkış İstek Paketleri)
LIN
Local 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)
PIC
Peripheral Interface Controller (Çevresel Arabirim Denetleyicisi)
PID
Product 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)
SIE
Serial Interface Engine (Seri Arabirim Motoru)
SPI
Serial Peripheral Interface (Seri Çevresel Arabirim)
SPP
Streaming Parallel Port (Duraksız Paralel Port)
SRAM
Static Random Access Memory (Statik Rasgele Erişimli Bellek)
ST
Schmitt Trigger (Schmitt Tetiklemesi)
TTL
Transistor-Transistor Logic (Transistör-Transistör Lojik)
USART
Universal
Synchronous
Asynchronous
(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
Receiver
Transmitter
ŞEKİLLER DİZİNİ
Şekil 2.1. USB boruları ve son uç kavramı …………………………………..……. 9
Şekil 2.2. USB veri hareketi ……………………………………………………....10
Şekil 2.3. USB veri iletişim tiplerinin teorik olarak taşıyabilecekleri maksimum
veri 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 veri 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 TAD zaman diyagramı
(ACQT<2:0> = 000, TACQ = 0) ………………………………………... 43
Şekil 2.15. A/D dönüşüm TAD zaman diyagramı
(ACQT<2:0> = 010, TACQ = 4 TAD) ………………………………….. 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ü …………………………………… 63
ix
Şekil 4.5. Uygulama GUI kullanıcı formu ……………….………………………... 64
Şekil 4.6. Uygulama kartı açık devre şeması ……………………………………… 66
Şekil 4.7. Uygulama kartı ……………….………………………………………… 66
x
Çİ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. TAD 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şlemleri
ve 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ı ……..……………………………………... 53
xi
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İ AKTARIM
ARABİRİMİ GERÇEKLENMESİ
Adil Fatih KİREMİTCİ
ELEKTRİK VE ELEKTRONİK MÜHENDİSLİĞİ ANABİLİM DALI
ERZURUM
2007
Her hakkı saklıdır.
Yrd.Doç.Dr. Tevhit KARACALI danışmanlığında, Adil Fatih KİREMİTCİ tarafından
hazırlanan bu çalışma 22/08/2007 tarihinde aşağıdaki jüri tarafından. Elektrik ve
Elektronik 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ım
Prof.Dr. Mehmet ERTUĞRUL
Enstitü Müdürü
1
1. GİRİŞ
Elektronik ve bilgisayar endüstrisindeki gelişmeler, günlük hayatta kullandığımız birçok
cihazı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ık
yararlanılmaktadır. Özellikle elektronik ölçme ve enstrumasyon alanında bilgisayar ve
mikrodenetleyici 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, dijital
kamera gibi çevrebirimlerini sıklıkla kullanmaktadır. Bunun yanı sıra bilgisayar
kontrolü gerektiren bilimsel çalışmalarda arabirim desteği önemli bir problem olarak
görülmektedir. USB (Universal Serial Bus) protokolünün teknolojinin kullanımına
sunulmasıyla bu sıkıntılar önemli ölçüde azaltılmıştır.
Bu çalışmada, PIC (Peripheral Interface Controller) mikrodenetleyicilerin diğer
mikrodenetleyicilere ve USB iletişimin paralel ve seri iletişime olan üstünlükleri bir
araya
getirilmiştir.
USB
protokolünün
temelleri,
kullanılan
PIC18F4550
mikrodenetleyicisinin ö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
verilerin 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 mikrodenetleyicilerden
PIC18F4550, USB destekli üretilmiş bir mikrodenetleyici olup alınan sinyallerin
işlenerek USB aracılığıyla bilgisayara gönderilmesi işlevini yerine getirmesi amacıyla
kullanılmıştır. Özellikle analog sinyallerin dijitale çevrilerek bilgisayar ortamında
kullanıcıya görsel bir şekilde sunulması için Visual Basic programlama dili ile yazılmış
bir arayüz tesis edilmiştir.
2
1.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, PIC
mikrodenetleyici seçiminin nedenleri, PIC18F4550 mikrodenetleyicisinin özellikleri ve
PIC18F4550 A/D dönüştürücü modülü hakkında bilgi verilmektedir.
Bölüm 3’te, PIC18F4550 mikrodenetleyicisi için geliştirilen programlama devresinin
donanım ve yazılım kısımları hakkında ayrıntılı bilgi verilmektedir.
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, PIC
tarafında yazılan komutlar hakkında bilgi verilmektedir.
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üşünceler
hakkında bilgi verilmektedir.
3
2. KURAMSAL TEMELLER
2.1. USB
2.1.1. Giriş
USB, Evrensel Seri Yol, bilgisayarlara çeşitli çevrebirimlerin takılabilmesi için
geliştirilmiş bir veri yolu standardıdır. Bilgisayar endüstrisinin ileri gelen firmalarından
Compaq, 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 kronolojisi
Sürüm
Tarih
0,7
11 Kasım 1994
0,8
30 Aralık 1994
0,9
13 Nisan 1995
0,99
25 Ağustos 1995
1,0 FDR
13 Kasım 1995
1,0
15 Ocak 1996
1,1
23 Eylül 1998
2,0 (0.79 tasarısı)
5 Ekim 1999
2,0 (0.9 tasarısı)
21 Aralık 1999
2,0
27 Nisan 2000
USB’nin kullanım alanlarının başında ölçme ve kontrol gelmektedir. USB, kullanıcıya
ve tasarımcıya sağladığı avantajları ile günümüz teknolojisinin vazgeçilmez veri yolu
standartlarından biri olmuştur. USB tasarımının 127 adet çevrebirimin bağlanabilmesine
4
izin vermesi ve diğer avantajları göz önüne alındığında bu proje için en uygun veri yolu
standardı 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 anda
takılıp sökülebilmesi ve harici güç kaynağı gerektirmemesi gibi özellikleriyle
kullanıcıya kullanım kolaylığı sağlamaktadır.
• Güvenilirlik:
USB’nin
güvenilirliği
donanım
tasarımından
ve
transfer
protokollerinden kaynaklanır. Programlamaya ya da manüel bir müdahaleye gerek
kalmadan hatalar tespit edilerek, vericiyi yeniden gönderim yapabileceği konusunda
bilgilendirmektedir.
• 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 cihazlar
iç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 uygulanabilirlik
kazanmaktadı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 fonksiyonlar
yüklenmez.
• Güç Tüketimi: USB harici bir güç kaynağı gerektirmez. Tasarruflu devreler ve kodlar
yardı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 veri iletişimi
sağlamaktadır. USB üç hızı destekler: Yüksek hız (480Mb/s), Tam hız (12Mb/s) ve
5
Düşü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)
Arabirim
Format
Cihaz sayısı
(max.)
USB
asenkron
Seri
127
RS–232
(EIA/TIA–232)
asenkron
Seri
2
RS–485
(EIA/TIA–485)
asenkron
Seri
asenkron
seri
infrared
senkron
Seri
IrDA
Microwire
32
Hız (max.)
bit/saniye
1,5M, 12M,
480M
20K (115K
bazı
cihazlarda)
10M
Kullanım
Fare, klavye, modem, audio vb.
Modem, fare, enstrumantasyon
Veri toplama ve kontrol sistemi
2
115K
Yazıcı, dizüstü
8
2M
Mikrodenetleyici haberleşmesi
SPI
senkron
Seri
8
2,1M
Mikrodenetleyici haberleşmesi
I 2C
senkron
Seri
40
3,4M
Mikrodenetleyici haberleşmesi
IEEE–1394
(FireWire)
Seri
64
400M (IEEE–
1394b
için 3,2G)
Video, toplu kayıt
IEEE–488
(GPIB)
Paralel
15
8M
Enstrumantasyon
Seri
seri akım
döngüsü
Paralel
1024
10M/100M/1G
2
31,5K
2
8M
Ethernet
MIDI
Paralel printer port
PC Network
Müzik, görüntü kontrolü
Yazıcı, tarayıcı, disk sürgüleri
USB’nin tasarımcıya sağladığı avantajlar:
• İşletim Sistemi Desteği: USB’ye destek veren bir sitemin üç asgarisi vardır: Sisteme
takılan/sökülen cihazı algılamak, takılan cihazlarla haberleşmek ve son olarak yazılım
sü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, istekleri
yanıtlamak ise çevrebirimine düşer.
• USB–IF Forum: USB–IF kâr amaçlı olmayan, bilgi, yazılım ve donanım aletleri ile
test olanakları sağlayan bir kuruluştur.
USB’nin gerek kullanıcıya gerekse tasarımcıya sağladığı avantajların yanı sıra
dezavantajları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 uyumlu
olmaması en temel handikaptır. Bundan başka, hız ve mesafe sınırlamaları nedeniyle
USB kullanımı bazı durumlarda pratik olmamaktadır.
• Eski Donanımlarla Uyumsuzluk: Eski donanımlarda USB portu yoktur. USB olmayan
bir 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ç verir.
• Sürat Limitleri: USB çok yönlü bir arabirim olmasına rağmen, USB ile her şeyi
halletmeye çalışmak doğru değildir. Çizelge 2.1’e göre rakibi FireWire’dır. Yüksek
hızlı USB, IEEE–1394 ile yarışabilirken IEEE–1394b ile yarışabilecek bir seçenek
sunamamaktadı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 5
metreye kadar çıkabilir. Oysa RS–232, RS–485 veya Ethernet daha büyük mesafelere
izin verir. 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âh
tarafı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) ciddi
sorunlar yaratır.
• Protokolün Karmaşıklığı: USB çevrebiriminin programlanması, protokoller hakkında
ayrıntılı bilgi sahibi olmayı gerektirir. Haberleşmenin büyük kısmı yonga tarafından
otomatik olarak halledilir. Ancak sürücü yazanlar, protokolleri ve sürücünün işlevini
iyice anlamış olmaları gerekmektedir.
• İşletim Sistemi Desteğinin Artırılması: Windows sınıf sürücüleri, uygulamaların
cihazlarla 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ı sorunlu
olabiliyordu 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 son
bilgileri elde etmektir.
• Bedeller: USB–IF tarafından sunulan belirtim (spesifikasyon), web sitesinden ücretsiz
olarak 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 sahip
olmayı gerektirir ve bunun da belli bir bedeli vardır (Axelson 2005).
8
2.1.2. USB protokolü
USB seri, paralel vb. gibi diğer arabirimlere göre daha karmaşık bir iletişim protokolüne
sahiptir. Bu yüzden USB arabirimi ile dizayn edilecek bir cihazın belirli
gereksinimlerinden söz edilecektir.
2.1.2.a. USB bileşenleri
USB’nin başlıca bileşenleri şunlardır:
• USB Karargâhı (Host): USB karargâh platformu, USB karargâh denetleyicisinin
kurulduğ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ın
takılıp sökülmesi, karargâh ile cihazlar arasındaki veri akışının ve kontrolünün
yö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, USB
karargâhıyla haberleşebilmesi için kullanılan cihazlara göbek (hub) denir. Karargâhın
arka alanında bulunan göbekler kök göbek (root hub) olarak adlandırılır. Diğer göbekler
ise harici göbekler (external hubs) olarak adlandırılır.
• USB Cihaz (Device): USB yolu üzerinden veri ya da kontrol bilgisi ileten veya alan
aygıtlara USB cihaz adı verilir (Şahin vd 2006).
2.1.2.b. USB cihazlarda veri akışı
USB, karargâhla cihazların birbirleri arasında haberleşebilmeleri için bir protokol
sağ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
9
karargâhla olan haberleşmeleri, karargâh üzerindeki yazılım hafıza tamponları ile
cihazların son uçları arasına kurulan sanal borular yordamıyla birebir gerçekleştirilir.
USB yolundaki veri akışı yarı çift-yönlüdür (half-duplex), yani belirli bir zaman
zarfında veri sadece bir yönde taşınabilir (Tan 1997).
Büyük USB borusu (12 Mb/s)
USB Karargâh
Küçücük borular
Son uçlar
Bağ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 (127
adete 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 onu
yapı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) toplamda
32 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ığın
tipi veri iletişiminde kullanılırken, mesaj boruları sadece kontrol veri iletişiminde
kullanı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 veri gönderecektir, karargâhtan OUT alıntısı alırsa, karargâh veri gelmesini
bekleyecektir (Tan 1997).
10
USB Alıntısı
(Token)
PC
USB Karargahı
— Hedef cihaz adresi
— Son uç numarası
— Veri iletişim yönü
USB Cihaz
Şekil 2.2. USB veri hareketi
Son uç, karargâhla cihaz arasında yapılan haberleşmede veri akışının kaynak tarafında
ya 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ü son
ucu destekler. Her tek-yönlü son uç gelen veya giden transfer işleminde kullanılabilir.
2.1.2.c. USB veri transfer tipleri
USB cihaz, karargâh üzerindeki hafıza tamponu ile cihaz üzerindeki son uç arasındaki
boru üzerinden karargâh ile haberleşir. USB spesifikasyonu dört veri transfer tipini
desteklemektedir. Belirli bir son uç için veri transfer tipi seçimi cihazın ve yazılımın
gereksinimlerine göre seçilmektedir. Bu seçim son uç tanımlayıcıda seçilmektedir
(Axelson 2005).
Eşzamanlı (Isochronous) transfer
Büyük miktarlardaki verinin (1023 bayt’a kadar), bilgisayar ile çevrebirim arasında
periyodik ve sürekli bir şekilde iletilmesini sağlayan transfer tipidir. Zaman açısından
kritik olan ama hataya karşı hassas olmayan akan veri (streaming data) iletiminde
kullanılır. Örneğin USB kamera ya da ses kartları gibi. Sabit bir bant genişliği
sağlanarak küçük hatalara izin verilirken veri akışının kesilmemesi sağlanır.
11
Eşzamanlı borusu tek yönlü bir borudur, yani belirli bir son uç sadece veri iletir veya
veri 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 transfer
Yığın tipi transfer ise büyük miktarlardaki verinin aktarımı için kullanılan bir veri
transfer tipidir. Taşınacak verinin alıcı kısmında doğru bir biçimde alınması garanti
edilirken, verinin iletim zamanı konusunda garanti verilemez. Tipik olarak, yazıcı ve
tarayı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ü bir
yığı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ız
USB cihazlarda kullanılabilir. Yığın son uçları için maksimum veri paketi boyutu, tam
hızlı cihazlar için 8, 16, 32 veya 64 bayt, yüksek hızlı cihazlar için ise sadece 512
bayttır (Axelson 2005).
Kesme (Interrupt) tipi transfer
Ani reaksiyon gerektiren fare ya da klavye ile iletişimde kullanılır. Diğer veri
transferlerine göre daha düşük miktarlardaki verinin, zaman ve verinin doğruluğu
garanti altına alınarak iletilmesi için kullanılır. Örneğin, bilgisayara bağlı bir fare ile
yapılan veri 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 veri paketi boyutu, düşük
hızlı cihazlar için 8 bayt veya daha az, tam hızlı cihazlar için 64 bayt veya daha az ve
yüksek hızlı cihazlar için ise sadece 1,024 bayt veya daha azdır (Axelson 2005).
12
Kontrol (Control) tipi transfer
PC ile USB arasında kurulum, ilk değerlerin atanması ve konfigürasyon bilgilerinin
taşı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 veri akışını
desteklemektedir. Kontrol son uçları için maksimum veri 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ı cihazlar
için ise sadece 64 bayttır.
1400
1216
1200
1000
1023
832
800
Tam Hız
KByte/s
600
Düşük Hız
400
200
24
64 0,8
0
Kontrol
Kesme
Yığın
Eşzamanlı
Şekil 2.3. USB veri iletişim tiplerinin teorik olarak taşıyabilecekleri maksimum veri
büyüklüğü
USB veri iletişim tiplerinin taşıyabilecekleri veri miktarı açısından karşılaştırılması
Şekil 2.3’te grafiksel olarak verilmiştir (Axelson 2005).
2.1.2.d. USB sürücüleri
Win32 sürücü modeli (WDM, Win32 Driver Model) Windows sürücü sisteminin
temelini oluşturur. Bu modelde donanım ile iletişim işlemi çeşitli katmanlara
ayrılmıştır. Uygulama katmanında yazılım ile ilgilenenlerin tanıdığı API (Application
Program Interface) çağrıları yer alır. API çağrıları WDM içerisinde yer alan hazır
tanı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 USB
cihazlarına ilişkin güç, sayma (enumeration) ve çeşitli bilgi alışverişi işlemlerini
meydana getirir. Daha aşağıdaki USB denetleyici sürücüsü ise bilgisayar içerisindeki
USB donanımına doğrudan erişimi sağlar. Bu sürücüler Windows içerisinde mevcuttur
(Soydaş 2002).
Uygulama Kodu
Kullanıcı Tanımlı
Sürücüler
Sınıf Sürücüleri
USB Yol
Sürücüsü
USB Denetleyici
Sürücüsü
USB Donanımı
Şekil 2.4. USB sürücü modeli
2.1.2.e. USB konfigürasyonu
Bir USB fonksiyonu başlatılmadan önce, cihaz konfigürasyonu yapılmalıdır. Karargâh,
yapılandırmayı, USB cihaz üzerinden veri sağlama yoluyla almış olduğu bilgilerle
gerçekleştirir. USB cihazlar, işlevlerini tanımlayıcılar (decriptors) ile karargâha rapor
ederler. Tanımlayıcı, hangi verinin 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ği
gibi her cihaz bir veya daha çok konfigürasyona, her konfigürasyon bir veya daha çok
arabirime ve her arabirim sıfır veya daha çok son uca sahiptir (Microchip Technology
Inc. 2004).
Cihaz Tanımlayıcı
Konfigürasyon Tanımlayıcı
Arabirim Tanımlayıcı
Son Uç Tanımlayıcı
Konfigürasyon Tanımlayıcı
Arabirim Tanımlayıcı
Son Uç Tanımlayıcı
Şekil 2.5. Tanımlayıcı hiyerarşisi
Cihaz tanımlayıcısı
Cihaz tanımlayıcısı, üretici kimliği (VID, Vendor Identity), ürün kimliği (PID, Product
Identity), seri numarası, cihaz sınıfı ve konfigürasyon sayısı gibi genel bilgiler verir.
Daha önce de belirtildiği gibi her cihaz için sadece bir cihaz tanımlayıcı vardır.
15
Konfigürasyon tanımlayıcısı
Konfigürasyon tanımlayıcı, cihazın güç gereksinimleri ve belirli bir konfigürasyonda
kaç farklı arabirimin destekleneceği bilgilerini verir. Bir cihaz için birden fazla
konfigü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 verir. 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 verir.
Bir USB cihazı birçok son uca sahip olabileceği gibi, son uçlar farklı konfigürasyonlar
tarafından paylaşılmış olabilir.
2.2. PIC Mikrodenetleyiciler
2.2.1. PIC nedir?
Microchip Technology firması tarafından üretilen mikrodenetleyici yongaları PIC
“Çevresel Arabirim Denetleyicisi” olarak adlandırılmaktadır ve programlanabilen
arabirim 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ındaki
yükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu
16
için geliştirilmiştir. Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54, bu ihtiyacın
ilk meyvesidir.
PIC mikrodenetleyiciler hızlı çalışmaları amacıyla RISC (Reduced Instruction Set
Computer) işlemciler olarak tasarlanmışlardır. Bu mimari biçiminde program kodları ve
veriler farklı bellek blokları içerisinde bulunmaktadır. Her bir komut çevriminde hem
program hem de veri 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ılan
programların verileri 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ğer
mikrodenetleyicilere göre olan avantajları göz önüne alınmıştır. Bu avantajlar maddeler
halinde incelenmiştir:
• Kod verimliliği: PIC, Harvard mimarisi temelli 8 bit'lik bir mikrodenetleyicidir. Bu,
bellek ve veri için ayrı yerleşik bus'ların bulunduğu anlamına gelir. Böylelikle akış
miktarı veriye ve program belleğine anında erişim sayesinde arttırılmış olur. Geleneksel
mikrodenetleyicilerde veri ve programı taşıyan bir tek yerleşik bus bulunur. Bu, PIC ile
karşı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 veri kısmına atlamaya ve veriyi komut gibi çalıştırmasına gerek
yoktur. Bu 8 bit'lik bus kullanan ve Harvard mimarisi temelli olmayan
mikrodenetleyicilerde 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 kolay
mikrodenetleyicilerdir.
17
• Hız: PIC’ler oldukça hızlı mikrodenetleyicilerdir. Her bir komut döngüsü sadece
1ms’lik zaman zarfında gerçekleştirilebilmektedir. Örneğin 5 milyon komutluk bir
programın, 20 MHz bir kristalle adımlanması yalnızca 0,25 saniye sürer. Bu süre 386
SX 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 saati
durdurduğunuzda, tüm kaydedici içeriği korunur. Pratikte bunu tam olarak
gerçekleştirmeniz mümkün değildir. PIC' i uyutma moduna getirdiğinizde, saat durur ve
PIC' e uyutma işleminden önce hangi durumda olduğunu size hatırlatacak çeşitli
bayraklar kurar. PIC uyuma modunda yalnızca 1 mA'dan küçük değere sahip bekleme
akımı çeker.
• Yazılım: PIC mikrodenetleyicileri programlamak için gerekli yazılım Microchip
firması tarafından internet vasıtasıyla ücretsiz olarak sağlanmaktadır. Bunun yanı sıra
Basic ve C dili benzeri (PicBasic, Pic–C, JAL vb.) dillerle programlanabilmeleri
nedeniyle karmaşık sistem dizaynında programlamayı kolaylaştırmaktadırlar (Kızılbey
2005).
PIC mikrodenetleyicilerinin bu avantajlarının yanı sıra kolay bulunabilmeleri, ucuz
olmaları, geniş bir kullanıcı kitlesinin bulunması nedeniyle bol miktarda örnek
programın internet aracılığıyla paylaşılması, Microchip firmasının web sitesinden elde
edilebilecek
uygulama
kullanılabilmesi
gibi
programlarının
avantajları,
bu
yazılım
geliştirmede
projede
PIC
örnek
olarak
mikrodenetleyicilerinin
kullanı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
18
PIC18F2455/2550/4455/4550 mikrodenetleyicilerden biri olan PIC18F4550, birçok
özelliğiyle kendi üretim grubundaki mikrodenetleyicilerden de üstündür. PIC18F Tam
Hız ailesi mikrodenetleyiciler çok geniş bir kullanım alanına sahiptir :
• Endüstriyel uygulamalar (üretim cihazları, veri 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ı, uzaktan
kumanda 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ı) (Chandler
2004).
USB aracılığıyla veri toplama (data acquisition) amacıyla elektronik piyasasına sürülen
PIC18F4550, 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 veri toplama amaçlı üretilen tek mikrodenetleyici PIC18F4550
değildir. Atmel AVR-USB, Cypress EZ-USB, Cypress EnCoRe II, Freescale
MC68HC908JB16, Freescale MCF5482 ColdFire, Microchip 16C745/765 ve Texas
Instruments, Silicon Laboratories firmalarının üretmiş olduğu birçok mikrodenetleyici
mevcuttur. 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ın
kullanılmayan ürünlerdir.
19
PIC mikrodenetleyicilerinin avantajları ile PIC18F4550’nin avantajları bir araya
getirildiğinde, proje için en uygun seçimin PIC18F4550 mikrodenetleyici olduğu
sonucuna varılmıştır.
2.3. PIC18F4550 Özellikleri ve Yapısı
2.3.1 PIC18F4550
PIC18F4550 diğer tüm PIC18 ailesi mikrodenetleyicilerinin sahip olduğu gibi ucuz
olmasının yanında yüksek hesaplama performansı ile birlikte yüksek dayanıklılığa ve
geliştirilmiş Flash program hafızasına sahiptir. Aynı zamanda PIC18F4550’nin
dizaynında
yapılan
geliştirmelerle,
yüksek
performanslı
ve
güç
hassasiyetli
uygulamalarda 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 veri transfer tiplerini destekler.
• 32 uç noktasına kadar destek verir. (16 iki-yönlü)
• USB için çift erişimli 1 Kbayt’lık RAM’e sahiptir.
• Yonga üzeri USB alıcı-vericisi ve voltaj regülatörüne sahiptir.
• Harici USB alıcı-vericileri için arabirime sahiptir.
• USB duraksız transferler için Duraksız Paralel Port’a (SPP) sahiptir.
20
Güç 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 V
Esnek 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
Receiver
Transmitter/Evrensel Senkron Asenkron Alıcı Verici) modülüne sahiptir. Bu sayede
LIN (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 I2C
(Inter–Integrated Circuit) ana–uydu modlarını desteklemektedir.
• 13 adet elde etme zamanı programlanabilir 10–bitlik Analog/Dijital çevirici girişine
sahiptir.
• 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 mimariye
ulaştırılmıştır.
• 100 000 yazma/silme kapasitesine sahip geliştirilmiş Flash program hafızasına
sahiptir.
• 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 verilecek 5 Voltluk tek bir kaynakla ICSP (In-Circuit Serial
Programming) sağlanır.
• Geniş bir çalışma voltaj aralığına sahiptir. (2,0 V–5,5 V)
2.3.1.a. USB desteği
PIC18F4550, USB 2,0 versiyonu ile çalışabilecek şekilde tam donanımlı bir haberleşme
modülüne sahiptir. Bu modül, tüm desteklenen veri transfer tiplerinde hem düşük – hız
22
hem de tam–hızda çalışabilecek şekilde dizayn edilmiştir. Kendi üzerindeki USB alıcıvericisi ve 3,3 Volt regülatör ile harici USB alıcı-vericileri ve regülatörleri
desteklemektedir. PIC18F4550’nin projede kullanılmasının temel nedeni USB
desteğidir. Microchip Technology firması tarafından PIC18F ailesi olarak adlandırılan
gruptaki
PIC18F2455/2550/4455/4550
tüm
mikrodenetleyicilerin
USB
desteği
bulunmaktadır (Microchip Technology Inc. 2004).
2.3.1.b. Çoklu osilatör seçenekleri ve özellikleri
PIC18F4550, 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 veya
seramik rezonatörlerle gerçekleştirilebilecek olan dört kristal modu, dört harici saat
modu, 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 özellikleri
PIC18F4550 mikrodenetleyicisi 32 kbayt’lık Flash memory’e, 2 kbayt’lık SRAM’e ve
256 bayt’lık EEPROM’a sahiptir. Ayrıca, Microchip Technology firması tarafından
geliş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
verileri 40 yıla kadar hafızasında tutabilmektedir.
PIC18F4550’nin
en
önemli
avantajlarından
biri
de
32
kbayt’lık
kendisini
programlayabilme ö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
verilmiş olur (Microchip Technology Inc. 2004).
23
2.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çin
kullanılacaksa bacağı oraya yönlendiren multiplexer (çoklayıcı) bulunmaktadır.
Giriş/çıkış portlarının bazı bacakları kullanılan çevrebirimin özelliklerine göre alternatif
bir 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 (veri yönünü belirleyen yazmaçtır)
• LAT Kaydedicisi (çıkış mandalı)
24
I/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 nedenle
daha yüksek frekanslı veri giriş/çıkışı yapılmasına uygundur.
• ST yapılı uçlarda ‘0’ ve ‘1’i belirleyen gerilim aralıkları birbirinden uzaktır. Bir uçtan
girilen 0 – 1 Volt arasındaki gerilimler “0”, 4–5,5 Volt arasındaki gerilimler “1” olarak
algı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. Bir
uçtan girilen 0–2 Volt arasındaki gerilimler “0”, 2–5,5 Volt arasındaki gerilimler “1”
olarak algılanır.
PORTA
PORTA, 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ış olarak
belirlenir. PORTA tamponlanmıştır, yani bir veri gönderilene kadar eski veri PORTA
kaydedicisinde tutulur. LATA kaydedicisi de hafıza eşlemelidir. LATA kaydedicisi,
PORTA için mandallanmış çıkış verilerini okur ve yazar.
RA4 bacağı Timer0 girişi ile çoklanmıştır ve RA4/TOCKI bacağı haline gelmiştir. RA4
aynı zamanda USB modülü ile de çoklanmış olup, harici bir USB alıcı-vericisinden
gelen 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 ana
osilatör girişi olarak seçilebilir.
25
PORTA bacaklarının çoğu, VREF+, VREF- ve karşılaştırıcı referans çıkış voltajı gibi
analog 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 verilmiştir (EK 1).
PORTB
PORTB, 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ış olarak
belirlenir. LATB kaydedicisi de hafıza eşlemelidir. LATB kaydedicisi, PORTB için
mandallanmış çıkış verilerini okur ve yazar.
PORTB bacaklarından dördü (RB4, RB5, RB6 ve RB7) giriş olarak seçildiklerinde
kesme değiştirme özelliğine sahip olurlar. RB2 ve RB3 bacakları harici USB alıcıvericileri için fark sinyali çıkışları olarak çoklanmışlardır. RB4 bacağı aynı zamanda
Duraksı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 verilmiştir (EK 2).
PORTC
PORTC 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
26
belirlenir. LATC kaydedicisi de hafıza eşlemelidir. LATC kaydedicisi, PORTC için
mandallanmış çıkış verilerini okur ve yazar.
PORTC öncelikle EUSART, MSSP ve USB modüllerini de içine alan seri haberleşme
modülleri ile kullanılmak üzere çoklanmıştır. RC4 ve RC5 bacakları dışında PORTC
Schmitt Trigger giriş tamponları kullanır.
RC4 ve RC5 bacakları USB modül ile çoklanmıştır. USB modülünün konfigürasyonuna
bağlı olarak, entegre üzerindeki USB alıcı-vericisi için fark veri hatları olarak ya da
harici bir USB alıcı-vericiden gelen veri girişleri olarak kullanılabilirler. RC4 ve RC5
diğ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; veri yönü, konfigürasyon
tarafından ve USB modülünün belirlenen bir zamandaki durumuna göre belirlenir. Eğer
harici bir USB alıcı-verici kullanılmışsa, RC4 ve RC5 her zaman vericiden gelen
girişler olarak görev yaparlar. Eğer entegre üzerindeki alıcı-verici kullanılmışsa, veri
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 verilmiştir (EK 3).
PORTD
PORTD, 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ış olarak
belirlenir. LATD kaydedicisi de hafıza eşlemelidir. LATD kaydedicisi, PORTD için
mandallanmış çıkış verilerini okur ve yazar.
27
PORTD’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 verilmiştir (EK 4).
PORTE
PORTE, 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ına
sahiptir. Bu bacaklar analog giriş olarak seçildiklerinde ‘0’ları okuyacaklardır. Hangi
bit’in giriş hangi bit’in çıkış olacağı TRISE kaydedicisi tarafından belirlenir. TRISE
kaydedicisinde “1” olarak belirlenen bit’lerin karşılığındaki PORTE bacakları giriş, “0”
olarak belirlenen bit’lerin karşılığındaki PORTE bacakları çıkış olarak belirlenir. TRISE
RE bacakları analog girişler olarak kullanıldıklarında yönlerini kontrol eder. LATE
kaydedicisi de hafıza eşlemelidir. LATE kaydedicisi, PORTE için mandallanmış çıkış
verilerini okur ve yazar.
PORTE’nin dördüncü bacağı (MCLR/VPP/RE3) sadece giriş bacağıdır. Bu bacağın
işlevi MCLRE kontrol biti tarafından kontrol edilir. Eğer MCLRE = 0 seçilirse bu bacak
dijital giriş olur ve TRIS veya LAT kaydedicilerinin bitlerine sahip olmaz, MCLRE = 1
seçildiğinde ise görevi cihazın Master Clear (Ana Temizleme) girişi olur. Her iki
konfigürasyonda da, RE3 aynı zamanda programlama esnasında programlama voltaj
girişi olarak görev yapar (Microchip Technology Inc. 2004).
E Portuna ait bacaklar ve işlevleri Çizelge 2.7’de verilmiştir (EK 5).
28
2.3.3. PIC18F4550 osilatör özellikleri
PIC18F4550’nin de içinde bulunduğu PIC18F Tam Hız ailesi, daha önceki PIC18F tipi
cihazlardan farklı bir osilatör ve mikrodenetleyici saat sistemine sahiptirler. USB
modülünün eklenmesiyle, USB alçak-hız ve tam-hız için dengeli bir saat kaynağına
ihtiyaç duyulmuştur. Bu gereksinimleri karşılamak üzere, PIC18F4550 ve içinde
bulunduğu
ailedeki
tüm
mikrodenetleyicilere,
USB
tam-hız
işlemini
gerçekleştirebilecek 48 MHz bir saat kısmı eklenmiştir. Diğer tüm osilatör özellikleri
PIC18 geliştirilmiş mikrodenetleyicilerindekilerle aynı bırakılmıştır. Şekil 2.7’de
PIC18F4550’nin saat diyagramı görülmektedir (Microchip Technology Inc. 2004).
Şekil 2.7. PIC18F4550 saat diyagramı (Microchip Technology Inc. 2004)
29
2.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 Tipleri
PIC18F4550 on iki farklı osilatör modunda çalıştırılabilir. Kullanıcılar FOSC3:FOSC0
konfigürasyon bitlerini ayarlayarak bu on iki osilatör tipinden birini seçebilir:
1. XT
Kristal/Rezonatör
2. XTPLL
Kristal/Rezonatör (PLL seçili)
3. HS
Yüksek – Hız Kristal/Rezonatör
4. HSPLL
Yüksek – Hız Kristal/Rezonatör (PLL seçili)
5. EC
Harici Saat FOSC/4 çıkışı ile
6. ECIO
Harici Saat RA6 üzerindeki I/O ile
7. ECPLL
Harici Saat (PLL seçili) ve RA6 üzerindeki FOSC/4 ile
8. ECPIO
Harici Saat (PLL seçili) RA6 üzerindeki I/O ile
9. INTHS
Dâhili Osilatör (mikrodenetleyici saat kaynağı olarak
kullanılır, HS osilatör USB saat kaynağı olarak kullanılır.)
10. INTXT
Dâhili Osilatör (mikrodenetleyici saat kaynağı olarak
kullanılır, XT osilatör USB saat kaynağı olarak kullanılır.)
11. INTIO
Dâhili Osilatör (mikrodenetleyici saat kaynağı olarak
kullanı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ğı olarak
kullanılır, EC osilatör USB saat kaynağı olarak kullanılır,
RA6 üzerindeki FOSC/4 ile.)
30
Harici saat girişi
EC, ECIO, ECPLL ve ECPIO Osilatör modları OSC1 bacağına bağlanabilmek için
harici bir saat kaynağına ihtiyaç duyarlar. EC ve ECPLL Osilatör modlarında, OSC1
bacağı üzerindeki osilatör frekansı 4’e bölünür. ECIO ve ECPIO modları da EC ve
ECPLL’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. Bu
devre, özellikle USB’nin daha alçak hızlı osilatörleri ile olan uygulamalarında ve
mikrodenetleyici için bir saat kaynağı olarak kullanılabilmektedir.
PLL; HSPLL, XTPLL, ECPLL ve ECPIO Osilatör modlarında aktiftir. Sabitlenmiş 4
MHz’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ür
ve kullanılır (Microchip Technology Inc. 2004).
Dâhili osilatör bloğu
PIC18F4550 mikrodenetleyici, saat kaynağı olarak kullanılmak üzere iki farklı saat
sinyali ü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ği
gibi, 31 kHz ila 4 MHz arasında ürettiği saat frekansları ile de kullanıcıya opsiyonlar
sunmaktadır (Microchip Technology Inc. 2004).
31
Diğ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 48
MHz’lik bir saat frekansı gerekmektedir. Bu nedenle osilatör frekansının seçimi ve
cihazın programlanması noktalarına dikkat edilmelidir.
Alçak–Hız modu için gereken USB saati, direkt olarak PLL’den değil birincil osilatör
zincirinden elde edilir ve 4’e bölünerek 6 MHz’lik saat darbesi üretilir. Bu yüzden, USB
modül aktifken ve denetleyici saat kaynağı birincil osilatör modlarından (XT, HS veya
EC, PLL ile birlikte veya değil) biri iken, mikrodenetleyici sadece 24 MHz’lik saat
frekansını kullanabilir. Bu kısıtlama mikrodenetleyici ikincil osilatör veya dâhili
osilatör bloğunu saat kaynağı olarak kullanıyorsa uygulanamaz.
2.3.3.b. PIC18F4550’de reset (sıfırlama) işlemi
PIC18F4550’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 iki
sıfırlamadan türetilmiştir (Microchip Technology Inc. 2004).
MCLR ile sıfırlama
MCLR bacağı cihazı dışarıdan sıfırlama için geliştirilmiş metotlarından birisidir. MCLR
girişine 5 Volt uygulandığı sürece program normal akışına devam eder. MCLR’ye 0
32
Volt uygulandığı anda sıfırlama gerçekleşir. MCLR girişinde bulunan bir filtreleme ile
parazit gerilimlerin programı sıfırlaması engellenmiştir. Yine de girişin bir kondansatör
ile daha kararlı hale getirilmesi parazitlerin yoğun olduğu durumlarda gereklidir.
Enerji verildiğinde sıfırlama (POR, Power–On Reset)
PIC, VDD geriliminde gerilim yükselmesi algılandığında kaydedicileri hazır hale
getirmek için kendi kendisine sıfırlama yapar. POR devresinin avantajı, MCLR
bacağının bir direnç (1kΩ–10 kΩ) üzerinden VDD’ye bağlanmasıdır. Bu sayede harici
RC 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 şekilde
boşalması için kullanılmıştır. R direnci, cihazın elektriksel karakteristiklerinde bir
bozulmaya 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 elektrostatik
boş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
33
sıfırlanması en iyi çözümdür. BOR, BORV1:BORV0 ve BOREN1:BOREN0
konfigürasyon bitleri tarafından kontrol edilmektedir(Microchip Technology Inc. 2004).
2.3.3.c. PIC18F4550 hafıza organizasyonu
PIC18F 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 veri 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. EEPROM
hafı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 sayesinde
16 384 adet tek-kelimelik komutu hafızasında saklayabilir. PIC18F4550 iki adet kesme
vektörüne sahiptir. Sıfırlama vektör adresi 0000h ve kesme vektörleri adresleri 0008h
ve 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 olarak
adlandırılır. Data hafızasındaki her kaydedici 12-bitlik bir adrese sahiptir, böylece 4096
baytlık bir veri hafızasına izin verirler. 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. Data
hafı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 tipi
kaydediciler veri saklama ve kullanıcı uygulamalarında karalama bloknotu gibi
işlemlerde kullanılır.
PIC18F4550 mikrodenetleyicisi için veri 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 bir
bellektir. PIC18F4550, 32768 adet 16-bitlik program verisi alabilecek Flash program
hafızasına sahip bir mikrodenetleyicidir (Microchip Technology Inc. 2004).
2.3.3.d. PIC18F4550 CCP (Capture/Compare/PWM) modülleri
Capture/Compare/PWM (CCP) modülleri; yakalama, karşılaştırma ve Darbe Genişlik
Modü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. Her
bir CCP modülü;16 bit’lik yakalama kaydedicisi, 16 bitlik karşılaştırma kaydedicisine
veya PWM kaydedicinse sahiptir. PIC18F Tam Hız ailesindeki 28-bacaklı cihazlar iki
standart 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 (CCP1
veya ECCP) sahiptir. ECCP modülü ayrıca incelenecektir. Bu bölümde incelenecek
CCP ise standart CCP modülüdür (Microchip Technology Inc. 2004).
PWM (Darbe Genişlik Modülasyonu) modu
PWM modunda, CCPx bacağı 10-bit çözünürlükte PWM çıkışı üretir. Bilindiği gibi
CCP2 bacağı PORTB veya PORTC veri mandallarından biriyle çoklandığından, PWM
modunda 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. CCP1
modü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 gibi
olanaklar sağlamaktadır. Standart Yakalama/Karşılaştırma/PWM modu olan CCP2’den
farkı, 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ıya
sahiptir. ECCP modülü ayrıca, Geliştirilmiş PWM işlemi ve otomatik kapanma
özelliklerini yerine getirebilmesi amacıyla geliştirilmiş olan ECCP1DEL (Ölü-Bant
37
Gecikmesi) ve ECCP1AS (Otomatik Kapanma Konfigürasyonu) kaydedicilerine
sahiptir (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
verir. 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. ADCON1
kaydedicisi, port bacaklarının işlevlerini yapılandırır. ADCON2 kaydedicisi, A/D saat
kaynağı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ğı (VDD ve
VSS) olarak veya RA3/AN3/VREF+ ve RA2/AN2/VREF-/CVREF bacaklarında gerilim
seviyesi olarak seçilebilir.
A/D modülünün en önemli özelliklerinden biri de işlem yapmazken uyku moduna
geçmesidir. Uyku modunda iken A/D modülü için saat sinyali dâhili RC osilatöründen
sağlanır.
A/D çevirici için kullanılan her port bacağı analog giriş veya dijital giriş/çıkış olarak
yapılandırılabilir. Dijital bilgiye dönüşen analog sinyalin karşılığı ADRESH ve
38
ADRESL
kaydedicilerine
yazılır.
A/D
çevirme
işlemi
bittiğinde
sonuçlar
ADRESH: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
verildiğinde Sıfırlama) için değiştirilmemiştir. Bu yüzden ADRESH:ADRESL
kaydedicileri POR tipi bir sıfırlama işleminden sonra bilinmeyen bir veri 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ş
39
kanallarının TRIS bitlerinin set edilmesiyle gerçekleştirilir. Elde edim zamanı sona
erdikten sonra A/D dönüştürme işlemi başlatılabilir. A/D dönüştürme işlemi şu adımlar
uygulanarak 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 et
3.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 bitini
sıfırla.
7.Eğer gerekiyorsa, yeni bir dönüştürme için 1.veya 2.adıma geri dön
40
2.3.4.a. A/D dönüşüm için gereksinimler
Belirlenmiş doğruluğu karşılaştırmak için A/D çeviricinin CHOLD kondansatörü giriş
gerilimine şarj olması beklenmelidir. CHOLD kondansatörü kaynak empedansı (RS) ve
örnekleme anahtarı iç direnci (RSS) üzerinden şarj olur. Anahtar iç direnci, kaynak
geriliminin (VDD) değerine göre değişir. Analog kaynaklar için tavsiye edilen
maksimum empedans 2,5 kΩ’dur. Analog giriş bacağı seçildikten sonra dönüştürme
iş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ş modeli
Mikrodenetleyicinin analog sinyali minimum algılama zamanı şu şekilde hesaplanır:
TACQ = TAMP + TC + TCOFF
TACQ
TAMP
TC
TCOFF
= Analog sinyali minimum algılama zamanı
= Yükseltme gecikme zamanı
= CHOLD şarj zamanı
= Sıcaklık katsayısı
41
2.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 edim
zamanını seçme izni verir. Aynı zamanda kullanıcılara otomatik olarak hesaplanan elde
edim zamanı seçeneğini de sunar.
Elde edim zamanı ACQT2:ACQT0 bit’lerinin (ADCON2<5:3>) set edilmesiyle
ayarlanabilir. TAD bit başına A/D dönüşüm zamanı olarak tanımlandığında, bu bitler 2
TAD’den 20TAD’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 otomatik
olarak 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 sona
erdiğinde GO/DONE bit’i sıfırlanır, ADIF bayrağı set edilir ve A/D modül o anda seçili
olan kanalı tekrar örneklemeye başlar (Microchip Technology Inc. 2004).
2.3.4.c. A/D dönüşümü için saat kaynağı seçimi
TAD, bit başına A/D dönüşüm zamanı olarak tanımlanmıştır. 10-bit A/D dönüşümü için
11 TAD periyodu gerekir. A/D dönüşümü saat kaynağı yazılımla seçilebilmektedir. TAD
seçimi için mümkün olan yedi farklı seçenek vardır:2 TOSC, 4 TOSC, 8 TOSC, 16 TOSC, 32
TOSC, 64 TOSC ve Dâhili A/D modülü RC Osilatörü.
A/D dönüşümünün doğru olarak yapılabilmesi için, TAD zamanı mümkün olduğunca
kısa fakat minimum TAD değerinden büyük seçilmelidir. Çizelge 2.8’de TAD zamanları
için maksimum işlem frekansları verilmiştir (Microchip Technology Inc. 2004):
42
Çizelge 2.8. TAD zamanları için maksimum işlem frekansları
A/D Saat Kaynağı (TAD)
Maksimum İşlem
İşlem
ADCS2:ADCS0
Frekansı
2 TOSC
000
2.86 MHz
4 TOSC
100
5.71 MHz
8 TOSC
001
11.43 MHz
16 TOSC
101
22.86 MHz
32 TOSC
010
40.0 MHz
64 TOSC
110
40.0 MHz
RC(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 modunda
olmalıdır veya A/D doğruluğu belirtimlerin dışında olmalıdır.
(2)
RC kaynağı için tipik TAD zamanı 4 ms’dir.
2.3.4.d. Analog port bacaklarını yapılandırma
ADCON1, 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 set
edilmesine (giriş) ihtiyaç duyarlar. TRIS bit’i sıfırlanmış ise (çıkış), dijital çıkış
seviyesine (VOH veya VOL) 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<2>) set edilmesi ve
ACQT2:ACQT0 bit’lerinin sıfırlanmasıyla, nasıl dijital bilgiye dönüştürüldüğünün
zamanlama diyagramı verilmiş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ından
CHOLD kondansatörünün analog girişle olan bağlantısı, A/D dönüşüm işlemi bitene kadar
kesilir.
43
Şekil 2.14. A/D dönüşüm TAD zaman diyagramı (ACQT<2:0> = 000, TACQ = 0)
Şekil 2.15’te ise, dönüşüm başlamadan GO/DONE biti set edilmiş, ACQT2:ACQT0
bitleri ‘010’a set edilmiş ve 4 TAD’lik elde edim zamanı için A/D dönüştürücünün
işlemini göstermektedir.
Şekil 2.15. A/D dönüşüm TAD zaman diyagramı (ACQT<2:0> = 010, TACQ = 4 TAD)
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ün
bilgilerini içereceklerdir. Yeni bir veri sağlama işleminin başlatılabilmesi için, A/D
dönüşümün tamamlanmasından veya durdurulmasından itibaren 2 TAD süresi kadar
beklemek gerekir. Bu beklemeden sonra, seçili kanaldan veri sağlama otomatik olarak
başlayacaktır (Microchip Technology Inc. 2004).
44
2.3.5. PIC18F4550 USB modülü
PIC18F4550, USB karargâh ile PIC mikrodenetleyicisi arasında hızlı bir iletimi
sağlamak amacıyla, alçak–hız ve tam–hız uyumlu USB Seri Arabirim Motoruna (Serial
Interface Engine, SIE) sahiptir. SIE, dâhili USB alıcı-vericisi üzerinden veya
bağlanabilecek harici bir USB alıcı-vericisi üzerinden USB için direk bir arayüz olarak
kullanılabilir. Aynı zamanda 3,3 V’luk dâhili regülatör, 5 V’luk uygulamalarda dâhili
alıcı-verici için güç kaynağı olarak mevcuttur (Microchip Technology Inc. 2004).
Performansı artırmak için bazı özel donanım özellikleri bulunmaktadır. Cihazın veri
hafıza alanında bulunan çiftli port hafızası (USB RAM), mikrodenetleyici ile SIE
arasında direkt hafıza erişiminin paylaşımını sağlayacaktır. USB RAM alanındaki son
uç hafıza kullanımının, kullanıcı tarafından serbestçe programlanabilmesi için tampon
tanımlayıcılar sağlanmıştır. Ayrıca SPP desteği sayesinde, eşzamanlı transferde olduğu
gibi büyük miktarlardaki verinin kesintisiz biçimde harici hafıza tamponlarına iletilmesi
sağ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. Bu
kaydediciler:
• 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)
45
2.3.5.b. USB kontrol kaydedicisi (UCON)
USB Kontrol kaydedicisi, transfer işlemleri sırasında modülün davranışını kontrol
edecek bit’leri içerir. Kaydedicinin içerdiği konfigürasyon bitlerinin kontrol ettiği
olgular ş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, veri yolunda oluşabilecek tekli-sonlanmış sıfırı
işaret etmek için kullanılan durum biti içerir, SE0 (UCON<5>). USB modülünün tüm
işlemleri USBEN bit’i (UCON<3>) tarafından kontrol edilir. Bu bit’in set edilmesi ile
modül aktif hale gelir ve aynı zamanda yonga üzerindeki voltaj regülatörünü aktif hale
getirir. Kısaca bu bit, USB modülünün sisteme takılıp çıkarılmasını sağlar ve bit
değerinin ‘0’ olması durumunda tüm durum ve konfigürasyon bitleri ihmal edilir.
PPBRST biti (UCON<6>), Çiftli-Tamponlama modunda (pinpon modu) çalışılırken
Sıfırlama durumunu kontrol etmek için kullanılır. PPBRST biti set edildiğinde tüm
pinpon tampon işaretçileri çift tampon olarak set edilir. PPBRST biti kodlama kısmında
sıfırlanabilir.
PKTDIS biti (UCON<4>) SIE’nin paket iletimi ve alımı için kullanılamaz durumda
olduğunu işaret eden bayraktır. Bu bit kurulum işlemine izin verilmesi amacıyla SIE
tarafından set edilir, mikrodenetleyici tarafından set edilemez.
RESUME biti (UCON<2>), USB çevrebirimin Resume sinyalinin uzaktan kumanda
edilerek uyandırma (wake-up) işlemini gerçekleştirebilmesi için kullanılır. Geçerli bir
46
uzaktan kumanda uyandırma işlemi için, kodlama RESUME bitini 10ms için set etmeli
ve sonra sıfırlamalıdır.
SUSPND biti (UCON<1>), USB modülün ve desteklediği devrenin (örneğin voltaj
regülatör devresi) düşük-güç modunda çalışmasını sağlar. Aynı zamanda SIE giriş saat
darbesi 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ı/verici
çıkışları halen boştadır (Idle Modu). VUSB 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âhili
ve/veya harici donanım yapılandırılmalıdır. Yapılandırma işleminin büyük çoğunluğu
UCFG kaydedicisi ile gerçekleştirilmektedir. Ayrı USB voltaj regülatörü konfigürasyon
kaydedicileri tarafından kontrol edilmektedir.
UCFG kaydedicisi, USB modülünün sistem seviye davranışını kontrol eden birçok bit
iç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ı/vericinin seçili kılınması
• Pinpon tamponunun kullanımı (PPB1:PPB0)
47
2.3.6. PIC18F4550 komut seti
PIC18F4550, 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ğlamak
amacıyla genişletilmiş 8 yeni komuta sahiptir.
PIC18 serisi mikrodenetleyicilerin komut setleri, bir önceki PICmicro denetleyicilerinin
komut setlerinin üzerinde birçok geliştirmeler yapılarak oluşturulmuştur. Ancak bu
geliş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 Bit
yönlendirmeli işlemler, kontrol işlemleri ve sade işlemler komut seti (EK 12) ve Çizelge
2.11’de Hafıza işlemleri komut seti ve geliştirilmiş komut setine ait komutlar ve
açıklamaları verilmiştir (EK 13) (Microchip Technology Inc. 2004).
2.3.7. I/O portlarının konfigürasyonu
Devrenin donanımsal olarak yapılandırılmasından sonra, öncelikle PIC18F4550’nin
giriş/çıkış (I/O) portlarının yapılandırılması gerekmektedir. PIC18F4550’nin I/O
portlarının isim ve fonksiyonları EK 1-5’te çizelgeler halinde verilmiştir.
48
3. MATERYAL ve YÖNTEM
3.1. Paralel ve USB Programlama Devresi
Paralel ve USB programlama devresi, PIC18F4550 mikrodenetleyicisi ile analog
sinyallerin ölçülmesi, sayısal giriş-çıkışların kontrolü ve bilgisayar ortamında
gösterilmesi için geliştirilmiştir. Devrenin geliştirilmesi işlemi dört ana kısımda
incelenecektir:
• 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 gerekli
devreler ile Microchip firmasının sunmuş olduğu programlama yazılımı ile PIC’in nasıl
programlandığı
hakkında
bilgiler
verilmiştir.
Genellikle
PIC18F4550
mikrodenetleyicisinin programlanması için üretici firma Microchip’in geliştirdiği
PICDEM FS USB geliştirme kartı kullanılmasına rağmen, bu çalışmada kendi
geliş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.
49
Programlama devresinin programlama kısmının açık devre şeması Şekil 3.1’de
verilmiş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. Bu
konektö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 programlama
devresi, 7407 tampon entegresi ve transistor sürücü devreleri ile PIC’in seri olarak
programlanması için kullanışlı hale getirilmektedir. PIC’in önyüklemesinde ICSP (InCircuit Serial Programming) kullanılmaktadır. Bu programlamada MCLR girişi Vpp
olarak davranır (PIC’in 1 nolu bacağı). Vpp için 13 Vdc 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 diyot
bağlanarak ekstra 1,2 Vdc elde edilir. Böylece 7812 regülatörünün 12 V’luk dc çıkışına
iki adet 1N4148 diyotunun 0,6 V’luk dc çıkışlarının eklenmesiyle toplamda 13,2 V’luk
50
dc bir gerilim elde edilmiş olur. Bu gerilim PIC’in programlanabilmesi için yeterlidir.
Bilgisayarın paralel portunun 8 nolu bacağı (D6 biti) Vpp 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 VDD üzerinden
beslenmekte ve 12. ve 32. bacaklar olan VSS 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 verilen devrede PIC’in önyüklemesinin yapılabilmesi için gerekli asgari
donanı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.
51
Hem paralel konektör programlayıcı hem de Şekil 3.2’de verilen minimum önyükleme
donanımı bir araya getirilerek, Şekil 3.3’deki programlama devresi elde edilmiştir.
Şekil 3.3. Paralel ve USB programlama devresi
3.1.2. Devre elemanları
3.1.2.a. PIC18F4550
PIC18F4550 tüm USB işlevlerini içermesi, analog sinyallerin dijitale çevrilmesi,
dönüştürülen sinyallerin işlenmesi vb. gibi özelliklerinden dolayı devrenin tam
manasıyla kalbidir.
52
3.1.2.b. Osilatör
USB 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ör
kaynağı ile sürülüyordu. PIC18F4550 de ise birincil osilatör USB modülünün bir
parçası
durumuna
gelmiştir
ve
diğer
saat
kaynakları
için
kaynak
olarak
kullanılamamaktadır. Böylece, USB modülü birincil osilatör kaynağı tarafından
tetiklenirken, mikrodenetleyici çekirdeği ve diğer çevrebirimler ikincil veya dâhili
osilatörler tarafından tetiklenmişlerdir. USB’nin zamanlama ihtiyaçları göz önüne
alındığında, USB modülü aktif edildiğinde 6 MHz’ den 48 MHz’e kadar dâhili bir saate
ihtiyaç vardır. İşin güzel yönü, mikrodenetleyici ve diğer çevrebirimlerin birincil
osilatö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) ile
OSC2/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çimde
yürütülebilmesi için, 20 MHz’lik HS tipi kristal osilatör için kullanılması gereken
15pF’lık kondansatörler ve 1MΩ’luk direnç devreye eklenmiştir.
3.1.2.c. USB konektör
Devrede kullanılan USB konektör, standart B-tipi konektördür. Konektörün dört
ucundan ikisi güç iletimi için kullanılan VCC ve GND (toprak) bacakları, diğer ikisi ise
veri iletimi için kullanılan D+ ve D- bacaklarıdır. USB portu, PIC ile bilgisayarın
haberleşmesini sağlaması ve çevrebirimlerden gelen kodlama verilerinin alınıp
gönderilmesinde önemli rol oynamaktadır. Şekil 3.4’te USB-B tipi dişi konektörün
resmi ve bacak durumları gösterilmiştir. Çizelge 3.1’de ise USB için bacak
tanımlamaları verilmiştir.
53
Şekil 3.4. B tipi USB konektör
Çizelge 3.1. USB bacak tanımlamaları
Bacak İsim
Açıklama Kablo rengi
1
VCC
+ 5V DC
Kırmızı
2
D–
Data –
Beyaz
3
D+
Data +
Yeşil
4
GND Toprak
Siyah
3.1.2.d. Güç göstergesi
USB üzerinden devreye güç geldiğinde, güç göstergesi olarak kullanılan kırmızı LED
yanar. USB üzerinden gelebilecek akımın 100 mA ile sınırlı olmasından dolayı, daha
fazla 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 pil
kullanılarak, devre kendi başına kullanılabilecektir (Overholt 2005).
54
3.1.2.e. Sıfırlama ve program butonları
Devrede kullanılan iki buton, PIC18F4550’nin programlanması işlemi sırasında
kullanılır. PIC18F4550’nin MCLR bacağına (bacak 1) bağlı olan Reset butonuna
basılması, devrenin USB kablosunun bilgisayardan çıkartılıp tekrar takılması işlevini
gö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 bir
uygulamanın yüklenmesine izin verilmiş olur (Overholt 2005).
3.1.3. Güç
Programlama devresi 5V DC gerilim ile çalışır. Bu gerilim direkt olarak USB’den
sağ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üç devresi
her 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 USB
kablosundan gelen 5 Voltluk gerilim ile beslenebilir.
USB veri yolunda bir cihazın çekebileceği minimum akım 100 mA, maksimum akım ise
500 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ına
zarar verebilir. 500 mA’den daha fazla akım gereksinimi duyulan uygulamalarda harici
bir güç kaynağı kullanılması gerekmektedir.
Hem programlama devresinde hem de uygulama kartında USB’den sağlanan ve harici
güç kaynağından yapılan beslemelerin durumu LED gösterge ile gerçeklenmiştir.
55
3.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 USB
aracı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ılarak
kullanıcıların ve tasarımcıların hizmetine sunulur.
Önyükleme kullanılan programlayıcının bilgisayarla olan haberleşmesine göre
farklılıklar göstermektedir. Bu çalışmada, PIC’in önyüklenmesi paralel port üzerinden
gerç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 mikrodenetleyicilerinin
tamamı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 kullanacak
olduğumuz PIC18F4550 mikrodenetleyici seçilir.
• Cihaz seçimi gerçekleştirildikten sonra, programlama kartı bilgisayara paralel porttan
bağlandığı için Winpic programı paralel programlama konektörü ile uyumlu hale
getirilir. Ş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=ack
OkButton=nc
VppOnOff=!D6
VddOnOff=nc
Connect=nc
ClockOut=D4
DataOut=D3
DataOutWhileReading=1
PullMclrDown=nc
ClkEnable=nc
OutEnable=nc
RedLed=nc
GreenLed=nc
Şekil 3.6. Wzab2.ini tanımlama dosyası
“Özel arabirim tanımlama dosyası” (Custom interface definition file) olan Wzab2.ini
dosyası Şekil 3.1’de verilen programlama devresi ile Winpic arasında tanımlama bilgisi
sunar. Şekil 3.6’da Wzab2.ini tanımlama dosyasının paralel portun hangi bacaklarının
kullanıldığını tanımlayan program gösterilmiştir.
57
• Şekil 3.7’de gösterilen PIC18F4550 için cihaz konfigürasyonu, program içinde
yapılabileceği gibi Winpic programı içindeki cihaz konfigürasyon seçeneği kullanılarak
da yapılabilmektedir. Bu konfigürasyonda yonganın çalışma saat frekansı, kullanılan
osilatör tipi ve frekansı, çalışma bölgesi ayarlandığı gibi yonga bacaklarının ne amaçla
kullanılacağı, Watchdog Timer’ın kullanılıp kullanılmayacağı, kullanıldığında ise hangi
zamanlarda 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ış olan
MCHPUSB.hex (C:\MCHPFSUSB\fw\Boot\_output\ MCHPUSB.hex) dosyası PIC’e
yüklenerek yonganın önyüklemesi tamamlanmış olur.
• Önyükleme işlemi tamamlandıktan sonra programlayıcı devre, üzerinde bulunan
mikro anahtarın yönleri değiştirilerek, USB moduna alınır ve bilgisayarın USB portuna
bağ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ık
kullanılmayacaktır.
• Cihazın USB portuna bağlanmasıyla “Yeni donanım bulundu” bilgisi ekrana gelince
C:\MCHPFSUSB\Pc\MCHPUSB Driver\Release\ mchpusb.inf sürücü dosyası ile
MCHPUSB.SYS sistem dosyası Windows işletim sistemine kurularak PIC sisteme
tanıtılmış olur.
• Microchip
firması
tarafından
yazılımış
olan
C:\MCHPFSUSB\Pc\Pdfsusb\
PDFSUSB.exe programı ile, Winpic programına ihtiyaç duymadan USB portundan
PIC’e firmware yazılımları atılabilir konuma gelinir.
58
Şekil 3.7. Winpic’de cihaz konfigürasyonu
3.3. Kodlama (Firmware)
PIC’in kodlaması Assembler dili ile yapılabilirken PIC18XXXX serisi PIC’ler için
Microchip firması tarafından geliştirilmiş C18 dili yaygın olarak kullanılmaktadır. Yine
Microchip firmasının yayınlamış olduğu çekirdek programlar başlangıç olarak
kullanılarak, USB tabanlı HID veya DAQ uygulamaları için kod geliştirilmesi
yapılmaktadır. Bu çekirdekte temel USB yapılandırılmaları ve PORT konfigürasyonları
bulunmaktadır (typedefs.h, usb9.c, usbdsc.c vb. ). Kullanıcı amacına göre bu
konfigürasyonlara ekleme yada çıkarma yaparak programını geliştirebilmektedir
(iocfg.h, main.c, user.c, user.h vb.).
59
3.4. Görsel arabirim (GUI)
Görsel program geliştirme araçları ve USB aracılığı ile PIC18F4550 arasında iletişim
kurabilmek için, Microchip firmasının yayınladığı API uygulama kütüphanesi
MPUSBAPI.DLL kullanılır. Bu dosya aşağıdaki fonksiyon ve alt yordamları
bulundurur.
Public Declare Function MPUSBGetDLLVersion Lib "mpusbapi" () As Long
Public Declare Function MPUSBGetDeviceCount Lib "mpusbapi" (ByVal
pVID_PID As String) As Long
Public Declare Function MPUSBOpen Lib "mpusbapi" (ByVal instance As Long,
ByVal pVID_PID As String, ByVal pEP As String, ByVal dwDir As Long,
ByVal dwReserved As Long) As Long
Public Declare Function MPUSBRead Lib "mpusbapi" (ByVal handle As Long,
ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal
dwMilliseconds As Long) As Long
Public Declare Function MPUSBWrite Lib "mpusbapi" (ByVal handle As Long,
ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal
dwMilliseconds As Long) As Long
Public Declare Function MPUSBReadInt Lib "mpusbapi"(ByVal handle As Long,
ByVal pData As Long, ByVal dwLen As Long, ByRef pLength As Long, ByVal
dwMilliseconds As Long) As Long
Public Declare Function MPUSBClose Lib "mpusbapi"(ByVal handle As Long)As
Long
Bu fonksiyonlar modül olarak uygulama programına eklenen VBMPUSBAPI.BAS
dosyası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 veri borularını açmak için kullanılır.
• CloseMPUSBDevice: Açık veri borularını kapamak için kullanılır.
• SendReceivePacket: Uygulama verilerinin transferinde kullanılır. 64 elemanlı
gönderme ve alma dizileri ile verilerin gönderiliş ve geri alınışı izlenilebilir.
60
4. ARAŞTIRMA BULGULARI
Materyal ve Yöntem bölümünde tanıtılan ve tasarım ile gerçeklemesi yapılan PIC
programlama 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çin
yeniden 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üm
gösterilmiştir. main.c dosyasının tamamı ise EK 7’de verilmiş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ıyla
gerilim okuma ve devrenin sıfırlanması gibi komutların gerçekleştirilebilmesi için
kullanılan adresler boot.h dosyasında tanımlanmaktadır. boot.h kaynak kodlarının bir
kısmı Şekil 4.2’de gösterilmiştir. boot.h dosyasının tamamı ise EK 8’de verilmiştir.
Şekil 4.2. boot.h kaynak kodlarının bir bölümü
62
boot.c dosyası ise GUI programında “SendReceivePacket” altyordamı ile gönderilen
adres,durum ve özellik bilgilerine göre PIC’i çalıştırarak eğer geriye bilgi dönmesi
gerekiyorsa bu bilgileri döndürmektedir. Şekil 4.3’te boot.c kaynak kodlarının bir
bölümü gösterilmiştir.
boot.c dosyasında, Visual Basic’de yazılan GUI programıyla kullanılan üç LED’in
yakılıp söndürülmesi durumunda gönderilen veri 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ınan
analog sinyalin (gerilim), PIC18F4550 mikrodenetleyicisi tarafından A/D dönüştürme
iş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 ADC
iş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.c
kaynak kodlarının bir bölümü gösterilmiştir. boot.c dosyasının tamamı ise EK 9’da
verilmiştir.
io_cfg.h dosyasının tamamı EK 10’da verilmiş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ılarak
PIC18F4550 mikrodenetleyicisine yüklenir.
64
GUI yazılımı Visual Basic 6.0’da gerçeklendi. Şekil 4.5’te gösterilen kullanıcı formu
DLL versiyonu, LED’lerin yakıp söndürülmesi, anahtara basılıp basılmadığını kontrol
ederken aynı zamanda 1. kanaldan ADC okuması yapabilmektedir.
Şekil 4.5. Uygulama GUI kullanıcı formu
GUI formunda Voltaj Oku olarak kullanılan komutla, potansiyometre üzerinden
mikrodenetleyiciye uygulanan gerilim değerlerinin değiştirilerek dijitale çevrilmesi
işlemi gerçekleştirildi. Burada uygulaması yapılan A/D dönüştürme işlemi için gerekli
olan 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şlemi
gerç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şleminde
dijital bilgiye dönüşen analog sinyalin karşılığı ADRESH ve ADRESL kaydedicilerine
65
yazılmaktadır. Bu yazım sırasında gelen 16 bitlik verinin düşük anlamlı ilk sekiz biti
ADRESL kaydedicisine, geri kalan sekiz bitlik veri ise ADRESH kaydedicisine yazılır.
ADRESH kaydedicisinin öncelikle sola kaydırma işlemine tabi tutulduktan sonra, bu iki
kaydedicinin lojik VEYA işlemine tabi tutulmasıyla bu veriler birleştirilmiş olur.
Adres kaydedicilerine yazılan dijital gerilim bilgisinin çözünürlüğünü ayarlamak için
sonuç 5 ile çarpıldıktan sonra onaltılı (hexadecimal) sayı sisteminde H3FF sayısına
bölünür. 5 ile çarpılmasının nedeni, devreye güç kaynağından verilen gerilimin 7805
regülatörü ile potansiyometreye 5V olarak verilmesidir. H3FF onaltılı sayısı ikili sayı
sisteminde 10 bitlik 1111111111 sayısına karşılık gelmektedir. Bu da PIC18F4550’nin
A/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ı durumu
Lojik 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 ile
0x32 (onluk tabanda 50) yazma talebi, hangi LED’in seçileceği ve LED'in yanıp
yanmayacağını belirler.
Uygulama GUI’nin kontrol ettiği uygulama kartının açık devre şeması Şekil 4.6’da
verilmiştir. Uygulama kartının baskı devresi ise Şekil 4.7’de verilmiştir.
66
Şekil 4.6. Uygulama kartı açık devre şeması
Şekil 4.7. Uygulama kartı
67
5. TARTIŞMA ve SONUÇ
Elektronik ölçme sektöründeki hızlı gelişmeler ve bilgisayar tabanlı sistemlerin ölçme
sistemlerindeki yerinin her geçen gün artması, hızlı ve güvenilir veri iletişim
metotlarına olan ihtiyacı arttırmaktadır.
Özellikle gömülü sistemlerde sıklıkla kullanılan mikroişlemci ve mikrodenetleyiciler ise
elektronik 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
PIC18F4550
mikrodenetleyicisi ile USB üzerinden bilgisayarla haberleştirilmesi sağlanmıştır. USB
protokolü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 ile
uygulamanı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
bilgisayar
işlemcilerinden bile daha üstün bir yonga olması, uygulama alanlarını oldukça
genişletmektedir. Endüstriyel elektronik, medikal, otomotiv, tüketici elektroniği vb. gibi
genel başlıklarıyla verilen birçok alanda çeşitli uygulamalar için kullanılabilecek bir
proje hazırlanmıştır. Projede kullanılan uygulama kartı genel amaçlı bir arabirim olarak
tasarlandığı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 kart
geliştirilmiştir. Böylelikle kullanıcının önyükleme ve programlama için ayrı kartlar
kullanma ihtiyacı ortadan kaldırılarak, Microchip firmasının üretmiş olduğu
programlayıcı kartına göre daha kullanışlı bir sistem oluşturulmuştur.
68
Uygulama kartı olarak düzenlenen devre ile analog bir sinyalin dijitale çevrilmesi,
giriş/çıkış portlarının kullanılarak bilgisayarın verilen girişleri algılayabilmesi ve yine
giriş/çı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ştirilebilecek
yeni projelerde, programlama kartında herhangi bir değişikliğe gidilmeden sadece
uygulama
kartına
yapılabilecek
revizyonlar
yeterli
olacaktır.
Bu
bağlamda,
mikrodenetleyici temelli tüm uygulamalar için prototip sayılabilecek bir uygulama
gerçekleştirilmiş ve yeni tasarımcılar için bir yol açılmıştır.
69
KAYNAKLAR
Axelson, J., 2005, USB Complete:Everything You Need to Develop Custom USB
Peripherals, 3rd ed., Labview Research, 572 p, Madison, USA
Chandler, A., 2006, New 48 MHz Microchip PIC18 Microcontrollers with USB 2.0,
http://www.microcontroller.com/news/microchip_pic18_usb2.asp (21.09.2006)
Kızılbey, O., 2005, Deniz Suyu Termometresi, İstanbul Teknik Üniversitesi ElektrikElektronik Fakültesi Bitirme Ödevi, 77 s, İstanbul
Microchip Technology Inc., 2004, DS39632B, PIC18F2455/2550/4455/4550 Data
Sheet, Microchip Technology Incorporation
Overholt, 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 MYO
Araştırma Ödevi, 13 s, İstanbul
Şahin, C., Dayanık, A. ve Altınbaşak, C., 2006, PIC Programlama Teknikleri ve
PIC16F877A, 1. baskı, Altaş Yayınları, 526 s, İstanbul
Tan, W.M., 1997, Developing USB PC Peripherals Using The Intel 8x930Ax USB
Microcontroller, Annabooks, 189 p, San Diego, USA
70
EKLER
EK 1
Çizelge 2.3. PORTA bacak fonksiyonları
Bacak
RA0/AN0
TRIS
Ayarı
0
1
1
0
1
1
I/O
I/O tipi
Açıklama
Çıkış
Giriş
Giriş
Çıkış
Giriş
Giriş
Dijital
TTL
Analog
Dijital
TTL
Analog
0
Çıkış
Dijital
1
Giriş
TTL
AN2
1
Giriş
Analog
VREF-
1
Giriş
Analog
CVREF
x
Çıkış
Analog
AN3
0
1
1
Çıkış
Giriş
Giriş
Dijital
TTL
Analog
VREF+
1
Giriş
Analog
Çıkış
Giriş
Giriş
Çıkış
Dijital
TOCKI
C1OUT
0
1
1
0
Dijital
RCV
x
Giriş
TTL
0
1
1
1
1
0
Çıkış
Giriş
Giriş
Giriş
Giriş
Çıkış
Dijital
TTL
Analog
TTL
Analog
Dijital
0
Çıkış
Dijital
1
Giriş
TTL
OSC2
x
Çıkış
Analog
CLKO
x
Çıkış
Dijital
LATA<0> dijital veri çıkışı.
PORTA<0> veri girişi
A/D analog giriş kanalı 0 ve karşılaştırıcı C1 - girişi
LATA<1> dijital veri çıkışı
PORTA<1>veri girişi; POR’da ‘0’ okur.
A/D analog giriş kanalı 1 ve karşılaştırıcı C2 - girişi
LATA<2> dijital veri çıkışı. CVREF çıkışı
etkinleştirildiğinde kullanılmaz.
PORTA<2> veri girişi; CVREF çıkışı veya analog
fonksiyonlar etkinleştirildiğinde kullanılmaz.
A/D analog giriş kanalı 2 ve karşılaştırıcı C2 + girişi
A/D analog girişi ve karşılaştırıcı düşük giriş voltaj
referans girişi.
Karşılaştırıcı voltaj referans çıkışı. Bu özellik
seçildiğinde dijital giriş kullanılamaz.
LATA<3> dijital veri çıkışı.
PORTA<3> veri girişi
A/D analog giriş kanalı 3 ve karşılaştırıcı C1 + girişi
A/D analog girişi ve karşılaştırıcı yüksek giriş voltaj
referans girişi.
LATA<4> dijital veri çıkışı.
PORTA<4> veri girişi
Timer1 saat girişi
Karşılaştırıcı 1 çıkışı
Harici USB alıcı-vericisi (Fark alıcısından gelen
giriş) girişi
LATA<5> dijital veri çıkışı.
PORTA<5> veri girişi
A/D analog giriş kanalı 4
SSP için uydu seçme girişi (MSSP modülü için)
Yüksek/Alçak – Voltaj Tespit Girişi
Karşılaştırıcı 2 çıkışı
LATA<6> dijital veri çıkışı; ECIO, ECPIO ve
INTIO modlarında kullanılır, yoksa ‘0’ okunur.
PORTA<6> veri girişi; ECIO, ECPIO ve INTIO
modlarında kullanılır, yoksa ‘0’ okunur.
Ana osilatör geri besleme çıkışı bağlantısı (tüm XT
ve HS modları için)
Sistem döngü saati çıkışı; EC, ECPLL ve INTCKO
modlarında kullanılır.
Fonksiyon
RA0
AN0
RA1/AN1
RA1
RA1
RA2
RA2/AN2/
VREF-/CVREF
RA3
RA3/AN3/
VREF+
RA4
RA4/TOCKI
/C1OUT
/RCV
RA5/AN4/
SS/
HLVDIN/
C2OUT
RA5
AN4
SS
HLVDIN
C2OUT
ST
ST
RA6
OSC2/
CLKO/RA6
71
EK 2
Çizelge 2.4. PORTB bacak fonksiyonları
Bacak
I/O
I/O tipi
Açıklama
AN12
INT0
TRIS
Ayarı
0
1
1
1
Çıkış
Giriş
Giriş
Giriş
Dijital
TTL
Analog
ST
FLT0
1
Giriş
ST
SDI
1
0
1
0
1
1
1
0
1
0
1
0
1
1
1
0
0
1
1
0
1
0
0
1
1
1
0
0
1
1
x
0
1
1
x
0
1
1
x
x
Giriş
Çıkış
Giriş
Çıkış
Giriş
Giriş
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Giriş
Giriş
Çıkış
Çıkış
Giriş
Giriş
Çıkış
Giriş
Çıkış
Çıkış
Giriş
Giriş
Giriş
Çıkış
Çıkış
Giriş
Giriş
Giriş
Çıkış
Giriş
Giriş
Giriş
Çıkış
Giriş
Giriş
Çıkış
Giriş
ST
Dijital
I2C/SMB
Dijital
TTL
Analog
ST
Dijital
ST
Dijital
I2C/SMB
Dijital
TTL
Analog
ST
Dijital
TTL
Analog
Analog
Dijital
ST
Dijital
Dijital
TTL
Analog
TTL
Dijital
Dijital
TTL
TTL
ST
Dijital
TTL
TTL
ST
Dijital
TTL
TTL
Dijital
ST
LATB<0> dijital veri çıkışı.
PORTB<0> veri girişi
A/D analog giriş kanalı 12.
Harici Kesme 0 girişi
Geliştirilmiş PWM Hata girişi (ECCP1 modülü);
yazılımla etkinleştirilir.
SPI veri girişi (MSSP modülü)
I2C veri çıkışı (MSSP modülü)
I2C veri girişi (MSSP modülü)
LATB<1> dijital veri çıkışı.
PORTB<1> veri girişi
A/D analog giriş kanalı 10.
Harici Kesme 1 girişi
SPI saat çıkışı (MSSP modülü)
SPI saat girişi (MSSP modülü)
I2C saat çıkışı (MSSP modülü)
I2C saat girişi (MSSP modülü)
LATB<2> dijital veri çıkışı.
PORTB<2> veri girişi
A/D analog giriş kanalı 8.
Harici Kesme 2 girişi
Harici USB alıcı-vericisi VMO veri çıkışı
LATB<3> dijital veri çıkışı.
PORTB<3> veri girişi
A/D analog giriş kanalı 9.
CCP2 Karşılaştırma ve PWM çıkışı
CCP2 Yakalama girişi
Harici USB alıcı-vericisi VPO veri çıkışı
LATB<4> dijital veri çıkışı.
PORTB<4> veri girişi
A/D analog giriş kanalı 11.
Bacak değiştirme üzerinde kesme.
SPP yonga seçim kontrol çıkışı
LATB<5> dijital veri çıkışı.
PORTB<5> veri girişi
Bacak değiştirme üzerinde kesme.
Tek-Kaynak Programlama modu girişi (ICSP)
LATB<6> dijital veri çıkışı.
PORTB<6> veri girişi
Bacak değiştirme üzerinde kesme.
ICSP saat girişi
LATB<7> dijital veri çıkışı.
PORTB<7> veri girişi
Bacak değiştirme üzerinde kesme.
ICSP veri çıkışı
ICSP veri girişi
Fonksiyon
RB0
RB0/AN12/
INT0/FLT0/
SDI/SDA
SDA
RB1
RB1/AN10/
INT1/SCK/
SCL
AN10
INT1
SCK
SCL
RB2
RB2/AN8/
INT2/VMO
AN8
INT2
VM0
RB3
RB3/AN9/
CCP2/VPO
AN9
CCP2
VPO
RB4
RB4/AN11/
KBI0/CSSPP
RB5/KBI1/
PGM
RB6/KBI2/
PGC
AN11
KBI0
CSSPP
RB5
KBI1
PGM
RB6
KBI2
PGC
RB7
RB7/KBI3/
PGD
KBI3
PGD
72
EK 3
Çizelge 2.5. PORTC bacak fonksiyonları
Bacak
TRIS
Ayarı
0
1
I/O
I/O tipi
Açıklama
Çıkış
Giriş
Dijital
ST
T1OSO
x
Çıkış
Analog
T13CKI
1
0
1
Giriş
Çıkış
Giriş
ST
Dijital
ST
T1OSI
x
Giriş
Analog
CCP2
0
1
Çıkış
Giriş
Dijital
ST
UOE
0
Çıkış
Dijital
0
1
0
1
0
-
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
-
Çıkış
-
Giriş
Dijital
ST
Dijital
ST
Dijital
TTL
USB
Vericisi
USB
Vericisi
LATC<0> dijital veri çıkışı.
PORTC<0> veri girişi
Timer1 osilatör çıkışı;Timer1 seçildiğinde seçili
duruma gelir. Dijital giriş/çıkışlar seçilemez.
Timer1/Timer3 sayıcı girişi
LATC<1> dijital veri çıkışı.
PORTC<1> veri girişi
Timer1 osilatör girişi;Timer1 seçildiğinde seçili
duruma gelir. Dijital giriş/çıkışlar seçilemez.
CCP2 Karşılaştırma ve PWM çıkışı
CCP2 Yakalama girişi
Harici USB alıcı-verici OE (çıkış seçilir kılınmış)
çıkışı
LATC<2> dijital veri çıkışı.
PORTC<2> veri girişi
ECCP1 Karşılaştırma ve PWM çıkışı
ECCP1 Yakalama girişi
ECCP1 Geliştirilmiş PWM çıkışı
PORTC<4> veri girişi; USB seçili iken seçilemez.
VM
-
Giriş
TTL
RC5
-
Giriş
-
Çıkış
-
Giriş
TTL
USB
Vericisi
USB
Vericisi
VP
-
Giriş
TTL
RC6
0
1
Çıkış
Giriş
Dijital
ST
TX
0
Çıkış
Dijital
0
1
0
1
1
0
1
1
Çıkış
Giriş
Çıkış
Giriş
Giriş
Çıkış
Giriş
Giriş
Dijital
ST
Dijital
ST
ST
Dijital
ST
Dijital
Fonksiyon
RC0
RC0/T1OSO
/T13CKI
RC1
RC1/T1OSI
/CCP2
/UOE
RC2
RC2/CCP1/
P1A
CCP1
P1A
RC4
RC4/D – /
VM
RC5/D + /
VP
RC6/TX/
CK
D–
D+
CK
RC7
RC7/RX/
DT/SDO
RX
DT
SDO
USB yolu fark eksi hat çıkışı (dâhili alıcı-verici)
USB yolu fark eksi hat girişi (dâhili alıcı-verici)
Harici USB alıcı-verici VM (D – ‘den gelen giriş
hattı) girişi
PORTC<5> veri girişi; USB seçili iken seçilemez.
USB yolu fark artı hat çıkışı (dâhili alıcı-verici)
USB yolu fark artı hat girişi (dâhili alıcı-verici)
Harici USB alıcı-verici VP (D + ‘dan gelen giriş
hattı) girişi
LATC<6> dijital veri çıkışı.
PORTC<6> veri girişi
Asenkron seri gönderme veri çıkışı (EUSART
modülü)
Senkron seri saat çıkışı (EUSART modülü)
Senkron seri saat girişi (EUSART modülü)
LATC<7> dijital veri çıkışı.
PORTC<7> veri girişi
Asenkron seri alma veri girişi (EUSART modülü)
Senkron seri veri çıkışı (EUSART modülü)
Senkron seri veri girişi (EUSART modülü)
SPI veri çıkışı (MSSP modülü)
73
EK 4
Çizelge 2.6. PORTD bacak fonksiyonları
Bacak
Fonksiyon
RD0
RD0/SPP0
SPP0
RD1
RD1/SPP1
SPP1
RD2
RD2/SPP2
SPP2
RD3
RD3/SPP3
SPP3
RD4
RD4/SPP4
SPP4
RD5
RD5/SPP5/
P1B
SPP5
P1B
RD6
RD6/SPP6/
P1C
SPP6
P1C
RD7
RD7/SPP7/
P1D
SPP7
P1D
TRIS
Ayarı
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
I/O
I/O tipi
Açıklama
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Çıkış
Giriş
Çıkış
Giriş
Çıkış
Dijital
ST
Dijital
TTL
Dijital
ST
Dijital
TTL
Dijital
ST
Dijital
TTL
Dijital
ST
Dijital
TTL
Dijital
ST
Dijital
TTL
Dijital
ST
Dijital
TTL
Dijital
Dijital
ST
Dijital
TTL
Dijital
Dijital
ST
Dijital
TTL
Dijital
LATD<0> dijital veri çıkışı.
PORTD<0> veri girişi
SPP<0> dijital veri çıkışı.
SPP<0> dijital veri girişi.
LATD<1> dijital veri çıkışı.
PORTD<1> veri girişi
SPP<1> dijital veri çıkışı.
SPP<1> dijital veri girişi.
LATD<2> dijital veri çıkışı.
PORTD<2> veri girişi
SPP<2> dijital veri çıkışı.
SPP<2> dijital veri girişi.
LATD<3> dijital veri çıkışı.
PORTD<3> veri girişi
SPP<3> dijital veri çıkışı.
SPP<3> dijital veri girişi.
LATD<4> dijital veri çıkışı.
PORTD<4> veri girişi
SPP<4> dijital veri çıkışı.
SPP<4> dijital veri girişi.
LATD<5> dijital veri çıkışı.
PORTD<5> veri girişi
SPP<5> dijital veri çıkışı.
SPP<5> dijital veri girişi.
ECCP1 Geliştirilmiş PWM çıkışı, kanal B
LATD<6> dijital veri çıkışı.
PORTD<6> veri girişi
SPP<6> dijital veri çıkışı.
SPP<6> dijital veri girişi.
ECCP1 Geliştirilmiş PWM çıkışı, kanal C
LATD<7> dijital veri çıkışı.
PORTD<7> veri girişi
SPP<7> dijital veri çıkışı.
SPP<7> dijital veri girişi.
ECCP1 Geliştirilmiş PWM çıkışı, kanal D
74
EK 5
Çizelge 2.7. PORTE bacak fonksiyonları
Bacak
RE0/AN5/
CK1SPP
RE1/AN6/
CK2SPP
RE2/AN7/
OESPP
MCLR/VPP/
RE3
I/O
I/O tipi
Açıklama
AN7
OESPP
TRIS
Ayarı
0
1
1
0
0
1
1
0
0
1
1
0
Çıkış
Giriş
Giriş
Çıkış
Çıkış
Giriş
Giriş
Çıkış
Çıkış
Giriş
Giriş
Çıkış
Dijital
ST
Analog
Dijital
Dijital
ST
Analog
Dijital
Dijital
ST
Analog
Dijital
MCLR
-
Giriş
ST
VPP
-
Giriş
ST
RE3
-
Giriş
Analog
LATE<0> dijital veri çıkışı.
PORTE<0> veri girişi
A/D giriş kanalı 5
SPP saat 1 çıkışı (SPP seçili kılındığında)
LATE<1> dijital veri çıkışı.
PORTE<1> veri girişi
A/D giriş kanalı 6
SPP saat 2 çıkışı (SPP seçili kılındığında)
LATE<2> dijital veri çıkışı.
PORTE<2> veri girişi
A/D giriş kanalı 7
SPP seçme çıkışı (SPP seçili kılındığında)
PORTE<2> veri girişi; MCLRE konfigürasyon biti
‘0’ seçildiğinde.
Harici Ana Temizleme girişi; MCLRE
konfigürasyon biti ‘1’ seçildiğinde.
Yüksek-voltaj denetleme, ICSP modunda giriş
denetlemesi için kullanılır. Bacak modundan
bağımsız olarak her zaman mevcuttur.
Fonksiyon
RE0
AN5
CK1SPP
RE1
AN6
CK1SPP
RE2
75
EK 6
Şekil 2.10. PIC18F4550 veri hafızası
76
EK 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 <p18cxxx.h>
#include "system\typedefs.h"
// Required
#include "system\usb\usb.h"
// Required
#include "io_cfg.h"
// Required
#include "system\usb\usb_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 = 0x000008
void _high_ISR (void)
{
_asm goto RM_HIGH_INTERRUPT_VECTOR _endasm
}
#pragma code _LOW_INTERRUPT_VECTOR = 0x000018
void _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 Condition
if(PORTBbits.RB4 == 1) // If not pressed, User Mode
{
ADCON1 = temp;
// Restore reset value
_asm goto RM_RESET_VECTOR _endasm
}//end if
//Bootload Mode
mInitAllLEDs();
mInitAllSwitches()
mInitPOT();
ADCON2bits.ADFM = 1; // ADC result right justified
mInitializeUSBDriver(); // See usbdrv.h
USBCheckBusStatus();
// Modified to always enable USB module
while(1)
{
USBDriverService(); // See usbdrv.c
BootService();
// See boot.c
}//end while
}//end main
#pragma code user = RM_RESET_VECTOR
/** EOF main.c ***************************************************************/
78
EK 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_RD
EECON1bits.RD
79
#define EECON1_WR
#endif
EECON1bits.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: <CMD_CODE><LEN><ADDR:3>
#define DATA_SIZE (BOOT_EP_SIZE - OVER_HEAD)
typedef union _BOOT_DATA_PACKET
{
byte _byte[BOOT_EP_SIZE]; //For Byte Access
struct
{
enum
{
READ_FLASH = 0x01,
WRITE_FLASH = 0x02,
ERASE_FLASH = 0x03,
READ_EEDATA = 0x04,
WRITE_EEDATA = 0x05,
81
READ_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 Pointer
struct
{
byte low;
//Little-indian order
byte 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
82
EK 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 <p18cxxx.h>
#include "system\typedefs.h"
#include "system\usb\usb.h"
#include "io_cfg.h"
/** V A R I A B L E S ********************************************************/
#pragma udata
byte 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);
83
void 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 usb9.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 size
BOOT_BD_OUT.ADR = (byte*)&dataPacket; // Set buffer address
BOOT_BD_OUT.Stat._byte = _USIE|_DAT0|_DTSEN;// Set status
BOOT_BD_IN.ADR = (byte*)&dataPacket; // Set buffer address
BOOT_BD_IN.Stat._byte = _UCPU|_DAT1; // Set buffer status
}//end BootInitEP
void ReadPOT(void)
{
ADCON0bits.GO = 1; // Start AD conversion
while(ADCON0bits.NOT_DONE); // Wait for conversion
84
return;
}//end ReadPOT
void StartWrite(void)
{
/*
* A write command can be prematurely terminated by MCLR or WDT reset
*/
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1_WR = 1;
}//end StartWrite
void ReadVersion(void) //TESTED: Passed
{
dataPacket._byte[2] = MINOR_VERSION;
dataPacket._byte[3] = MAJOR_VERSION;
}//end ReadVersion
void ReadProgMem(void) //TESTED: Passed
{
for (counter = 0; counter < dataPacket.len; counter++)
{
//2 separate inst prevents compiler from using RAM stack
byteTemp = *((dataPacket.ADR.pAdr)+counter);
dataPacket.data[counter] = byteTemp;
}//end for
TBLPTRU = 0x00;
// forces upper byte back to 0x00
// optional fix is to set large code model
}//end ReadProgMem
void 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 boundary
EECON1 = 0b10000100;
//Setup writes: EEPGD=1,WREN=1
//LEN = # of byte to write
for (counter = 0; counter < (dataPacket.len); counter++)
{
*((dataPacket.ADR.pAdr)+counter) = \
dataPacket.data[counter];
if ((counter & 0b00001111) == 0b00001111)
{
StartWrite();
}//end if
}//end for
}//end WriteProgMem
void 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 erase
EECON1 = 0b10010100; //Setup writes: EEPGD=1,FREE=1,WREN=1
for(counter=0; counter < dataPacket.len; counter++)
{
*(dataPacket.ADR.pAdr+(((int)counter) << 6)); //Load TBLPTR
StartWrite();
}//end for
TBLPTRU = 0;
// forces upper byte back to 0x00
// optional fix is to set large code model
// (for USER ID 0x20 0x00 0x00)
}//end EraseProgMem
void ReadEE(void) //TESTED: Passed
{
EECON1 = 0x00;
for(counter=0; counter < dataPacket.len; counter++)
{
EEADR = (byte)dataPacket.ADR.pAdr + counter;
//EEADRH = (BYTE)(((int)dataPacket.FIELD.ADDR.POINTER + counter) >> 8);
EECON1_RD = 1;
dataPacket.data[counter] = EEDATA;
}//end for
}//end ReadEE
void 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=1
StartWrite();
while(EECON1_WR);
//Wait till WR bit is clear
}//end for
}//end WriteEE
//WriteConfig is different from WriteProgMem b/c it can write a byte
void WriteConfig(void) //TESTED: Passed
{
EECON1 = 0b11000100;
//Setup writes: EEPGD=1,CFGS=1,WREN=1
for (counter = 0; counter < dataPacket.len; counter++)
{
*((dataPacket.ADR.pAdr)+counter) = \
dataPacket.data[counter];
StartWrite();
}//end for
TBLPTRU = 0x00;
// forces upper byte back to 0x00
// optional fix is to set large code model
}//end WriteConfig
void BootService(void)
86
{
BlinkUSBStatus();
if((usb_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 if
return;
}//end if
if(!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;
87
case 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 if
if(dataPacket.led_num == 4)
{
mLED_4 = dataPacket.led_status;
counter = 0x01;
}//end if
if(dataPacket.led_num == 5)
{
mLED_5 = dataPacket.led_status;
counter = 0x01;
}//end if
break;
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 Switch3IsPressed
break;
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
*
usb_device_state is declared in usbmmap.c and is modified
*
in usbdrv.c, usbctrltrf.c, and usb9.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(usb_device_state == DETACHED_STATE)
{
mLED_Both_Off();
}
else if(usb_device_state == ATTACHED_STATE)
{
mLED_Both_On();
}
else if(usb_device_state == POWERED_STATE)
{
mLED_Only_1_On();
}
else if(usb_device_state == DEFAULT_STATE)
{
mLED_Only_2_On();
}
else if(usb_device_state == ADDRESS_STATE)
{
if(led_count == 0)
89
{
mLED_1_Toggle();
mLED_2_Off();
}//end if
}
else if(usb_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 ***************************************************************/
90
EK 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\usbcfg.h"
/** T R I S *********************************************************/
#define INPUT_PIN
1
#define OUTPUT_PIN
0
/** U S B ***********************************************************/
#define tris_usb_bus_sense TRISAbits.TRISA1 // Input
#if defined(USE_USB_BUS_SENSE_IO)
91
#define usb_bus_sense
#else
#define usb_bus_sense
#endif
#define tris_self_power
PORTAbits.RA1
1
TRISAbits.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_5
LATDbits.LATD0
LATDbits.LATD1
LATDbits.LATD2
LATDbits.LATD3
LATDbits.LATD4
#define mLED_1_On()
#define mLED_2_On()
#define mLED_3_On()
#define mLED_4_On()
#define mLED_5_On()
mLED_1 = 1;
mLED_2 = 1;
mLED_3 = 1;
mLED_4 = 1;
mLED_5 = 1;
#define mLED_1_Off()
#define mLED_2_Off()
#define mLED_3_Off()
#define mLED_4_Off()
#define mLED_5_Off()
mLED_1 = 0;
mLED_2 = 0;
mLED_3 = 0;
mLED_4 = 0;
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_sdmmc
TRISBbits.TRISB3
LATBbits.LATB3
// Output
92
/** S D M M C *******************************************************/
#define TRIS_CARD_DETECT TRISBbits.TRISB4 // Input
#define CARD_DETECT
PORTBbits.RB4
#define TRIS_WRITE_DETECT TRISAbits.TRISA4
#define WRITE_DETECT
PORTAbits.RA4
#endif //IO_CFG_H
// Input
93
EK 11
Komut
Alanı
Türkçe Açıklama
W ile f ’yi topla
ADDWF
ADDWFC
ANDWF
CLRF
COMF
f,d,a
f,d,a
f,d,a
f,a
f,d,a
CPFSEQ
f,a
WREG ile f ' yi karşılaştır. Eşitse alttaki komuta atla
CPFSGT
f,a
WREG ile f ' yi karşılaştır. WREG küçükse alttaki komuta atla
CPFSLT
f,a
WREG ile f ' yi karşılaştır. WREG büyükse alttaki komuta atla
W ile f ' yi topla elde bitini f ' ye ekle
W ile f ’yi VE işlemine tabi tut.
f ’yi sıfırla.
f ’nin tersini al
DECF
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 atla
INFSNZ
f,d,a
f’deki sayıyı bir arttırır, sonuç 0 değilse altındaki komuta atla
IORWF
MOVF
f,d,a
f,d,a
W ile f’yi VEYA işlemine tabi tut.
f’deki sayıyı hedefe taşı.
MOVFF
fs, fd
f’deki sayıyı ikinci word’e taşı
MOVWF
MULWF
NEGF
f,a
f,a
f,a
W’deki sayıyı f’de hedefe taşı.
f 'deki sayıyı WREG ile çarp
f 'yi negatif yap
f’deki 8 biti başa Status 0 bitini ekleyerek sola kaydır,
RLCF
f,d,a
RLNCF
f,d,a
RRCF
f,d,a
RRNCF
f,d,a
f’deki 8 biti başa Status 0 bitini ekleyerek sağa kaydır.
SETF
SUBFWB
SUBWF
SUBWFB
SWAPF
TSTFSZ
XORWF
f,a
f,d,a
f,d,a
f,d,a
f,d,a
f,a
f,d,a
f 'yi 1 yap
Elde kullanarak WREG den f 'yi çıkart
W’deki sayıyı f’deki sayıdan çıkart.
W’deki sayıyı f’deki sayıdan çıkart. Eldeyi değiştir.
İlk dört bitle son dört bitin yerlerini değiştir.
f 'yi test et 0 ise sonraki komuta atla
W ile f’i XOR işlemine tabi tut.
Dokuzuncu bitteki değeri sıfırıncı bite ata.
f’deki 8 biti başa Status 0 bitini ekleyerek sola kaydır.
f’deki 8 biti başa Status 0 bitini ekleyerek sağa kaydır,
Dokuzuncu bitteki değeri sıfırıncı bite ata.
Çizelge 2.9. Bayt yönlendirmeli işlemler komut seti
94
EK 12
Komut
Alanı
Türkçe Açıklama
Bit yönlendirmeli işlemler
BCF
BSF
BTFSC
BTFSS
BTG
f, b, a
f, b, a
f, b, a
f, b, a
f, d, a
f’deki bir biti sıfırla.
f’deki bir biti set et.
f’deki sayı 0’sa altındaki komutu atla
f’deki sayı 1’se altındaki komutu atla.
f’deki biti tersle
Kontrol İşlemleri
BC
BN
BNC
BNN
BNOV
BNZ
BOV
BRA
BZ
CALL
CLRWDT
DAW
GOTO
NOP
NOP
POP
PUSH
RCALL
RESET
RETFIE
RETURN
SLEEP
n
n
n
n
n
n
n
n
n
n,s
n
n
s
s
-
Elde varsa n adresine gidilir.
Sayı negatif ise n adresine gider
Elde yoksa n adresine gidilir.
Sayı Negatif değilse n adresine gider
Taşma yoksa n adresine gidilir.
Z=0 ise n adresine gidilir.
Taşma varsa n adresine gidilir.
n adresine gidilir.
Z=1 ise n adresine gidilir.
Alt programı çağır
WDT’deki değeri sıfırla.
WREG’i desimal düzelt
Programda istenilen yere atla.
İşlem yapma
İşlem yapma 2 word
Yığına AT
Yığından AL
n kadar ilerdeki komutu Göreli Çağır.
Yazılımla sıfırlama
Kesme sonunda yapılan işlemden normal programa dön.
Çağır’la çağırılan alt programın sonu.
Uyku moduna geç.
kk
kk
kk
r,kk
k
kk
kk
kk
kk
kk
Verilen sabit sayıyı W’deki sayıya ekle.
Verilen sabit sayıyla W’deki sayıyı VE işlemine tabi tut.
Verilen sabit sayıyla W’deki sayıyı VEYA işlemine tabi tut.
1.Word değeri 2.Word e kopyele
k Bank Seçme kaydedicisine yazılır
Verilen sabit sayıyı W’nin içine ata.
WREG i kk ile çarp
Tablolama sırasında sayı değerini W’ye ata
W’deki sayıyı verilen sabit sayıdan çıkart.
Verilen sabit sayıyla W’deki sayıyı ÖZELVEYA işlemine tabi tut
Sade İşlemler
ADDLW
ANDLW
IORLW
LFSR
MOVLB
MOVLW
MULLW
RETLW
SUBLW
XORLW
Çizelge 2.10. Bit yönlendirmeli işlemler, kontrol işlemleri ve sade işlemler komut seti
95
EK 13
Komut
Alanı
Türkçe Açıklama
Hafıza işlemleri
-
TBLRD*
TBLRD*+
TBLRD*TBLRD+*
TBLWT*
TBLWT*+
TBLWT*TBLWT+*
Tabloyu oku
Sonrakini arttırarak tabloyu oku
Sonrakini azaltarak tabloyu oku
Öncekini arttırarak tabloyu oku
Tabloya yaz
Sonrakini arttırarak tabloya yaz
Sonrakini azaltarak tabloya yaz
Öncekini arttırarak tabloya yaz
Geliştirilmiş Komut Seti
ADDFSR
ADDULNK
CALLW
MOVSF
MOVSS
PUSHL
SUBFSR
SUBULNK
f, k
k
zs, fd
zs, fd
k
f, k
k
Verilen sabit sayıyı FSR’ye ekle
Verilen sabit sayıyı FSR2’ye ekle ve geri dör
WREG’i kullanarak altprogramı çağır
Kaynağı birinci kelimeye taşı
Hedefi ikinci kelimeye taşı
Verilen sabit sayıyı FSR2’de sakla, FSR2’yi azalt
Verilen sabit sayıyı FSR2’den çıkart
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 sonra
1995 yılında Gaziantep Üniversitesi Mühendislik Fakültesi Elektrik-Elektronik
Mü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 Elektronik
Programı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 Anabilim
Dalı’nda yüksek lisans öğrenimine başladı.
Erzincan Üniversitesi Kelkit Aydın Doğan Meslek Yüksekokulu Endüstriyel Elektronik
Programı Koordinatörü ve Müdür Yardımcısı olarak görevine devam etmektedir. Evli
ve bir çocuk babasıdır. İngilizce bilmektedir.

Benzer belgeler