Mikrokontrolör Nasıl Çalışır?

Mikrokontrolörler bu gün bir çok cihazın içinde kullanılmaktadırlar. Örneğin LED veya LCD ekranla birlikte tuş takımına sahip bir mikrodalga fırınınız varsa bu fırın bir mikrokontrolöre de sahiptir. Bütün modern otomobillerde değişik amaçlarla kullanılan en azından bir mikrokontrolör bulunmaktadır. Uzaktan kontrol edilebilen bir cihaz muhakkak bir mikrokontrolöre sahiptir.

Bu makalede öncelikle mikrokontrolörlerin nasıl çalıştığı anlatılmaya çalışılacaktır. Daha sonra verilen örneklerle bu bilgiler desteklenecektir.

Mikrokontrolör Nedir ?
Mikrokontrolör en kolay şekilde anlatılacak olursa bir bilgisayardır. Tüm bilgisayarların ortak özellikleri vardır :
– Bütün bilgisayarların programlarını çalıştıracak CPU’ ları vardır. Eğer şu anda bir bilgisayarda oturup bu makaleyi okuyorsanız bilgisayarınızın CPU su web browserinizi çalıştırmaktadır.
– CPU çalıştırdığı bu programları bir yerden yüklemek zorundadır. Masaüstü bilgisayarlarda bu harddiskler üzerinden olmaktadır.
– Bilgisayarlarda değişkenlerin saklanabileceği RAM ler vardır.
– Bilgisayarların dış dünyayla iletişim kurabilmeleri için giriş ve çıkış kapıları vardır.
Masaüstü bilgisayarlar genel amaçlı bilgisayarlardır ve yüzlerce programı çalıştırabilirler. Ancak mikrokontrolörler özel amaçlı bilgisayarlardır ve sadece bir işi yapmak üzere tasarlanırlar. Mikrokontrolörleri tanımlamak için birçok ortak karakteristik özellik vardır. Bu karakteristikler :
– Mikrokontrolörler başka cihazların içinde gömülü olarak çalışırlar. Böylece o cihazın hareketlerini ve özelliklerini kontrol edebilirler. Zaten mikrokontrolörlerin diğer bir ismi de embedded controller lerdir.
– Mikrokontrolörler sadece bir konuda çalışan, uygulamaya özel programlar kullanır. Bu program ROM bellekte saklanır ve genellikle değiştirilemez.
– Mikrokontrolörler enerji tüketimi düşük olan cihazlardır. Örneğin bataryayla beslenen bir mikrokontrolör ortalama 50 miliwatt elektrik tüketecektir.
– Mikrokontrolörlerin kendilerine has girdi cihazları vardır ve bunlar çıktı için genellikle LED veya LCD ekranlar kullanır. Ayrıca alınan çıktılar cihaz içindeki başka şeylerin kontrolünde de kullanılabilir. Örneğin uzaktan kumandadan alınan sinyaller ile kanal ayar devresi kontrol edilir ve kanalların değiştirilmesi sağlanabilir.
– Mikrokontrolörler küçük ve ucuzdurlar.

Mikrokontrolör Kullanımı
Mikrokontrolörleri daha yakından incelemek için PARALLAX firmasının ürettiği ve BASIC dilini daha yakından anlamayı sağlayan BASIC Stamp mikrokontrolörleri incelenecektir. BASIC dili öğrenmesi ve program geliştirmesi çok kolay bir dildir. Basic Stamp mikrokontrolörü küçük bir elektronik devre ve besleme için 9 volt bir bataryadan oluşur. Bu mikrokontrolör bilgisayarın paralel portundan programlanabilir. BASIC stamplar göreceli olarak pahalı ve yavaş olmalarına rağmen özellikle demo ve prototip ürünlerin yapımında/tasarımında kullanılmaktadırlar. Parallax iki tip BASIC stamp üretmektedir. Bunlar BS-1 ve BS-2 şeklinde isimlendirilmişlerdir.

BS-1 Özellikler
RAM : 14 byte
EEPROM : 256 byte
Maksimum Program Uzunluğu : 75 satır
İcra Hızı : 2000 satır/sn
I/O pinleri : 8

BS-2 Özellikler
RAM : 26 byte
EEPROM : 2 kilobyte
Maksimum Program Uzunluğu : 600 satır
İcra Hızı : 4000 satır/sn
I/O pinleri : 16

Bu makalede BASIC Stamp Revizyon D isimli özel bir BASIC Stamp kullanılacaktır.
BASIC Stamp Revizyon D
BASIC Stamp Revizyon D, 9 volt bataryalı bir taşıyıcı bord üzerine yerleştirilmiş BS-1′ dir. Bu bord üzerinde programlama kablosunun bağlanabileceği pinlerde bulunmaktadır. BS-1 lerdeki 75 satır ( 75 satır EEPROM da 256 byte yer kaplayacaktır. ) kısıtlaması tasarımda zorluk yaratmaktadır. Bununla beraber daha düzenli ve verimli programlar yazılmasına da neden olur. Stamp boyut olarak çok küçüktür ve bataryayla çalıştırılabilir. Bu sayede taşınabilirlik özelliği kazanmaktadır.

BASIC Stamp Programlama
BASIC Stamp programlama için BASIC programlama dilini kullanmaktadır. BASIC öğrenmesi en kolay programlama dillerinden biridir.

Standart BASIC Komutları
for…next : döngü başlatır
gosub : alt yordama geçer
goto : programın belirtilen etikete atlamasını sağlar
if…then : Eğer/Sonra mantıksal döngüsünü gerçekleştirir
let : görev tahsis eder ( seçeneğe bağlı )
return : alt yordamdan ana programa geri dönüş yapar
end : programı sona erdirir ve uyku moduna geçer

I/O Pinleri İle İlgili Komutlar
button : Giriş pinindeki butonun durumunu okur
high : I/O pinini lojik yüksek yani 5 volt olarak ayarlar
input : I/O pini giriş olarak ayarlar
low : I/O pinini lojik düşük yani 0 volt olarak ayarlar
output : I/O pinin durumunu çıkış olarak ayarlanır
pot : I/O pinindeki potansiyometreyi okur
pulsin : giriş pinine belirli bir süre içinde gelen darbeyi okur
pulsout : çıkış pinine belirtilen bir süre kadar darbe gönderir.
pwm : çıkış pininde pulse width modulation yapar
reverse : I/O pinlerinin yönlerini değiştirir ( girişi çıkış, çıkışı giriş yapar )
serin : giriş pinine seri veri yazar
serout : çıkış pinine seri veri yazar
sound : çıkış pinine belirli frekansta bir ses gönderir.
toggle : çıkış pininin durumunu değiştirir

BASIC Stamp’ e Özgü Komutlar
branch : dallandırılmış tabloyu okur
debug : masaüstü bilgisayarın konsoluna hata ayıklama dizisi gönderir.
eeprom : EEPROM a programram yükler
lookdown : listedeki değerin indeksine dönüş yapar
lookup : bir indeks kullanarak bir sırada arama yapar
nap : kısa bir süre için uyku moduna geçer
pause : belirtilen süre kadar gecikme
random : rastgele bir sayı seçer
read : EEPROM dan veri okur
sleep : belirtilen süre kadar enerjiyi keser
write : EEPROM a veri yazma

Aritmetik İşlemler
+ : toplama
– : çıkarma
* : çarpma ( düşük-word )
** : çarpma ( yüksek-word )
/ : Bölme
// : Mod
max : 2 değerden en yükseğine gider
min : 2 değerden en küçüğüne gider
& : ve
| : veya
^ : özel veya
&/ : ve değil
|/: veya değil
^/ : özel veya değil

Değişkenler
BS-1 in tüm değişkenleri önceden tanımlanmış isimlere sahiptir. Sadece 14 byte RAM kapasitesi olduğu için değişkenlerin verimli kullanımı çok önemlidir.
w0, w1, w2…..w6 – 16 bit word değişkenler
b0, b1, b2…….b6 – 8 bit byte değişkenler
bit0, bit1, bit2…….bit15 – 1 bit bit değişkenler
Sadece 14 byte hafıza bulunduğu için b0/b1 ile w0 RAM de aynı yerde bulunmaktadır. Aynı şekilde bit0 ile bit15 arasındaki tüm bitler w0 ile aynı bellek bölgesini paylaşır.

I/O Pinleri
BS-1′ de I/O pinleri ile çalışabilecek 14 komut yukarıda gösterilmiştir. I/O pinleri BASIC Stamp ın dış dünyayla konuşabildiği kapılarıdır. BS-1 de 0 dan 7 ye kadar sıralanan 8 pin vardır. Pin sayısı BS-2 lerde 16′ ya çıkar.
Pinler çift yönlüdür yani bir pinden hem veri okunabilir hemde veri yazılabilir. Pine bir değer göndermenin en kolay yolu HIGH veya LOW komutlarıdır. Örneğin :
high 3 denildiğinde pin 3′ e 1 yani +5 volt gönderilecektir.
Farklı ve ilginç işlevler sağlayan I/O pin komutları vardır. POT komutuyla pine bir kondansatör ile bağlanmış potansiyometrenin değeri okunabilir. PWM komutuyla pulse-width modulated sinyaller gönderilebilir. Bu komutlarla örneğin bir motor kontrolü çok kolay bir hale gelmektedir.

BASIC Stamp’ le Oynamak
Eğer BASIC Stample oynamak isterseniz buna başlamak oldukça kolaydır. İhtiyaç duyulan tek şey bir masaüstü bilgisayar ve BASIC Stamp başlangıç kitidir. Başlangıç kiti bir Stamp, programlama kablosu ve programları yazıp Stamp’ a yükleyecek bir yazılımdan oluşur.
Stamp bağlantısı oldukça kolaydır. Bilgisayarın paralel portuna bağlanır. Bağlantı yapıldıktan sonra BASIC programını düzenlemek ve bunu STAMP’ a yüklenmesini sağlamak için bir DOS uygulaması açılır.

Stamp Uygulaması

Yukarıdaki program BS-1 e yüklendiğinde şu şekilde çalışacaktır.
Başta açılış için 0.25 sn bekleme yapacaktır.
3 numaralı pin +5 volt yapılır
0.25 sn beklenir
3 numaralı pin 0 volt yapılır
başlangıca geri döner ve bu bir döngü halinde devam eder.
Bu uygulama 9 volt pil ile haftalarca çalışmaya devam edecektir. 3 numaralı pine bağlı LEDin çalışma süresi kısaltılarak pil çalışma ömrü uzatılabilir. Pil çalışma süresini uzatmak için ayrıca PAUSE yerine NAP komutu kullanılabilir.

Dijital Saat Uygulaması
Bu uygulamada 7447 entegreyle beraber 7 segmentli LED’ ler kullanılacaktır. 7447 BASIC Stample çok uyumlu olarak çalışmaktadır. 4 I/O pini 7447 ye bağlanarak 0-9 a kadar olan rakamların gösterilmesi rahatlıkla sağlanabilir. BS-1 sekiz I/O pinine sahip olduğu için iki adet 7447 direkt olarak sürülebilir.
Dijital bir saat için minimum 4 rakama ihtiyaç vardır. Bu yüzden 8 I/O piniyle 4 adet 7447 çalıştırmak için işin içine biraz yaratıcılık katmak gereklidir.

Dijital Saat Uygulaması

Yukarıdaki diyagramda 8 I/O hattı soldan taraftan gelmektedir. Bu yaklaşımda 4 tane hat, dört 7447′ yede ortak olarak gitmektedir. Diğer 4 hat ise 7447′ leri sırayla aktive etmektedir ( 7447lerin üzerinde E simgesi Enable demektir. Bu uç high olduğunda 7447 çalışır. ) Bu düzeni sağlamak için Stamp içindeki BASIC programı öncelikle ikinci 4 veri hattındaki ilk rakamı aktive eder ve böylece birinci 7447′ yi değiştirir. Bu döngü işlemi sırayla ve sürekli olarak tekrar edilerek devam eder. Aslında bağlantıları biraz değiştirip 74154 demultiplexer ve bazı ilave sürücüler kullanılarak bu işlem tek bir 7447 ile de yapılabilir.

Bu tasarımlar güzel bir şekilde çalışmasına rağmen iki temel problem vardır.
– LED’ ler çok fazla enerji tüketir.
– 7 Segment LED’ ler sadece rakamları gösterebilir.
Alternatif bir uygulama ise LCD ekran kullanımıdır. LCD ekranlar yaygın bir kullanımıa sahiptirler ve kolaylıkla Stamp uygulamalarına katılabilirler. Aşağıdaki resimde 2 satır ve 16 karakterli bir LCD ekran gösterilmektedir.

Lcd Ekran

LCD’ nin birçok avantajı bulunmaktadır :
– Ekran tekbir I/O pin ile sürülebilir. LCD ekranda STAMP ile seri haberleşebilecek bir lojik vardır bu sayede sadece bir I/O bağlantısı yeterli olmaktadır. Ek olarak SEROUT komutu seri haberleşmeyi oldukça kolaylaştırmaktadır.
– LCD ekran rakamların yanı sıra harfleri ve bazı özel karakterleri de gösterebilmektedir.
– LCD ekranlar az enerji tüketir ( yaklaşık 3 miliamper civarında )
LCD kullanımında tek problem LED’ lere göre daha pahalı olmalıdır.
Aşağıdaki BASIC programı BASIC Stamp’ in bir saat gibi çalışmasını ve zamanı bir çıktı olarak LCD ekranda göstermesini sağlar. LCD ekranın pin 0 I/O pinine bağlandığı varsayılmıştır.
pause 1000 ‘LCD ekranın başlatılması için 1 sn beklenilir
serout 0, n2400, (254, 1) ‘Ekran temizlenir
serout 0, n2400, (“zaman:”) ‘Ekranda “zaman : “yazar
‘program yüklenmeden önceki ön ayarlar
b0 = 0 ‘saniye
b1 = 27 ‘dakika
b2 = 6 ‘saat

again:
b0 = b0 + 1 ‘saniyeyi arttır
if b0 < 60 then minutes b0 = 0 'eğer saniye=60 ise b1 = b1 + 1 ' dakikayı arttır minutes: if b1 < 60 then hours b1 = 0 'eğer dakika=60 ise b2 = b2 + 1 ' saati arttır hours: if b2 < 13 then show b2 = 1 'eğer saat=13 ise 1' e resetle show: serout 0, n2400, (254, 135) 'ekrandaki kursorün pozisyonu, 'daha sonra zamanı göster serout 0, n2400, (#b2, ":", #b1, ":", #b0, " ") pause 950 '950 milisaniye bekle goto again 'tekrarla Bu programda SEROUT komutu LCD ekrana veri gönderir. (254,1) dizisi LCD ekranı temizler. 254 silme karakteridir, 1 ise ekranı silme komutudur. (254,135) dizisi ise kursörün pozisyonudur. Diğer iki SEROUT komutu ise ekrana yazı dizisi gönderir. Eğer daha kesin doğruluklu bir saat istenirse Stamp' a bir gerçek-zaman çipi takılmalıdır. Gerçek-zaman çipleri zamanlamada tam doğruluğu yakalamak için quartz kristal kullanırlar. Bu çipler ayrıca artık yılları hesaplamak için tarih bilgilerini de içerebilirler. Dijital Termometre Yapımı LCD' li saat uygulamasında STAMP ve LCD' ler biraz daha yakından tanınıp anlaşılmıştır. Dijital termometre oluşturmak için bunların yanında aşka malzemelerde kullanılması gerekmektedir. Bir termometre oluşturmak için DS1620 entegresi kullanılabilir. Bu entegre : - Sıcaklık ölçer bir cihaz - Sıcaklık ölçer cihazdaki bilgileri okumak için A/D çevirici - A/D dönüştürücüdeki bilgileri okumak için bir shift register - Ayarları saklayabilmek için küçük bir EEPROM DS1620' nin iki çalışma modu vardır. Birinci modda kendi başına çalışan bir termostat çipi olarak görev yapabilir. İkinci modda ise bilgisayara bağlanabilen bir termometre olarak işler. EEPROM bellek sayesinde termostat olarak mı yoksa termometre olarak mı kullanıldığı bilgisi saklanacaktır. DS1620' yi Stamp' a bağlamak oldukça kolaydır. DS1620 8 pine sahiptir. Stamp' tan DS1620' in pin 8' ine +5 volt bağlanır. Toprak DS1620' nin 4 numaralı pinine bağlanır. Daha sonra Stampin 3 I/O pini DS1620' nin 3 pinini sürmek için bağlanır. - DS1620' deki pin 1 data pinidir. Bu pin üzerinden veri bitleri okunup yazılabilir. - DS1620' deki pin 2 saat pinidir. Bu pinle shift registerdeki giriş çıkış süreleri ölçülür. - DS1620' deki pin 3 silme/seçme pinidir. Pin 3 high durumunda olduğun bu çip seçilir ve haberleşme açık hale gelir. Bu proje ile ilgili örnek kodda aşağıdaki öndeğerler varsayılmıştır : - Data pini Stamp' in 2 numaralı I/O pinine bağlanmıştır. - Saat pini Stamp' in 1 numaralı I/O pinine bağlanmıştır. - Silme/Seçme pini Stamp' in 0 numaralı I/O pinine bağlanmıştır. Aşağıda bağlantı şeması gösterilmektedir. Dijital Termometre

LCD ekrana Stamp’ in 3 numaralı I/O pini bağlanmaktadır. Stamp içerisine yüklenecek program aşağıdaki gibidir.

symbol RST = 0 ‘ 1620’ deki seçme/silme hattı
symbol CLK = 1 ‘ 1620’ deki shift register için saat hattı
symbol DQ = 2 ‘ 1620’ deki data hattı
symbol DQ_PIN = pin2 ‘ DQ için pin tanımı
symbol LCD = 3 ‘ LCD için data hattı

begin:
low RST ‘ 1620 ile haberleşme yapılmıyorsa reset konumunda olsun
high CLK ‘ 1620 deki saat pini varsayılan olarak high konumundadır
pause 1000 ‘ termometre ve LCD’ nin başlatılması için verilen bekleme süresi

setup:
high RST ‘ 1620 select konumuna geçsin
b0 = $0C ‘ $0c 1620 byte komutlarından biridir ve ayarları yazdır anlamına gelir
gosub shift_out ‘ 1620’ ye gönder
b0 = %10 ‘ %10 1620 byte komutlarından biridir ve termometre moduna geçişi sağlar
gosub shift_out ‘ 1620’ ye gönder
low RST ‘ 1620’ yi reset konumuna alır
pause 50 ‘ EEPROM için 50 milisaniyelik bir gecikme

start_convert:
b0 = $EE ‘ $EE 1620 byte komutlarından biridir ve dönüşümü başlatır
high RST ‘ 1620’ yi select konumuna getirir
gosub shift_out ‘ 1620’ ye gönder
low RST ‘ 1620’ yi reset konumuna alır

‘ Burası anadöngüdür
‘ – Sıcaklık değerini her saniye okur ve gösterir
main_loop:
high RST ‘ 1620’ yi select konumuna alır
b0 = $AA ‘ $AA 1620 byte komutlarından biridir
‘ sıcaklığı okumak için kullanılır
gosub shift_out ‘ 1620’ ye gönder
gosub shift_in ‘ 1620’ den sıcaklığı oku
low RST ‘ 1620’ yi reset konumuna alır
gosub display ‘ Sıcaklığı santigrat derece cinsinden gösterir
pause 1000 ‘ 1 saniye bekle
goto main_loop

‘ shift_out alt yordamı b0 içindeki bilgiyi 1620’ ye gönderir
shift_out:
output DQ ‘ DQ pinini çıkış moduna alır
for b2 = 1 to 8
low CLK ‘ 1620’ye saat bitini hazırlar
DQ_PIN = bit0 ‘ Data bitini gönderir
high CLK ‘ data bitini 1620’ ye tutturur
b0 = b0/2 ‘ bütün bitleri bit0’ a doğru sağa kaydırır
next
return

‘ shift_in alt yordamı 1620’ den 9 bitlik sıcaklık değerini alır
shift_in:
input DQ ‘ DQ pinini giriş moduna ayarlar
w0 = 0 ‘ w0’ ı temizler
for b5 = 1 to 9
w0 = w0/2 ‘ girişi sağa kaydırır
low CLK ‘ 1620’ ye bir sonraki bit için sorgu gönderir
bit8 = DQ_PIN ‘ biti oku
high CLK ‘ saat pinini high yap
next
return

‘ Sıcaklığı santigrat derece olarak gösterir :
if bit8 = 0 then pos ‘ eğer bit8=1 ise sıcaklık negatif

b0 = b0 &/ b0 ‘ b0’ı kendisinin vedeğiliyle tersyüz et

b0 = b0 + 1
pos:
serout LCD, n2400, (254, 1) ‘ LCD’ yi temizle
serout LCD, n2400, (“Sicaklik = “) ‘ ekranda “Sicaklik=”‘ ı gösterir.

bit9 = bit0 ‘ yarım dereceleri sakla
b0 = b0 / 2 ‘ dereceye çevir
if bit8 = 1 then neg ‘ negatif olup olmadığını kontrol et
serout LCD, n2400, (#b0) ‘ pozitif sıcaklıkları göster
goto half
neg:
serout LCD, n2400, (“-“, #b0)’ negatif sıcaklıkları göster
half:
if bit9 = 0 then even
serout LCD, n2400, (“.5 C”) ‘ yarım dereceleri göster
goto done
even:
serout LCD, n2400, (“.0 C”) ‘ yarım dereceleri göster
done:
return

DS1620 santigrat derece cinsinden sıcaklığı yarım dereceleri de gösterecek hassasiyette ölçer. Sıcaklık ikiye tamlanmış 9 bit bir değer ile gösterilir. -55 C derece ile 125 C derece arasında ölçebilir. Alınan değer 2′ ye bölünerek gerçek sıcaklık bulanabilir. İkiye tamlanmış sayı kullanmak negatif değerleri göstermek için güvenilir bir yoldur. Aşağıdaki tabloda 4 bit ve ikiye tamlanmış sayılar gözükmektedir.
0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 :-1
1110 :-2
1101 :-3
1100 :-4
1011 :-5
1010 :-6
1001 :-7
1000 :-8

Yukarıda gösterilen dijital termometre programında temel olarak şunlar gerçekleşmektedir.
1- symbol anahtar kelimesi kullanılarak programın daha rahat okunup anlaşılabilmesini sağlayan sabitler tanımlanmıştır.
2- 1620′ nin CLK ve RST pinleri istenilen değerlere ayarlanmıştır.
3- DS1620 üzerindeki EEPROM’ a termometre modunda çalışmasını sağlayacak veri yazılmıştır.
4- Program $EE ( hexadesimal bu sayı onluk sistemde 238′ e karşılık gelir. ) komutunu göndererek termometreye dönüştürme işlemini başlattırır.
Daha sonra program bir döngüye girer. Her saniye DS1620′ ye komut gönderek DS1620′ nin güncel sıcaklık değerini vermesini sağlar ve DS1620′ den w0 değişkenine gelen 9 bitlik sıcaklık değerini okur. Stamp DS1620′ deki CLK hattına 1 bit veri gönderip alarak durumunun değişmesini sağlar.
w0 değişkeninin b0/b1 değişkenlerini ve dolayısıyla bit0/bit1…/bit15′ i kapsadığını unutmayınız. Böylece DS1620′ den gelen bir bit Stampın bit 8′ ine girdiğinde w0 ikiye bölünür ve her bir bitin 9 bitlik sıcaklık değerini tamalayacak şekilde kaydırılmasını sağlar. Sıcaklık w0 değişkeninde saklandıktan sonra gösterim altyordamı ekranda santigrat derece cinsinden gösterilecek sayının pozitif veya negatif olduğuna karar verir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir