Arduino ile Proteus’ta Mikrodenetleyici Programlama

In Haber by Victor CuiumjuLeave a Comment

Bugün Proteus ve Arduino  hakkında  anlatmak istiyorum.  Proteus’ta bizim daha önce yaptığımız projenin simülasyonu yapabiliriz. Bu bize esneklik sağalayacaktır.  İlk önce Proteus’ta  devreyi kurup eksikler var mı yok  mu görebiliyoruz. Bir başka avantaj ise Arduino platformu  ve denemeler için tüm parçaları satın almaya gerek kalmaması. Proteus’un deneme sürümünü  buradan indirebilirsiniz .

İlk önce Arduino’da kısa  bir programı yazalım.Veya onu hazır olarak örneklerden alabiliriz (File, Examles, Basics, Blink).

/*

Blink

Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.

*/

// Pin 13 has an LED connected on most Arduino boards.

// give it a name:

int led = 13;

// the setup routine runs once when you press reset:

void setup() {

// initialize the digital pin as an output.

pinMode(led, OUTPUT);

}

// the loop routine runs over and over again forever:

void loop() {

digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

delay(1000);               // wait for a second

digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

delay(1000);               // wait for a second

}

Arduino Arabirimi

 

Proteus, Arduino’yu doğrudan kullanma  imkânı sunmuyor. Bu yüzden Proteus’ta var olan Atmega8  mikrodenetleyiciyi  kullanacağız. Programı  yazdıktan sonra derliyoruz. Compile işleminden sonra Arduino bilgisayarda temp klasörüne geçici dosyalar yaratıyor. Ben Windows XP kullanıyorum. Bu dosya benim bilgisayarımda C:\Temp\build3763817177409621585.tmp\ dizininde bulunuyor. Sizde farklı bir yerde olabilir. Mesela (Windows 8’de) C:\Users\Vitiok\AppData\Local \Temp… Bizi ilgilendiren dosya  Blink.cpp.hex. Bu dosyayı kullanarak Proteus’ta olan Atmega8 mikrodetleyiciyi çalıştıracağız.

Proteus’u açalım. Çalışma ortamında sol tarafta P’ye basıp arama penceresine  Atmega8 yazıp  listeden seçelim. Sonra bir kırmızı LED’i aynı şekilde seçelim.

Proteus Arabirimi

 

Proteus Atmega8

Tüm araçları seçtikten sonra böyle bir devre oluşturalım.

Proteus Atmega8 Devresi

Mikrodenetliyiciye çift tıklağında karşımıza böyle bir pencere gelecektir.

Proteus Hex Browse

Burada Program File penceresinden temp dosyamızı seçeriz ve OK’e bastıktan sonra simülasyonu  başlatabiliriz. Devreyi  çalıştırmak için aşağıdan start düğmesine basacağız.

Proteus Start Butonu

 

Küçük bir uygulama daha yapalım. Düğmeye bastığı zaman program LED’i yakacak. Düğmeyi bıraktığımız zaman LED’i söndürecek.

int switchPin=8;

int ledPin=13;

void setup()

{

pinMode(switchPin,INPUT);  //// initialize the digital pin as an input

pinMode(ledPin,OUTPUT);   //// initialize the digital pin as an output

}

void loop()

{

if (digitalRead(switchPin)==HIGH)

{

digitalWrite(ledPin,HIGH);

}

else

{

digitalWrite(ledPin,LOW);

}

}

Proteust’a devre:

Atmega8 Butonlu Devre

Program iki değişkeni  kullanacak. Birinci :

int switchPin=8;

8’ci pini kontrol için kullanacağız. Butona bastığımız zaman 8. pine lojik 1 gönderecek (5 Volt).

İkinci  değişken:

int ledPin=13;

13. pinde bizim LED’imiz olacak.

{

if (digitalRead(switchPin)==HIGH)

{

If komutu karşılaştırmayı yapıyor. DigitalRead  8. pini okuyor. Eğer  8. pinde 1 (1=HIGH)  ise if komutu birinci satırı çalıştırıyor. Yani:

digitalWrite(ledPin,HIGH);

Bu satırda LED’i yakıyoruz.

Eğer switchPin eşit 0’sa (0=LOW) o zaman ikinci satırı çalıştırıyor.

digitalWrite(ledPin,LOW);

LED’i söndürüyor.

If…else  komutunu daha  ayrıntılı inceleyelim.

If yapısı bize seçim  yapmayı  imkanı veriyor. Mesela siz  dijital pini kontrol etmek istiyorsanız ona göre işlem yapacaksınız. Eğer dijital pin 1 ise birinci işlem yapacak. 0’ sa ikinci işlemi yapacak.

if (inputPin == HIGH)

{

İşlem1;

}

else

{

İşlem2;

}

Sadece iki seçim için değil daha fazla da yapabiliriz. Mesela :

if (inputPin < 500)

{

İşlem1;

}

else if (inputPin >= 1000)

{

İşlem2;

}

else

{

İşlem3;

}

Burda 3. işlem inputPin   500 ve  1000 arasında yer alıyor.

If yapısı parantez içinde (inputPin<500)  inputPin’i kontrol ediyor. Doğruysa (true) birinci işlem yapıyor.Yanlışsa (false) sonraki işleme geçiyor.

Biz projede direnç (R68K) kullandık. Direnci kullanmasaydık  pinde rastgele akım LED’e  rastgele sinyalleri gönderecekti ve LED’imiz düzgün çalışmayacaktı. Bu akımı çekmek için toprağı kullandık. Proteus’ta görebilirsiniz, butona bastığınız zaman  direnç, akımın toprağa gitmesini engelliyor.

Atmega’nın kullandığı pinleri daha iyi anlamak için bu resim size yardımcı olacaktır.

Atmega168 Pinler

 

httpv://www.youtube.com/watch?v=w7pcAHf4ZeM

 

Sorularınız için bana Technopat Forum‘da ulaşabilirsiniz.