BÖLÜM 1

GİRİŞ

1.1. Trafik Işığı Modeli Hakkında Genel Bilgi

Bu çalışmada Niğde Üniversitesi, Mühendislik-Mimarlık Fakültesi Elektrik-Elektronik Mühendisliği Bölümü, Mikroişlemciler Laboratuarında bulunan bir yol kavşağı için tasarlanmış olan trafik ışığı modelinin sinyalizasyon kontrolü bir mikrodenetleyici (PIC16F877) kullanılarak gerçekleştirilmiştir. Mikrodenetleyici olarak microchip firmasının PIC16F877 adlı denetleycisi kullanılmıştır.

Şekil 1.1 Kontrol devresinin trafik ışığı modeliyle bağlantısı

Trafik ışığı modelinin sinyalizasyon kontrolü daha önce yapılan bir çalışmada EEPROM ile yapılmıştır. Bu çalışmada trafik ışığı modelinin sinyalizasyon kontrolü bir mikrodenetleyci (PIC16F877) ile yapılmıştır. Maket modelde ki sinyal durumları ve süreleri daha önce yapılan çalışmadaki sinyal durum ve süreleri ile aynıdır. Ancak dahaönceki çalışmada gece vakti için ana yolda sarı flaş sinyali görülmektedir. Bu çalışmada ise ana yolda kırmızı flaş sinyali görülmektedir.

BÖLÜM 2

IŞIKLI İŞARETLER

2.1. Işıklı Sinyaller

Trafik akımlarının kontrol altına alınması, şoför, sürücü ve yayalara gerekli bilgilerin verilmesi, ikazların yapılması için diğer trafik işaretleri ile birlikte kullanılan ve genel olarak elektrik ve çeşitli renkli ışıklar ile çalışan trafik işaretlerine ışıklı işaret veya sinyal denilmektedir.

Trafik akımlarının birbirini kesmeleri halinde, gecikmeleri ve kazaları azaltmak için uygun kontrol sistemi kullanmak gerekir. Alt üst geçitler, dur işaretleri, polisle kontrol gibi tedbirleri ile beraber ışıklı işaretler de mevcuttur ve daha çok kullanılmaktadır. Işıklı işaretler aynı anda bütün akımlara geçit hakkı vermezler.

Bugün ışıklı işaretlerde kabul edilen renklerden kırmızı durmak gerektiğini, yeşil yolun açık olduğunu, sarı ise işaret sistemine göre durmayı veya harekete hazır olunmasını ifade etmektedir.

2.1.1. Işıklı işaretlerin faydaları

Işıklı işaretlerin kullanılması halinde elde edilecek başlıca faydalar şunlardır:

• Daha düzenli bir trafik akımı sağlanır.
• Dik açılı kazalar, yaya kazaları gibi bazı tip kazalar azalır.
• Kesişme önlenir, yoğun trafiği zaman zaman durdurarak, zayıf trafiğe de geçiş hakkı verilmiş olur. Taşıt yaya kesişmesi önlenir.
• Çeşitli yönlere yol verilmesi hallerinde elle tatbikata nazaran önemli ekonomi sağlanır.
• Geçiş hakkı vererek şoföre güven verilir.

2.1.2. Işıklı işaretlerin sakıncaları

Işıklı işaretlerin kullanılması halinde görülen başlıca sakıncalar şunlardır:

• Bazı kaza tiplerinde çoğalma olabilir. Arkadan çarpma kazaları gibi
• Sinyaller iyi yerleştirilmemiş ise riayet azalır ve tesiri zayıflar.
• Işık sürelerinin zaman ayarı uygun değilse fazla beklemelere sebep olur, şoförleri bezdirir, riayetsizliğe teşvik eder.

2.1.3. Sinyal devresi

Bir ışıklı işarette bulunan kırmızı, yeşil ve sarı renklerin komple bir devirde haiz oldukları zaman sürelerinin toplamına sinyal devresi denilmektedir. Genel olarak saniye cinsinden verilmektedir. Şartlara ve faz sayısına göre 30~90 saniye olabilmektedir.

2.1.4. Faz

Devre içinde sinyalin kumanda ettiği trafik akımı sayısına faz denilmektedir. Her faz bir trafik akımına geçiş sağlamaktadır. Bir fazlı işaretler kavşaklar arasındaki kesitlerde kullanıldığı gibi sadece bir trafik akımı için kavşaklarda da kullanılabilmektedir. İki fazlı işaretler genel olarak kavşaklarda iki trafik akımını kontrol etmek için kullanılmaktadır. Trafik akımlarının, gerektirdiği şartlara göre üç veya daha fazla sayıda fazlı sinyaller de kullanılabilmektedir.

Faz sayısı kavşağa giren yol sayısına, sola dönecek trafiğe, yaya trafiğine göre tespit edilmektedir. Normal olarak çok fazla sola dönüş olmayan hallerde, dört yol ağzı kavşaklarda iki fazlı devre uygun olmaktadır. Eğer önemli sola dönüş varsa dönüşler için ayrı bir faz ekleyerek üç fazlı devre kullanılmaktadır.

Daha komplike dört veya beş yolun ulaştığı kavşaklarda üç, dört fazlı sinyallere ihtiyaç vardır.

2.1.5. Işık renk süreleri

Bir devre içinde çeşitli renklerin devam ettiği sürelerin sinyal çalışmalarında önemle tayin olunması gerekmektedir. Genel olarak bu süreler ya doğrudan doğruya saniye olarak veya devre uzunluğunun bir yüzdesi olarak verilmektedir.

İlk sinyallerde kullanılan tertipte gerek kırmızı gerek yeşilden sonra sarı yanması dolayısıyla bazı karışıklıklara sebebiyet verdiğinden terkedilmiştir. Bu sistemde sarı ışığı gören şoför durmak mı yoksa hareket etmek mi gerektiğini anlamamaktadır. Daha sonra kullanılan tertipte yeşil veya kırmızı tam sönmeden sarı yanmaktadır. Böylece kırmızıyla sarıyı gören şoför harekete geçeceğini, yeşil ile sarıyı gören şoför ise durulması gerektiğini anlamaktadır. Bu sistem daha emniyetli görünmekte ve kapasite daha hızlı olmaktadır.

2.1.6. Flaş

Işıklı işaretlerden bir kısmı flaş şeklinde olup yanıp sönerler. Daha çok iki renklidirler:

• Kırmızı flaş Bunlar kırmızı renkte yanıp sönerler. Dur işareti manası taşırlar. Bu işaretlere rastlayan şoförün durması, ondan sonra güvenle, dikkatle, yavaşça geçmesi gerekmektedir.

• Sarı flaş: Bu flaş dikkat anlamı taşımaktadır. Bu işarete rastlayan şoförün geçiş hakkı olmakla beraber, dikkatli geçmesi hızını azaltması gerekmektedir.

Flaşlarda dakikada 50~60 devir olmalıdır. Işık süreleri karanlık sürelere eşit olmalıdır. Örneğin dakikada 60 flaş halinde beher flaş yarım saniye olacak ve yarım saniyede sönecektir.

2.1.7. Yeşiller arası periyot

Bir faza ait geçiş hakkının yani yeşil ışığın bitmesi ile onu takip eden diğer faza ait geçiş hakkının başlaması arasında geçen zamana yeşiller arası periyot denilmektedir.

2.2. Işıklı İşaretlerin İdaresi

Işıklı işaretler bir memur tarafından el ile veya devresi önceden ayarlanmak suretiyle otomatik olarak veyahut bizzat trafik ile yani taşıtların tesiri ile otomatik olarak idare edilmektedir.

2.2.1. El ile idare

Işıklı işaretin yanında bulunan bir trafik memuru muhtelif yönlerdeki trafik akımının durumuna, yoğunluğuna göre ışıklı işaret bulunmayan hallerde olduğu gibi bir düğme yardımıyla yeşil ve kırmızı renklere istediği süreyi vererek kumanda etmektedir. Diğer otomatik ışıklı işaretlerde de arıza tıkanma gibi gerekli hallerde el ile idareye ihtiyaç hasıl olabilmektedir.

2.2.2. Devresi önceden ayarlanarak otomatik idare

Bunlara sabit zamanlı sinyaller denilmektedir Trafik akımlarının hacim değerleri sayımlarla önceden tespit olunarak ileride görüleceği gibi hesapla yeşil ve kırmızı ışık süreleri belirlenmiştir. Sinyal bu ayarlanan devreye göre otomatik olarak çalışmaktadır. Bu tatbikatta sinyal ya bütün gün aynı devre ile veya belirli saatlerde değişik devrelerleçalışabilir şekildedir. Bu itibarla sabit zamanlı kabul edilmekle beraber bazı tip sinyallerde devre uzunluğu günün belirli saatlerinde değişik olabilmektedir. Fakat bunun da dahaönceden tespit edilmesi gerekmektedir.

Bu tür sinyallerin, zaman ayarı kolayca yapabilmek, kavşaklar arası koordinasyonu da belirli hızlara uyduğu taktirde uygun ve devamlı akımı sağlayabilmek böylece bir çeşit hız kontrolü de yapabilmek ve nihayet bazı tiplerinde maksimum trafik saatleri gibi belirli saatler için farklı devre uzunluklarının temini gibi avantajları vardır.

Buna mukabil kısa süre ile trafik akımlarının değişiklik gösterdiği hallerde ihtiyaca uydurulamamak, maksimum trafik saatlerine göre ayarlanan sabit devre hallerinde diğer saatlerde gereksiz beklemelere sebep olmak gibi sakıncaları dikkate alınmalıdır

2.2.3. Trafikle idare

Bu tip sinyallerde yeşil devre isteklere göre ayarlanmaktadır. Bunlara genel olarak trafik uydurma sinyali denilmektedir. Ancak tesir çeşitli taşıtlar tarafından yapıldığı gibi bazı tiplerinde yayalar tarafından yapılabilmektedir.

Bu sinyallerde taşıt veya yaya tesiri, dedektör denilen ve sinyali ikaz eden araçlar yardımı ile yapılmaktadır. Sinyalin bulunduğu kavşağa yaklaşan aracı, trafik akımlarının hacim değerlerini zapteden çeşitli dedektörler kullanılmakta olup bunlar sinyalin renkli ışıkları sürelerini trafik ihtiyaçlarına göre ayarlayacak bilgiler vermektedirler.

Böylece en ideal ve en büyük kapasite sağlayan bir ışıklı işaret sistemine ulaşılmıştır. Bunların büyük çoğunluğu taşıt uyarmalı sinyallerdir. Kavşağa ulaşan yollarına göre iki tip tatbikat vardır.

2.2.3.1. Yarı trafik uyarmalı sinyal

Kavşak esas itibarıyla ana yola devamlı açık olup hepsi birden olmamak şartı ile birkaç yola konulan dedektörler yardımıyla gerektiğinde, bu yollara belirli bir süre yeşil yanabilmektedir. Bu tip sinyaller için aşağıdaki hususlar dikkate alınmalıdır.

• Yalnız tali yollara dedektör konulur.
• Ana faz minimum süreli bir yeşil ışığa sahiptir. Bu bitmeden tali yola geçiş verilmez.
• Yan yollardaki dedektörlerin kısa bir kesintiden sonra ana faz yeşile döner ve yeşil devam eder.
• Tali faz minimumu bir yeşile sahiptir. Önceden tasarlanan bir maksimum yeşile kadar tali yolda trafik varsa yeşil devam eder, sonra ana yola minimum yeşil verilir ve gene tali yola döner.
• Her iki taraf için belirli sarılar söz konusudur.

Bu tip sinyaller izole kavşaklarda, dur işareti olan fakat kontrol için yeter görülmeyen tali yolların ana yolları kestiği kavşaklarda kullanılmaktadır.

2.2.3.2. Tam trafik uyarmalı sinyal

Kavşağa ulaşan tüm yollara dedektör konulmaktadır. Bilhassa trafik akımları aynı ve yakın olan yol kavşaklarında dönüşümlü olarak çeşitli yönlere geçiş sağlanmaktadır. Bu sinyallerde dikkat edilecek hususlar şunlardır:

• Yaklaşan yol ağzına dedektör konulacaktır.
• Her faz için bekleyen taşıtların hareket geçmesi için önceden tespit edilen bir başlangıç süresi vardır.
• Yeşil süre her uyarma için başlangıç süresinden sonra belirli bir taşıt uzatması kadar devam eder.
• Akım devam ettikçe taşıt uzatma belirli bir maksimum yeşile kadar gidebilir ve sınırlanır.
• Her faz için bitiş önceden tespit olunur. Her faz bir çağırma düğmesine sahiptir.
• İstek olmazsa yeşil olduğu yerde devam eder.

Taşıt uyarmaları sabit zamanlı işaretlerin gecikmelere sebebiyet verdiği izole kavşaklarda kullanılmaktadır.

2.2.3.3. Trafik uyarmalı işaretlerin faydaları

• Gecikme ve bekletmeleri azaltır.
• Kısa süre ile değişimler özen gösteren trafik akımlarına kolayca uyarlanır.
• Kapasiteyi artırırlar.
• Çok fazlı kavşaklarda bilhassa etkili olurlar.

2.2.3.4. Trafik uyarmalı işaretlerin sakıncaları

• Trafik uyarmalı sinyaller sabit zamanlılardan 4~5 kat daha pahalıdır.
• Trafik uyarmalı kontrolör ve dedektörlerden çok daha komplikedirler.
• Dedektörlerin tesisi masraflı olur. Karlı bölgelerde güçlük çıkarabilir.

2.2.3.5. Dedektörler

Dedektörler, trafik uyarmalı ışıklı işaretlerde yeşil renkli ışığı yani geçiş hakkını almak için işarete haber verme görevini yapan gereçlerdir. Taşıtlar ve bazı hallerde yayalar yol isteklerini ve yeşil ışık beklediklerini, sinyallere haber vermiş olurlar. Birkaç türlü dedektör kullanılmaktadır.

• Hava lastik borular veya mekanik pedallar: Bunlar yol üzerine konulmak suretiyle üzerlerinden tekerlek geçtikçe uyarma görevi yapmaktadırlar.
• Elektrikli dedektörler: Bunlar yol kenarına yada kaplama içine monte edilmekte ve elektrik tesiri ile çalışmaktadırlar.
• Manyetik ve radar dedektörler: Bu tip dedektörler son zamanlarda çok rağbet görmekte olup yol üzerine monte edilmekte, manyetik ve radar sisteminde faaliyet göstermektedir.
• Yaya dedektörü: Yol kenarına monte edilen ve üzerinde el ile basılan düğmeler bulunan dedektörlerdir.

2.3. Kontrolör

Sinyallerin işlemesini temin ve kontrol için kullanılan elektrikli cihazlardır. Kavşak durumuna, kabul edilen şartlara göre çeşitli kontrolörler vardır. Birlikte çalışan senkronize veya koordine sistemlerde bütün sistemi otomatik olarak idare edenlere (ana kontrolör) ve sisteme bağlı olarak bir kavşağı idare edenlere yardımcı kontrolör denilmektedir. Bir kontrolörde zaman ayarını otomatik olarak yapan bir zaman ayarı cihazı vardır. Bunlar ana kontrolörde toplam devreyi ayarlar ve senkronizasyon yani birlikte çalışmayı temin ederler. Zaman ayarlı cihazlar ikili-üçlü olup iki zamanlı veya üç zamanlı sistemlere göreçalışma imkanı sağlarlar. Mekanik veya elektrikle, otomatik olarak çalışırlar.

2.4. Pratik Devre Ve Renk Sürelerinin Tayini

Işıklı işaretlerin devre uzunluğu ve çeşitleri renkler için kabul edilmesi gereken sürelerin hesap ve tayini için deneyler ve araştırmalar yapılmaktadır.

Pratik deneyler, normal genişlikteki yolların tayin ettiği dört yol ağzı kavşaklarda, yoğun bir trafik olmayan haller için ışık devresinin 25~50 saniye arasında bulunmasının uygun ve yeterli olduğunu göstermektedir. Devre süresinin fazla uzun olmaması arzu edilir. Yollar fazla geniş ise, yayaların geçişi için daha uzun zamana ihtiyaç hasıl olacak veya sol dönüş yapan vasıtalar varsa, kavşağın tahliyesi güç olacak ve devre uzunluğunun daha fazla olması gerekecektir. Bu şartlarda ise 45~60 saniye olabilmektedir. Faz sayısı çok ise üç yol veya daha çok hallerde 55~70 saniyeye kadar çıkabilmektedir.

Çeşitli renk süreleri kısa veya uzun süreli trafik sayımlarına dayanmalıdır. Normal şartlarda ve sabah akşam maksimum saatlerde yapılacak sayımlar zaman ayarında rol oynamaktadır.

Her iki yolda şerit sayısı aynı ise karşılıklı trafik değerlerine göre ayarlanmaktadır. Verilen belirli bir trafik hacminin geçirilmesi için geçerli yeşil ışık süresi kavşakta bu trafiğe arz edilen kullanılabilir şerit sayısıyla ters orantılıdır. Trafik şartları, dönüşler, yayalar vs… uygun ışık süreleri verilmek suretiyle ayarlanmaktadır.

Bu metotlarda yaya geçidi olan kavşaklar için yayaların geçişleri de dikkate alınmaktadır. Yayaların yolu enine geçişleri için gereken zamanlar minimum kırmızı süreler olarak kabul edilmekte ve taşıt sayısına göre yapılacak hesap sonuçları düzeltilmekte ve ayarlanmaktadır.

BÖLÜM 3

MİKRODENETLEYİCİLER VE PIC16F877

3.1. Mikrodenetleyiciler Hakkında Genel Bilgi

Bir mikrodenetleyici kabaca,bilgisayar içerisinde bulunması gereken temel bileşenlerden RAM, I/O gibi bileşenleri içerisinde barındıran tek bir entegre devredir. Böyle olunca bilgisayar kontrolü gerektiren elektronik uygulamalarda mikrodenetleyici kullanma eğilimi artmaktadır. Çünkü bir mikroişlemci ile kontrol edilecek bir sistemi kurmak için, CPU, RAM, I/O ve bu birimler arasındaki veri alış-verişini sağlamak gerekir. Oysa aynı iş için bir mikrodenetleyici kullanmak yeterli olmaktadır. Bu da maliyet ve kolaylık anlamında mikrodenetleyicinin seçiminde etkili olmaktadır.

Mikrodenetleyiciler, kameralarda, otomobillerde, fax cihazlarında, fotokopi, radyo, cep telefonları, TV, bazı oyuncaklar ve daha bir çok bilgisayar teknolojisi gerektiren alanlarda kullanılmaktadır. Şekil 3.1’de bir mikrodenetleyiciye ait blok diyagram görülmektedir.

Şekil 3.1 Mikrodenetleyicili bir sisteme ait blok diyagramı

Çeşitli firmalar tarafından üretilmiş birbirinden farklı mikrodenetleyiciler bulunmaktadır. Bunlar arasında yapısal olarak küçük farklar olmasına karşın genel olarak aynı işi gerçekleştirirler.

Bir mikrodenetleyicinin seçiminde hangi özelliklerin olması isteniyorsa önceden bunların tespit edilmesi gerekmektedir. Bu özellikler şu şekilde olabilir.

• Programlanabilir dijital paralel giriş / çıkış,
• Programlanabilir analog giriş / çıkış,
• Seri giriş/çıkış,
• Motor veya servo kontrol için pals sinyali çıkışı,
• Harici giriş vasıtasıyla kesme,
• Timer vasıtasıyla kesme,
• Harici bellek arabirimi,
• Harici bus arabirimi,
• Dahili bellek tipi seçenekleri,
• Dahili RAM seçeneği,
• Kayan nokta hesaplaması.

3.2. PIC Mikrodenetleyicisi

PIC adını, peripheral interface controller cümlesindeki kelimelerin baş harflerinden almaktadır. Türkçe karşılığı, çevresel üniteleri denetleyici arabirim anlamına gelmektedir. PIC gerçekten de çevresel üniteler adı verilen lamba, motor, röle, ısı ve ışık sensörü gibi I/O elemanlarının kontrolünü yapabilmektedir. Bunun yanında bir PIC’i programlamak için kullanılacak olan komutlar oldukça basit ve sayı olarak da azdır.

3.2.1. PIC mikrodenetleyicisinin tercih nedenleri

• Maliyetinin oldukça ucuz olması,
• Yüksek frekanslarda çalışabilmesi,
• Standby durumunda çok düşük akım çekmesi,
• Aynı anda birçok işlemi kod sıkıştırma özelliği sayesinde yapabilmesi,
• Yazılımın internetten ücretsiz olarak temin edilebilmesi,
• Çok az donanıma ihtiyaç duyması,
• Kullanıcı kesiminin fazla olması,
• PIC’e göre diğer mikrodenetleyicilerde veriyi taşıyan bir tek bus bulunması, dolayısıyla diğer mikrodenetleyicilerden iki kat daha hızlı olması,
• İnterrupt kapasitesi ve 14 bit komut işleme hafızasına sahip olması.

Ayrıca bunun yanında birçok PIC mikrodenetleyicisinin program belleği FLASH teknolojisi ile üretilmektedir. FLASH MEMORY teknolojisi ile üretilen bir belleğe yüklenen program entegreye uygulanan enerji kesilse dahi silinmemektedir. Eğer istenirse bu tip belleğe, eski program silinip, yeniden program yazılabilmektedir. FLASH bellekler bu özelliği gereği EEPROM ile aynı görünmektedir. Bazı üreticiler EEPROM belleğe FLASHROM da demektedir.

Bu da kullanıcı açısından çok büyük kolaylıklar sağlamaktadır. Böylece programlamaya yeni başlayanlar, yaptığı hatalardan dolayı entegreyi atmak zorunda kalmamaktadır.

3.2.2. PIC’e program yüklemek

PIC’e program yüklemek için gerekli olan şeyler aşağıda maddeler halinde sıralanmıştır.

• IBM uyumlu bir bilgisayara sahip olmak ve temel kullanımlarını bilmek,
• Bir metin editörü kullanmasını bilmek,
• PIC assembler derleyicisine sahip olmak,
• PIC programlayıcı donanımına sahip olmak,
• PIC programlayıcı yazılımına sahip olmak,
• PIC mikrodenetleyicisine sahip olmak,
• Breadboard, güç kaynağı ve çeşitli elektronik elemanlara sahip olmak.

Bu bitirme ödevinde sinyalizasyon kontrolü için PIC16F877 mikrodenetleyicisi kullanılmıştır.

3.3. PIC16F877 Hakkında Genel Bilgi

PIC16F877, en popüler PIC işlemcisi olan PIC16F84’ten sonra kullanıcılarına yeni ve gelişmiş olanaklar sunmasıyla hemen göze çarpmaktadır. Program belleği FLASH ROM olan PIC16F877’de yüklenen program PIC16F84’te olduğu gibi elektriksel olarak silinip yeniden yüklenebilmektedir. Çizelge 3.1’de PIC16F877 ve PIC16F84 işlemcileri arasında ki özellik karşılaştırması yapılmıştır.

ÖZELLİKLER PIC16F877 PIC 16F84
Çalışma hızı DC - 20 MHz DC - 10 MHz
Program belleği 8Kx14 word Flash ROM 1Kx14 word Flash ROM
EEPROM Veri belleği 256 byte 64 byte
Kullanıcı RAM 368x8 byte 68x8 byte
Giriş/Çıkış port sayısı 33 13
Timer Timer0, Timer1, Timer2 Timer0
A/D çevirici 8 kanal 10 bit YOK
Capture/Comp/PWM 16 bit Compare 10 bit PWM çözünürlük YOK
Seri çevresel arayüz SPI(Master) ve I2C(Master/Slave) modunda SPI portu YOK
Paralel slave port 8 bit, harici RD,WR ve CS kontrollu YOK

Çizelge 3.1 PIC16F877 ile PIC16F84’ün karşılaştırılması

Özellikle 16C6X ve 16C7X ailesinin tüm özelliklerini barındırması, 16F877’yi kod geliştirmede de ideal bir çözüm olarak gündeme getirmektedir. Konfigürasyon bitlerine dikkat etmek şartıyla C6X veya C7X ailesinden herhangi bir işlemci için geliştirilen kod hemen hiçbir değişikliğe tabi tutulmadan PIC16F877’e yüklenebilmektedir. Bunun yanı sıra PIC16F877, 16C74, ve 16C77 işlemcileriyle de bire bir bacak uyumu sağlamaktadır.

3.4. PIC16F877 Portlarının Fonksiyonları

3.4.1. Porta :

Her bir biti bağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir. 6 bit genişliğinde olup, RA0, RA1, RA2, RA3, RA4 ve RA5 bitleri analog / sayısal çevirici olarak konfigüre edilebilmektedir. Buna ek olarak RA2 ve RA3 gerilim referansı olarak da konfigüre edilebilmektedir (bu durumda bu bitler aynı anda A/D çevirici olarak kullanılamamaktadır). İlgili yazmaçlar ve adresleri aşağıdaki verilmiştir.

PORTA 0×05  
TRISA 0×85 ; giriş/çıkış belirleme yazmacı
ADCON1 0×9F ; RA portlarının A/D, referans gerilimi veya sayısal giriş / çıkış olarak seçiminde kullanılmaktadır.

İşlemciye ilk defa gerilim uygulandığında RA4 hariç diğer beş PORTA biti A/D çevirici olarak kullanılmaktadır. Eğer RA portunun bazı bitleri sayısal giriş/çıkış olarak kullanmak istenirse ADCON1 yazmacında değişiklik yapmak gerekmektedir.

3.4.2. Portb:

Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğinde olup, PORTB’nin her bacağı dahili bir dirençle VDD’ye bağlı bulunmaktadır (weak pull-up). Ancak OPTION yazmacının 7. bitini 0 yapılarak B portunun bu özelliği etkinleştirilebilmektedir.

RB4-RB7 bacakları aynı zamanda bacakların sayısal durumlarında bir değişiklik olduğunda INTCON yazmacının 0. biti olan RBIF bayrağını 1 yaparak kesme oluşturmaktadır. Bu özelliği, işlemci SLEEP konumundayken, devreye bağlı tuş takımının her hangi bir tuşa basıldığında işlemcinin yeniden etkinleşmesi için kullanabilmektedir. Bütün bunların yanı sıra RB6 ve RB7 yüksek gerilim programlama, RB3 ise düşük gerilim programlama modlarında da kullanılmaktadır. İlgili yazmaçlar ve adresleri aşağıdaki gibidir.

PORTA 0×06  
TRISB 0×86 ; giriş/çıkış belirleme yazmacı
OPTION_REG 0×81 , 0×181

3.4.3. Portc :

Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğinde olup, tüm port bacakları Schmitt Trigger girişlidir. TRISE yazmacının 4. biti olan PSPMODE bitini 1 yaparak “parallel slave mode” da kullanılabimektedir. Bu fonksiyon aracılığıyla 8 bit genişliğindeki her hangi bir mikroişlemci bus’ına bağlanabilmektedir. İlgili yazmaçlar ve adresleri aşağıdaki verilmiştir.

PORTC 0×07  
TRISC 0×087 ; giriş/çıkış belirleme yazmacı

3.4.4. Portd :

Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğinde olup, tüm port bacakları Schmitt Trigger girişlidir. TRISE yazmacının 4.biti olan PSPMODE bitini 1 yaparak “parallel slave mode”da kullanılabilmektedir. Bu fonksiyon aracılığıyla 8 bit genişliğindeki herhangi bir mikroişlemci bus’ına bağlanabilir.İlgili yazmaçlar ve adresleri aşağıdaki verilmiştir.

PORTD 0×08
TRISD 0×88
TRISE 0×89

3.4.5. Porte :

Her bir biti bağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir. 3 bit genişliğinde olup, RE0, RE1 ve RE2 bacaklarında Schmitt Trigger giriş tamponları bulunmaktadır. Her bir bacak analog / sayısal çevirici olarak konfigüre edilebilmektedir. PORTD parallel slave port olarak konfigüre edildiğinde, RE0, RE1 ve RE2 bacakları PORTD’nin bağlandığı mikroişlemci bus’ına sırasıyla READ, WRITE ve CHIP SELECT kontrol girişleri olarak kullanılmaktadır. Bunun için TRISE uygun biçimde ayarlanmalıdır. İlgili yazmaçlar ve adresleri aşağıdaki gibidir.

PORTE 0×09  
TRISE 0×89 ; giriş / çıkış belirleme yazmacı
ADCON1 0×9F ; RE portlarının A/D veya sayısal giriş/çıkış olarak seçiminde kullanılmaktadır.

İşlemciye ilk defa gerilim uygulandığında üç PORTE biti de A/D çeviricidir. RE portunun bazı bitlerini sayısal giriş/çıkış olarak kullanmak istenirse ADCON1 yazmacında değişiklik yapmak gerekmektedir.

3.5. Program ve Kullanıcı RAM Bellek Organizasyonu

PIC16F877’de üç bellek bloğu bulunmaktadır. Program ve kullanıcı veri belleği ayrı bus yapısına sahiptir ve aynı anda erişilebilmektedir. PIC16F877’de 13 bitlik bir program sayacı vardır ve 8K×14 word adreslemeye yeterlidir. Reset vektörü 0×00’da kesme vektörüyse 0×04’de yer almaktadır.Kullanıcı veri belleği birden fazla yazmaç bank’ına bölünmüştür. Bu yazmaç banklarında hem genel amaçlı yazmaçlar hem de özel fonksiyon yazmaçları (SFR) bulunmaktadır. Yazmaç bank’ını seçmek için STATUS yazmacındaki RP1 ve RP0 bitleri kullanılmaktadır. PIC16F84’de iki yazmaç bankası olduğunu ve yalnızca RP0 bitini ayarlamak suretiyle ilgili yazmaç bank’ının seçildiğine dikkat edilmelidir ( Çizelge 3.2 ).

Çizelge 3.2 Status yazmacı

IRP RP1 RP0 TO PD Z DC C
Bit7             Bit0

< RP1, RP0 > bitlerini aşağıdaki gibi ayarlayarak istenilen yazmaç bank’ına erişilebilmektedir. Her yazmaç bank’ı 128 byte genişliğindedir. ( 7Fh ).

Çizelge 3.3 Bank seçimi

RP1
RP0 BANK
0
0 BANK0
0
1 BANK1
1
0 BANK2
1 1 BANK3

3.6. Özel Fonksiyonlar

3.6.1 Paralel slave port:

TRISE yazmacının PSPMODE biti 1 yapılarak PORTD 8 bit genişliğinde mikroişlemci portu olarak kullanılabilmektedir. Bu arada RE0, RE1 ve RE2’yi TRISE ve ADCON1 yazmaçlarında ilgili ayarları yaparak sayısal giriş olarak da tanımlaması gerekmektedir. Böylece harici bir mikroişlemci, RE0, RE1 ve RE2’yi kontrol olarak kullanarak 8 bitlik veri bus’ına bağlı PIC16F877’nin PORTD’sine hem veri yazılabilmekte hem de okunabilmektedir.

3.6.2. Usart :

USART, yani senkron/asenkron alıcı verici PIC16F877’deki iki seri giriş/çıkış modülünden biridir. Seri iletişim ara yüzü ( SCI:serial comm.interface ) olarak da bilinen USART, monitör veya PC gibi aygıtlara tam çift yönlü asenkron bağlantıda kullanılmaküzere konfigüre edilebilmektedir. A/D veya D/A arayüzlerine, seri kullanılmak üzere konfigüre edilebilmektedir. USART aşağıdaki gibi konfigüre edilebilmektedir.

• Asenkron : Tam çift yönlü ( full duplex )
• Senkron : Master, yarım çift yönlü ( half duplex )
• Senkron : Slave, yarım çift yönlü

RC6 verici, RC7 ise alıcı port olarak kullanılmaktadır. RCSTA ( 0×18 ) ve TXSTA (0×98 ) yazmaçları konfigürasyonda kullanılmaktadır.

3.6.3. Master synchronous serial port (MSSP):

MSSP modülü, diğer çevre birimleri veya mikroişlemcilerle seri iletişimde kullanılmaktadır. Bu çevre birimleri seri EEPROM, kaydırmalı yazmaçlar ( shift register ), gösterge sürücüleri, A/D çeviriciler vb. olabilmektedir.

RC5: Seri veri çıkışı (SDO:Serial data out)
RC4: Seri veri girişi (SDI: Serial data in)
RC3: Seri saat (SCK:Serial clock)

Bu modlardan birine göre konfigüre etmek içinse SSPSTAT (senkron seri port durum yazmacı, 0×94), SSPCON (senkron seri porte kontrol yazmacı, 0×14) ve SSPCON2 (senkron seri porte kontrol yazmacı 2, 0×91) yazmaçları ayarlanmalıdır.

3.6.4. Analog/sayısal çevirici modülü:

A/D modülü 16C7× ailesinden farklı olarak 10 bittir. Toplam 8 A/D kanal vardır. PIC16F877’nin güzel bir özelliği de işlemci SLEEP modundayken bile A/D çeviricinin geri planda çalışmasıdır. A/D kanalları için RA4 hariç diğer RA portları ve RE portları kullanılabilmektedir. İlgili yazmaçlar ve adresleri aşağıdaki verilmiştir.

ADRESH 0×1E ; A / D sonuç yazmacı ( high register )
ADRESL 0×9E ; A / D sonuç yazmacı ( low register )
ADCON0 0×1F ; A / D kontrol yazmacı0
ADON1 0×9F ; A / D kontrol yazmacı1

3.6.5. Capture / compare ve pwm modülü:

Her capture/compare ve pwm modülü 16 bitlik yakalama (capture) yazmacı, 16 bitlik karşılaştırma (compare) yazmacı veya 16 bitlik pwm (Darbe genişlik modülasyon) yazmacı olarak kullanılabilmektedir.

Yakalama (capture) modunda, TMR1 yazmacının değeri RC2/CCP1 bacağının durumunda bir değişme olduğunda CCPR1H:CCPR1L yazmaçlarına yazılır ve PIR1 yazmacının 2. biti olan CCP1IF kesme bayrağı 1 olur. RC2 bacağının durumu, her düşen kenarda, her yükselen kenarda, her yükselen 4. veya 16. kenarda kontrol edilecek şekilde CCP1CON yazmacı aracılığıyla ayarlanarak konfigüre edilebilmektedir.

Karşılaştırma (compare) moduysa CCPR1 yazmacındaki 16 bitlik değer düzenli olarak TMR1 yazmaç değeriyle karşılaştırılır ve bir eşitlik olduğunda RC2/CCP1 bacağı CCP1CON yazmacında yapılan ayara göre 1, 0 olmakta veya durumunu korumaktadır. PWM modundaysa RC2 / CCP1 bacağı 10 bit çözünürlükte darbe genişlik modülasyonlu bir sinyal üretecek şekilde konfigüre edilebilmektedir. PR2 yazmacı darbe genişlik periyodunun tayininde kullanılmaktadır. İlgili yazmaçlar ve adresleri aşağıdaki verilmiştir.

CCPR1H 0×16 ; Yakalama / karşılaştırma yazmacı ( High register )
CCPR1L 0×15 ; Yakalama / karşılaştırma yazmacı ( Low register )
CCP1CON 0×17 ; Kontrol yazmacı
PR2 0×92 ; PWM çıkış yazmacı
TMR1L 0×0E ; TMR1 yazmacı ( High register )
TMR1H 0×0F ; TMR1 yazmacı ( Low register )

3.7. RAM Bellek

PIC16F877’nin 0x00~7Fh adres aralığına ayrılmış olan RAM belleği vardır. Bu bellek içerisindeki file registerleri (yazmaç) içerisine yerleştirilen veriler PIC CPU’sununçalışmasını kontrol etmektedir. File register (yazmaç) adı verilen özel veri alanlarının dışında kalan diğer bellek alanları, normal RAM bellek olarak kullanılırlar. Çizelge 3.4’de PIC16F877’nin kullanıcı RAM bellek haritası görülmektedir.

Çizelge3.4 PIC16F877’nin RAM bellek haritası

3.8. PIC16F877’nin Besleme Uçları ve Beslenmesi

PIC16F877’nin besleme gerilimi 11, 12 ve 31, 32 numaralı pinlerden uygulanmaktadır. 11 ve 32 numaralı Vdd ucu +5 V’a ve 12, 31 numaralı Vss ucu toprağa bağlanmaktadır. PIC’e ilk defa enerji verildiği anda meydana gelebilecek gerilim dalgalanmaları nedeniyle, oluşabilecek istenmeyen arızaları önlemek amacıyla 100nF’lık dekuplaj kondansatörünün +5V’luk güç kaynağının bağlı olduğu 10Kohm’luk dirence paralel bağlı olması gerekmektedir. PIC’ler CMOS teknolojisi ile üretildiklerinden 2 ila 6 volt arasındaçalışabilmektedirler. +5 v’luk bir gerilim ise ideal bir değer olmaktadır.

3.9. PIC16F877’nin Reset Uçları

Kullanıcının programı kasti olarak kesip başlangıca döndürebilmesi için PIC’in 1 numaralı ucu MCLR olarak kullanılmaktadır. MCLR ucuna 0 Volt uygulandığında programın çalışması başlangıç adresine dönmektedir. Programın ilk başlangıç adresinden itibaren tekrar çalışabilmesi için aynı uca +5 v gerilim uygulanmaktadır.

3.10. PIC16F877’nin Clock Uçları ve Osilatör Tipleri

PIC16CXX mikrodenetleyicilerinde 4 çeşit osilatör bulunmaktadır. Kullanıcı bu 4 çeşitten birini seçerek iki konfigürasyon bitini (FOSC1 ve FOSC2) programlamaktadır. Bu osilatör çeşitleri çizelgede verilmiştir. PIC16F877’de clock uçları 13 ve 14 no'lu pinlerdir. Hazırlanacak olan PIC programlarında kullanılan osilatör tipi PIC programının çalışma hızını ve hassasiyetini etkileyeceğinden dolayı amaca uygun bir osilatör devresi kullanılmalıdır. Çizelge 3.4’de farklı osilatör çeşitleri ve özellikleri görülmektedir. Osilatör tipinin seçiminde dikkat edilecek bir başka nokta ise, seçilecek olan osilatörün kullanılan PIC’in özelliğine uygun olarak seçilmesidir. Örnek verilecek olursa 10MHzçalışma frekansına sahip bir PIC16F877 için 20MHz’lik bir osilatör kullanmak doğru olmaz. Fakat daha düşük bir frekans değeri ile çalışan bir osilatör devresi kullanılabilir.Çizelge 3.5 ‘de frekansa göre kondansatör seçimi gösterilmiştir.

OSİLATÖR TİPİ FREKANS KONDANSATÖR
LP 32KHz 33-68pF
  200 KHz 15-47pF
  100KHz 47-100pF
XT 500KHz 20-68pF
  1MHz 15-68 pF
  2MHz 15-47 pF
  4MHz 15-33 pF
HS 8MHz 15-47 pF
  20MHz 15-47 pF

Çizelge 3.5 Frekansa göre kondansatör seçimi

3.10.1. Kristal osilatör / seramik rezonatör

XT, LP ve HS modları, RC osilatörlere nazaran çok daha hassastırlar. Bu modlar, kristal osilatör veya rezonatörlerin, OSC1/CLKIN ve OSC2/CLKOUT uçlarına bağlanmalarıyla kurulur. Çizelge 3.5’de hangi frekansta kaç pF’lık kondansatör kullanılması gerektiği belirtilmiştir.

3.10.2. RC osilatör

Zamanlamanın çok hassas olmadığı durumlarda RC ikilisi osilatör kaynağı olarak kullanılmaktadır. RC osilatör, maliyetin azaltılmasını sağlamaktadır. Kullanıcı dış R ve C elemanlarının toleransı nedeniyle meydana gelen değişiklikleri de dikkate almalıdır. Direncin değeri 3 ila 100 Kohm arasında seçilmelidir. 1 Mohm gibi yüksek direnç değerleri osilatörü gürültü ve nem gibi çevresel etkilere karşı duyarlı hale getirmektedir. 2,2 Kohm değerinin altında ise, osilatör kararsız hale gelip hatta tamamıyla durabilmektedir.

Şekil 3.2 PIC16F877’nin pin görünüşü

BÖLÜM 4

TRAFİK IŞIKLARININ KONTROLÜ

4.1.Kavşak Modeli

Niğde Üniversitesi, Mühendislik-Mimarlık Fakültesi Elektrik-Elektronik Mühendisliği Bölümü, Mikroişlemciler Laboratuarında bulunan bir yol kavşağı için tasarlanmış olan trafik ışığı modeli şekil 4.1’de görülmektedir. Şekilde görülen sembollerin anlamları şöyledir.(n = 1,2,…10)

Kn : Ana yolda ‘n’ numaralı kırmızı sinyal lambası yanıyor (K1, K2 gibi).
Sn : Ana yolda ‘n’ numaralı sarı sinyal lambası yanıyor (S1, S2 gibi).
Yn : Ana yolda ‘n’ numaralı yeşil sinyal lambası yanıyor (Y1, Y2 gibi).
KYn : Tali yolda ‘n’ numaralı kırmızı sinyal lambası yanıyor (KY1, KY2 gibi).
YYn : Tali yolda ‘n’ numaralı yeşil sinyal lambası yanıyor (YY1, YY2 gibi).

Şekil 4.1 Bir yol kavşağı için trafik ışığı modeli

4.2. Renk Sürelerinin Tayini

Şekil 4.2’de ki diyagram trafik ışığı modeli için trafik akışı ve zamanlamasını göstermektedir. Eğer üçüncü yolda araba yoksa diyagramda B akışı izlenecek aksi taktirde A akışı izlenecektir.

K: Kırmızı sinyal lambası yanıyor.
Y: Yeşil sinyal lambası yanıyor.
S: Sarı sinyal lambası yanıyor.
K+S: Kırmızı ile beraber sarı sinyal lambası yanıyor.

Şekil 4.2 Trafik akışı ve zamanlaması

Yukarıdaki kavşak modelinin renk süreleri göz önüne alınarak çizelge 4.1’de bir doğruluk tablosu belirlenmiştir. Bu tablodan yola çıkılarak hangi yolda hangi ışık sinyalinin ne kadar bir süre yanık kalacağı belirlenmiştir. Ayrıca gece durumunda lambalar bu döngüden çıkacak ve daima kırmızı renkte flaş yapacaktır. Bu tablodaki değerler ve gece durumu göz önüne alınarak PICBASIC PRO programlama dili aracılığıyla program yazılmıştır. Bu programın kodları 5.bölümün içeriğine alınmıştır. Bu bölümde daha çok kumanda devresinin donanım kısmından bahsedilmiştir.

Çizelge 4.1 Doğruluk tablosu

  1.yol 2.yol 3.yol 4.yol
SÜRE K1 S1 Y1 Ky1 Yy1 K4 S4 Y4 Ky4 Yy4 K1 S1 Y1 Ky1 Yy1 K4 S4 Y4 Ky4 Yy4
21sn 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0
2sn 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 0 1 0
20sn 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 1 0 0 0 1
Kontrol yapılacak
2sn 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 0
17sn 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0
2sn 1 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0   1 0 1 0
Program başına dönülecek
2sn 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0
6sn 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1
2sn 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0 1 1 0 1 0
9sn 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0
2sn 1 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 0 1 0
Program başına dönülecek
IDE No 1 2 3 4 5 10 11 12 13 14 23 24 25 26 27 28 29 30 31 32

4.3. PIC16F877 ile Kumanda Devresi Tasarımı

Bu çalışmada şekil 4.1’de görülen trafik ışığı için sinyalizasyon kontrolü PIC16F877 mikrodenetleyicisi ile gerçekleştirilmiştir. Hangi ışığın hangi yolda ne kadar süreyle yanacağı çizelge 4.1’de belirtildiği gibidir. Burada dikkat edilecek nokta 3. yolda ki mikroswitch’dir. Eğer bu maket modeldeki mikroswitch’e en az 5sn basılmış ise 2. yoldan sonra 3.yola da geçiş hakkı verilmesi gerekir. Aksi taktirde 3.yola geçiş hakkı tanınmayacaktır.

PIC16F877 için gerekli olan harici elemanlar dikkate alınarak, kullanılan elemanlar aşağıda sıralanmış ve devre şeması şekil 4.3’de gösterilmiştir.

• PIC16f877 mikrodenetleyicisi
• 4 Mhz değerinde bir kristal
• 22pF ve 100nF’lık kondansatörler
• 10Kohm, 470ohm, 100 ohm, 4.7Kohm,1Kohm’luk dirençler
• 40 pinlik IDE soket
• BC556 transistör
• On-off, reset ve gece butonu
• +5V’luk güç kaynağı

Şekil 4.3 Mikrodenetleyicili kumanda devre şeması

Bu maket modelde IDE soketin 35 numaralı pinine bağlı bulunan mikroswitch’in PIC’e bağlantısı seri durumdadır. Oysa tüm switchler PIC’deki PULL UP özelliğinden dolayı PIC’e paralel bağlanırlar. Bunun anlamı eğer mikroswitch’e basılmamış ise PIC’in ilgili bacağına lojik-1 aksi taktirde lojik-0 gitmektedir. Ama maket modeldeki switch seri PIC’e seri gelmektedir.

Maket modeldeki mikroswitch açık konumdayken PIC’in ilgili bacağına, PORTB.0, lojik-1 gelmektedir. Böyle olunca mikroswitch’e basılsa da basılmasada daima lojik-1 bilgisi gelmektedir. Bu da bacağın lojik durumunun kontrol edilmesini engellemektedir. Bunuönlemek için PIC’in ilgili bacağı ile mikroswitch arasına BC556 (pnp) tipinde bir transistör yerleştirilip ve transistörün kollektröründen +5 V gerilim uygulanmıştır. Transistörün beyzi tetiklendiğinde (mikroswitch’e basıldığında) PIC’in ilgili bacağına, PORTB.0, lojik-1 bilgisi gelmekte aksi halde PIC’in ilgili bacağına,PORTB.0, lojik-0 bilgisi gelmektedir. Devre şemasının baskılı devresi çıkarılarak çalıştığı gözlemlenmiştir. PIC’e yazılacak programın içeriği, kodları ve hangi yollar ile PIC’e yüklenebileceği bölüm 5’te teferruatlı bir şekilde anlatılmıştır.

4.4. Sinyal Lambalarının IDE Konnektöre Bağlantıları

Maket modelde bulunan sinyal lambalarının bağlantıları, 40 pinlik bir IDE konnnektöre yapılmıştır. Çizelge 4.2’de sinyal lambalarının, beslemenin, topraklamanın (GND) ve mikroswitch’in hangi pine bağlantısının yapılacağına dair bilgiler bulunmaktadır.

Çizelge 4.2 Sinyal lambalarının IDE konnektöre bağlantıları

Işık ve diğer
Simgeler
IDE No Işık ve diğer
Simgeler
IDE No
K1 1 K7 21
S1 2 Y7 22
Y1 3 K8 23
KY1 4 S8 24
YY1 5 Y8 25
K2 6 KY8 26
Y2 7 YY8 27
K3 8 K9 28
Y3 9 S9 29
K4 10 Y9 30
S4 11 KY9 31
Y4 12 YY9 32
KY4 13 K10 33
YY4 14 Y10 34
K5 15 Microswitch 35
S5 16 GND 36
Y5 17 - 37
K6 18 - 38
S6 19 GND 39
Y6 20 GND 40

BÖLÜM 5

PICBASIC PRO İLE PROGRAMLAMA

5.1. PICBASIC PRO Hakkında Genel Bilgi

Üst seviyeli programlama dilleri (Örn: PICBASIC PRO) sayesinde çok daha rahat ve hızlı bir şekilde programlama yapılabilmektedir. Ancak bu programlar çok karmaşık sistemlerinçözümünde yetersiz kalabilmektedir. Yüksek seviyeli bu programlama dilleri neyse ki assembly dili komutları ile birlikte kullanılabilmektedir. Bu durumda yüksek seviyeli bir PIC programlama dili ve PIC assembly dili birlikte kullanıldığında bu sorun ortadan kalkmaktadır. Yüksek seviyeli bu programlama dilinin (PICBASIC PRO) yararı özellikle bu çalışmada görülmüştür.

5.2. PICBASIC PRO Komut Seti

PIC BASIC’İN komut seti BASIC programlama dilinin komut setinden alınmıştır. BASIC programlama dilinde olmayan komutlar da mevcuttur. Çizelge 5.1’de PICBASIC PRO komutları bulunmaktadır.

Çizelge 5.1 PICBASIC PRO komut seti

@ END NAP S ELECT CASE
ADCIN FOR…NEXT ON DEBUG SERIN
ASM…ENDASM FREQOUT ON NTERRUPT SERIN2
BRANCH GOSUB OUTPUT SEROUT
BRANCHL GOTO OWIN SEROUT2
BUTTON HIGH OWOUT SHIFTIN
CALL HPWM PAUSE SHIFTOUT
CLEAR HSERIN PAUSEUS SLEEP
CLEARWDT HSEROUT PEEK SOUND
COUNT I2CREAD POKE STOP
DATA I2CWRITE POT SWAP
DEBUG IF…THEN PULSIN TOGGLE
DEBUGIN INPUT PULSOUT USBIN
DISABLE LCDIN PWM USBINIT
DESABLE DEBUG LCDOUT RANDOM USBOUT
DISABLE INTERRUPT
LET RCTIME WHILE…WEND
DTMFOUT LOOKDOWN READ WRITE
EEPROM LOOKDOWN2 READCODE WRITECODE
ENABLE LOOKUP RESUME XIN
ENABLE DEBUG LOOKUP2 RETURN XOUT

PICBASIC PRO programlama dilinin tüm yönleriyle açıklanması bir kitap konusu olacağından burada sadece bu çalışma için gerekli olan komutlar ve bunların özelliklerinden bahsedilmiştir.

5.2.1. Değişkenler ( Variables )

PICBASIC PRO programlama dilinde üç tip değişken tipi kullanılmaktadır. Değişkenler
BIT, BYTE veya WORD büyüklüğünde olabilmektedir. Örneğin:
K VAR BYTE (Byte büyüklüğünde K değişkeni)

5.2.2. Etiketler ( Labels )

Etiketler GOTO veya GOSUB gibi komutlara referans teşkil etmektedirler. Bu komutların icrasından sonra program etiketle belirtilen satıra dallanmaktadır. Etiketler herhangi bir kelime olabilir ve sonuna iki nokta üst üste (:) konulmalıdır. Örneğin:
Etiket:HIGH PORTB.5

5.2.3. Numerik sabitler ( Numeric constants )

Nümerik sabitler üç şekilde tanımlanabilmektedir. Bunlar decimal, binary ve hexadecimal‘dir. Binary değer tanımlanırken değerin başına ‘%’ ve hexadecimal değerin başına ‘$’işareti konulmaktadır. Decimal değer tanımlanırken herhangi bir işaret kullanılmamaktadır.Örneğin:

100 : Decimal değer .
%100 : Decimal 4 için binary değer.
$100 : Decimal 256 için hexadecimal değer.

5.2.4. Portlar

PIC’in herhangi bir portunun istenilen pini giriş yada çıkış olarak tanımlanabilmektedir. Daha sonra istenilen değer ilgili porta yüklenilebilir. Değerin porta’ya yüklenmesi için farklı yollar vardır.

Örneğin:

TRISB = 0 : Portb’nin tüm pinleri çıkış olarak tanımlanmaktadır.
TRISA=1 : Portb’nin tüm pinleri giriş olarak tanımlanmaktadır.
TRISC = %11110000 : Portb’nin ilk dört biti çıkış, son dört biti giriş olarak tanımlanmaktadır.

Yönlendirilen port pinlerine bilgilerin gönderilmesi için birkaç yol vardır. Örneğin:

PORTB =%11110000 : Portb’nin ilk dört pinine lojik-0 son dört pinine ise lojik-1 değeri gönderilmektedir .
PORTB = 1 : Portb’nin bütün pinlerine lojik-1 değeri gönderilmektedir.
HIGH PORTB.4 :PORTB’nin dördüncü pinine lojik-1 değeri gönderilmektedir.
LOW PORTB.6 : PORTB’nin altıncı pinine lojik-0 değeri gönderilmektedir.

5.2.5. Zaman gecikmesi ( Pause )

‘PAUSE’, programı istenilen bir süre beklemeye almaktadır. En fazla 65535 milisaniyelik bir gecikme sağlanabilmektedir. Bu da bir dakikanın biraz üstünde bir değerdir. ‘PAUSE’ komutundaki değer milisaniye büyüklüğündedir. Örneğin, PAUSE 49000 (49 saniyelik gecikme).

Eğer 49 saniyelik gecikmeyi assembly kodunda yazmak gerekseydi, şu şekilde yazılmalıydı.

LIST = P16F877
INCLUDE “P16F877.INC”
SAYI EQU H’20’
SAYI1 EQU H’21’
SAYI2 EQU H’22’
GECIKME
	MOVLW H’FF’
	MOVWF SAYI
DONGU
	MOVLW H’FF’
	MOVWF SAYI1
DONGU1
	MOVLW H’FF’
	MOVWF SAYI2
DONGU2
	DECFSZ SAYI2,F
	GOTO DONGU2
	DECFSZ SAYI1,F
	GOTO DONGU1
	DECFSZ SAYI
	GOTO DONGU
RETURN

Oysa bunu PICBASIC PRO programlama dilinde PAUSE 49000 şeklinde tek satırda gerçekleştirmek mümkün olmaktadır. Görüldüğü üzere PICBASIC PRO ile program yazmak hem çok rahat hem de çok basit olmaktadır.

5.2.6. Döngü düzenlemek ( For…Next )

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekmektedir. PICBASIC PRO programlama dilinde bu işi ‘FOR…NEXT’ döngüsü bir sayaç gibi çalışarak gerçekleştirmektedir. ‘FOR’ komutundan sonra bir değişkene ilk değer atanıp, bu değişkenin sayacağı son değer de belirtilmelidir. Ayrıca değişkenin kaçar kaçar artacağı ‘STEP’ komutuyla kontrol edilebilmektedir. Son olarak ‘NEXT’ döngüsüne gelen program eğer son değere ulaşılmamış ise döngüsüne devam edecektir. Örneğin:

FOR K=2 to 10 STEP 2
PAUSE1000
NEXT

Burada k değişkeni 2’den 10’a kadar ikişer ikişer saymaktadır. Her bir döngüde bir saniyelik bir gecikme sağlanmaktadır. Döngü toplam beş tur atacağından 5 saniyelik bir gecikme sağlanmış olacaktır.

5.2.7. Kontrol yapmak (If…Then)

Bazı işlemlerde bir durumun kontrol edilmesi gerekebilir. PICBASIC PRO programlama dilinde bu işi ‘IF…THEN’ komutu sağlar. Bu kontrol deyimi bir veya birden çok karşılaştırmayı icra edebilir.’IF…THEN’ kontrolörü bir durumun doğru(true) veya yanlış(false) olmasını karşılaştırarak değerlendirir. Eğer değerlendirme doğru ise ‘THEN’ komutundan sonraki ifade işlenir. Eğer değerlendirme yanlış ise program bir sonraki satıra geçecektir. Örneğin:

IF PORTB.2 = 0 THEN HIGH PORTA.1
ELSE HIGH PORTB.3

Bu program parçasında eğer portb’nin ikinci pinine lojik-0 gelmişse porta’nın birinci pinine lojik-1 gönderilir aksi taktirde portb’nin üçüncü pinine lojik-1 gönderilecektir.

5.3. Kesmeler ( Interrupts )

PIC’in port girişlerinden veya donanım içerisindeki bir sayıcıdan gelen sinyal nedeniyle belleğinde çalışmakta olan programın kesilmesi olayına kesme denilmektedir. Programın kesildiği andan itibaren önceden hazırlanan bir alt program çalışmaktadır. Alt program işlevini bitirdikten sonra ana program kaldığı yerden itibaren çalışmasına devam etmektedir. Netice olarak bir kesme, ana program çalışmasını sadece duraklatır, ama hiçbir zaman işlevinin devam ettirmesini engellememektedir. İnterrupt alt programları kullanarak, program içerisinde kullanılacak komut sayısı azaltılıp bir sürü mantıksal karışıklıklarönlenmektedir. Kesme olayı şekil 5.1’de sembolik olarak gösterilmiştir.

Şekil 5.1 Kesme olayı

5.4. INTCON Register

INTCON (Interrupt Control) registeri RAM bellekte h’18B’ adresinde bulunan özel registerden bir tanesidir. Bu register içerisinde her bir kesme kaynağı için bir flag ve bir de global kesme bulunmaktadır..Çizelge 5.2’de intcon registerin her bir bitinin ne işe yaradığı gösterilmiştir.

Çizelge 5.2 İntcon register

GIE EEIE TOIE INTE RBIE TOIF INTF RBIF
7 6 5 4 3 2 1 0
GIE :

  Tüm kesme işlemlerini iptal etme bayrağı
  0: Tüm kesmeler geçersiz
  1: Aktif yapılmış olan tüm kesmeler geçerli
EEIE :   EEPROM belleğe yazma işlemi tamamlama kesmesi
  0: Geçersiz
  1: Geçerli
TOIE :   TMR0 sayıcı kesmesini aktif yapma bayrağı
  0: Geçersiz
  1: Geçerli
INTE :   Harici kesmeyi aktif yapma bayrağı
  0:
Geçersiz
  1: Geçerli
RBIE :   PORTB(4, 5, 6, 7.bitleri) değişiklik kesmesini aktif yapma bayrağı
  0: Geçersiz
  1: Geçerli
TOIF :   TMR0 sayıcısı zaman aşımı bayrağı
  0: Zaman aşımı yok
  1: Zaman aşımı var
INTF :   Harici kesme bayrağı
  0: Harici kesme oluşmadığında
RBIF :   PORTB değişiklik bayrağı
  0: RB4~RB7 uçlarında değişiklik yok
  1: RB4~RB7 uçlarından en az birisinde değişiklik var.

5.5. Kesme Kaynakları

Kesme birkaç yoldan yapılabilir. Bunlardan bazıları:

• Harici(external) kesme.
• TMR0 sayıcısında oluşan zaman aşımı kesmesi.
• PORTB’deki (4, 5, 6, 7 bitler) lojik seviye değişikliğinden.
• EEPROM belleğe yazma işleminin tamamlanmasında meydana gelen kesme.

Bu çalışmada kullanılan kesme TMR0 sayıcısından oluşan zaman aşımı kesmesidir.

5.6. TMR0 Sayıcısı/Zamanlayıcısı

PIC16F877’nin RAM belleğinin h’101’ adresinde TMR0 adı verilen özel bir register vardır. TMR0 programlanabilen bir sayıcıdır. Yani saymaya istenilen bir değerden veya baştan başlatılabilir. Herhangi bir anda içeriği sıfırlanabilir. Belli başlı özelliklerişunlardır.

• 8-bit bir sayıcıdır.
• Yazılabilir/okunabilir.
• Programlanabilen frekans bölme değeri ( prescaler value ) vardır.
• Sayı artışı harici veya dahili clock saykılı ile yapılabilir.
• Düşen ve yükselen kenar tetiklemesi ( harici olarak )
• Sayıcı değeri artan yöndedir.
• TMR0’ın değeri h’FF’den h’00’a geldiğinde ilgili flag’i “1” yaparak kesme oluşturur.

TMR0 sayıcısının önemli özelliklerinden biri de ana program veya kesme alt programları çalışırken sayma işlemini durdurmamasıdır.

5.7. OPTION Register

OPTION register, RAM belleğin h’81’adresinde bulunan özel bir registerdir. TMR0 sayıcısının kontrolünde kullanılmaktadır. Çizelge 5.3’de bu registerin her bir bitinin ne görevler yaptığı açıklanmıştır.

Çizelge 5.3 Option register

RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
7 6 5 4 3 2 1 0
PS0, PS1, PS2 :   Frekans bölme sayısı
PSA :
  Frekans bölücü seçme biti
  0:
Frekans bölme sayısı TMR0 için geçerli
  1: Frekans bölme sayısı WDT için geçerli
TOSE   :TMR0 sinyal kaynağı kenar seçme biti
  0: RA4/TOCKI ucundan düşen kenar tetiklemesi
  1: RA4/TOCKI ucundan yükselen kenar tetiklemesi
TOCS :   TMR0 sinyal kaynağı seçme biti
  0: Dahili komut saykılı seçilir
  1: Harici dijital sinyal(RA4/TOCKI ucu)
INTEDG :   Harici kesme sinyali kenar seçme biti
  0: RB0/INT ucundan düşen kenarda tetikleme
  1: RB0/INT ucundan yükselen kenarda tetikleme
RBPU :   PORTB pull up geçerli yapma biti
  0: PORTB uçlarındaki pull-up’lar iptal edilir.
  1: PORTB uçlarındaki pull-up’lar geçerli yapılır

5.8. Prescaler Kullanılması

Option registerin 0, 1, 2. bitleri (PS0~PS2) içerisine yerleştirilen sayılar, TMR0 veya WDT’ye uygulanan sinyali böler. Böylece sayma hızları değiştirilebilir. Üç bitlik bu sayı TMR0 veya WDT’de birbirinden farklı 8 farklı oran seçme olanağı oluşturur. Çizelge 5.4’de prescaler değerleri görülmektedir.

Çizelge 5.4 Prescaler değerleri

Frekans bölme sayısı TMR0 Oranı WDT oranı
000 1/2 1/1
001 1/4 1/2
010 1/8 1/4
011 1/16 1/8
100 1/32 1/16
101 1/64 1/32
110 1/128 1/64
111 1/256 1/128

TMR0 veya WDT sayıcılarının kaç dahili komut saykılında bir defa bir üst sayıya geçeceğini belirleyen orandır. Örneğin:

TMR0 oranı 1/2 ise, 2 komut saykılında bir defa üst sayıya geçiş olur.
TMR0 oranı 1/8 ise, 8 komut saykılında bir defa üst sayıya geçiş olur.

Program belleğine yerleştirilen komutların çalışabilmesi için harici bir osilatörden clock sinyali ( fosc ) uygulanması gerekmektedir. Bu frekans PIC tarafından 4’e bölünerek OSC2 ucundan dışarıya verilmektedir. İşte 4’e bölünen bu frekansın bir saykılı bir komutun icrası için geçen süreyi belirlemektedir. Bu çalışmada 4 MHz’lik bir kristal osilatör kullanılmıştır. Bu frekanstaki dahili komut saykılı 1MHz’dir. Periyodu ise 1μs’dir. Yani dahili komut saykılı 1 μs’dir. Bir komut 1 μs’lik bir sürede icra edilmektedir. Prescaler değeri ile TMR0 sayıcısının kaç μs aralıklarla saydığını veya kaç μs aralıklarla kesme verdiği belirlenmektedir.

Örneğin, bu çalışmada prescaler değeri b’111’ seçilmiştir. Prescaler b’111’ olduğunda TMR0 oranı 1/256 olur. (fosc) değeri 4MHz olduğundan, komut saykılı 1μs olmaktadır. Buradan TMR0 sayıcısının içeriği 256 dahili komut saykılında bir arttığı anlaşılmaktadır. TIMER0 sayma aralığı bu çalışma için 256 μs’dir. TMR0 saymaya başladığında ilk sayı h’00’ olduğundan TIMER0;

256 μs x 256 = 65536 μs(65.5ms) aralıklarla kesme sinyali verecektir.

5.9.Microcode Studio

PICBASIC PRO programlama dilinde yazılan bir program microcode studio programında derlenmektedir (compile). Herhangi bir editörde yazılan PICBASIC PRO kodları microcode studio programında derlenebildiği gibi, bu programın kendine has editörü de bulunmaktadır. Şekil 5.2’de microcode studio programının ana sayfası görülmektedir.

Şekil 5.2 Microcode studio ana sayfası

5.10. Propic

PIC’in belleğine yüklenmek üzere, microcode studio programında yazılan program derlenmiştir. Hexadecimal kodlar ( derlenmiş program ) bilgisayarın paralel portuna bağlanan programlayıcı ( PROTOPIC ) aracılığı ile PIC’in program belleğine yazılmıştır. PROTOPIC programlayıcısının PROPIC adında bir programı bulunmaktadır. Şekil 5.3’de PROPIC’in menüleri görülmektedir.

Şekil 5.3 Propic menüleri

5.11. Trafik Işığı Modelinin Kontrolü İçin Yazılmış Olan Program

Bu çalışma için PICBASIC PRO programla dilinde yazılmış olan programın kodları ve açıklamaları aşağıda verilmiştir.

 

******************************************************
'* Name : UNTITLED.BAS *
'* Author : [set under view...options] *
'* Notice : Copyright (c) 2002 [set under view...options] *
'* : All Rights Reserved *
'* Date : 22.05.2002 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
TRISA = 0
TRISC = 0
TRISD = 0
TRISB.0 = 1
TRISB.1 = 0
TRISB.2 = 1
		‘*Buraya kadar port yönlendirmesi yapiliyor.
D VAR BYTE
I VAR BYTE
D = 0
		’*Buraya kadar degiskenler tanimlaniyor.
LOW PORTB.1
LOW PORTB.2
		‘*Buraya kadar portb’nin 1. ve 2. bitleri lojik-0’çekiliyor
DONGU:
ON INTERRUPT GOTO OKUMA ‘*Kesme geldiginde programin gitmesi gereken etiket
OPTION_REG = %00000111
INTCON = %10100000
		‘*Buraya kadar kesme islemi için registerler ayarlaniyor.
ENABLE INTERRUPT ‘*Kesme aktif halde
DONGU_:
IF PORTB.2 = 1 THEN GECE ‘*Kontrol yapiliyor.Portb2’de gece-gündüz switch’i var.
BASLA_:
	PORTA = %001101
	PORTC = %00011001
	PORTD = %01001000
	FOR I = 1 TO 420 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %010101
	PORTC = %10101001
	PORTD = %01001000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %100100
	PORTC = %01101000
	PORTD = %11000100
	FOR I = 1 TO 400 STEP 1
	PAUSE 50
	NEXT I

DURUM_CONTROL:
	IF PORTB.1 = 1 THEN DURUM_2
DURUM_1:
	PORTA = %100100
	PORTC = %10101001
	PORTD = %01101000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %100011
	54
	PORTC = %00101001
	PORTD = %00011000
	FOR I = 1 TO 340 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %110101
	PORTC = %00101001
	PORTD = %00101000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I

	GOTO BASLA_

DURUM_2:
	LOW PORTB.1
	PORTA = %100100
	PORTC = %10101101
	PORTD = %01001000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %100101
	PORTC = %00100011
	PORTD = %01000100
	FOR I = 1 TO 120 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %100101
	PORTC = %00100101
	PORTD = %01101000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %100011
	PORTC = %00101001
	PORTD = %00011000
	FOR I = 1 TO 180 STEP 1
	PAUSE 50
	NEXT I

	PORTA = %110101
	PORTC = %00101001
	PORTD = %00101000
	FOR I = 1 TO 40 STEP 1
	PAUSE 50
	NEXT I
		‘* Buraya kadari isik sinyalleri belirlenen süre dahilinde yaniyor.
	GOTO BASLA_

DISABLE INTERRUPT ‘*Kesme pasif halde

OKUMA:
	IF PORTB.2 = 1 THEN GECE ‘*Kotrol yapiliyor(gece-gündüz)
	IF PORTB.0 = 1 THEN CIKIS1 ‘*Mikroswitch kontrol ediliyor.
	D = 0 ‘*d registerinin (sayaç) içerigi sifirlaniyor.
GOTO CIKIS ‘*Program çikisa adli etikete dallaniyor.

CIKIS1:
	D = D + 1
	IF D > 200 THEN IPTAL

		‘*Her 65.5 ms’de sayaci bir artiriyor.
GOTO CIKIS ‘*Program çikis adli etikete dallaniyor.

IPTAL:
	D = 0 ‘*Sayaç sifirlaniyor
	IF PORTB.1 = 1 THEN CIKIS ‘*Çikis kontrol ledi aktifse program çikisa dallaniyor.Portb.1’e kesmeyi görmek için led ‘ 	baglanmistir.
	HIGH PORTB.1 ‘*Portb1 de bulunan led lojik-1’e çekiliyor.
	GOTO CIKIS ‘*Program çikis adli etikete dallaniyor
GECE:
	PORTA = %100001
	PORTC = %00001000
	PORTD = %01000000
	PAUSE 500
	IF PORTB.2 = 0 THEN CIKIS_2
	PORTA = 0
	PORTC = 0
	PORTD = 0
	PAUSE 500
	IF PORTB.2 = 0 THEN CIKIS_2
		‘*Gece rutini için kirmizi sinyal flas yapiyor.
	GOTO GECE ‘*Program gece adli etikete dallaniyor.
CIKIS_2:
	GOTO DONGU ‘*Program döngü adli etikete dallaniyor.
CIKIS:

RESUME ‘*Kesmeden çikip ana programa dönüyor.
ENABLE INTERRUPT ‘*Kesme tekrar aktif halde.

END ‘*Program sonu.

BÖLÜM 6

SONUÇ ve ÖNERİLER

Bu çalışmada PIC16F877 mikrodenetleyicisi ile bir trafik kavşağının (maket model) kontrolü gerçekleştirilmiştir. Kontrol işleminin yapılabilmesi için ilgili bölümlerde ayrıntılı olarak açıklandığı gibi program geliştirme yazılımı (Ör.Microcode studio), programlama yazılımı (Ör.Propic), uygulama devresi gibi bazı donanım ve yazılım kullanılmıştır.

Trafik sinyalizasyonu kontrolünü gerçekleştirmenin basit bir yönteminin de PIC’ler olduğunu görülmüştür. Kavşaktaki sinyalizasyonun değiştirilmesi gerektiğinde PIC’in belleğindeki program silinip tekrar programlanabilmektedir.

PIC mikrodenetleyicilerin çok geniş bir ürün yelpazesine sahip olması, ucuzluğu, EEPROM belleğe sahip olup kullanım kolaylığını artırması gibi birçok özellikleri sayesinde gün geçtikçe popülerliği artmaktadır.

PIC16F877 mikrodenetleyicisi dışında, PIC ailesi içerisinde daha farklı özelliklere sahip mikrodenetleyiciler de bulunmaktadır. PIC mikrodenetleyicilerinin çok geniş bir ürün yelpazesine sahip olması ile birlikte, çok daha fazla program hafızası ve giriş/çıkış portu, analog/dijital çevirici gibi özellikler gerektiren uygulamalar için amaca uygun olarak seçilebilecek bir PIC mikrodenetleycisi bulanabilmektedir.

Sonuç olarak, bu çalışmada da görüldüğü gibi bir PIC mikrodenetleyicisinin endüstriyel sistem kontrolü amacıyla kullanılması sayesinde, sistem tasarımının kolaylığının yanı sıra, mikrodenetleyicili endüstriyel sistem uygulamaları, klasik kumanda sistemleri ve mikro işlemci tabanlı kontrol sistemlerine alternatif olabilecek bir nitelik taşımaktadır.

KAYNAKLAR

[1] Altınbaşak O., ”Mikrodenetleyiciler ve Pic Programlama”,Altaş Yayınları 2000
[2] Yalduz H. “Bir Yol Kavşağı İçin Trafik Işığı Sisteminin Modellenmesi ve Kontrolü”, Niğde Üniversitesi 2001
[3] Turgutlu H.F, ”Pic Mikrodenetleycisi Kullanarak Deneysel Bir Endüstriyel sistemin Kontrol Edilmesi”, Niğde üniversitesi 2002
[4] Kutlu K. , “Trafik Tekniği”, İTÜ Yayınları
[5] Microchip, ”Microchip Technical Library CD-ROM(Third Edition) Microchip Technology Inc.”, Arizona 2001

İNTERNET SİTELERİ

[1] http://www.microchip.com
[2] http://www.antrak.org.tr
[3] http://www.basicmicro.com

HAZIRLAYAN : Faruk YÜCE