Arduino vs. AVR – Arduino ve Atmel AVR Karşılaştırması

Önceki yazımızda 32-bit mikrodenetleyici geliştirme kartı olarak piyasaya sunulan Arduino DUE kartını incelemiştik ve oldukça olumsuz bir izlenime sahip olmuştuk. 8-bit mikrodenetleyiciler için yazılan kütüphane kolleksiyonunu (framework) 32-bit bir mikrodenetleyici için kullanmaya kalkmanın büyük bir hata olduğunu delilleriyle beraber size anlatmıştık. Fakat 8-bit mikrodenetleyiciler için yazılmış olan bu framework 8-bit seviyesinde bile rakiplerine karşı oldukça zayıf kalmaktadır. Bir üçüncü parti C/C++ derleyicisi gibi çalışan Arduino kendine ait bir derleyiciye sahip değildir. Yani üçüncü parti bir derleyici ile karşılaştırılacak seviyede bir platform değildir.  AVR mikrodenetleyicilerini kullanan bir geliştirme platformunu da kendi kullandığı mikrodenetleyici ile karşılaştırmak biraz mantıksız görünse de biz gerçek Arduino’yu değil iddia edilen Arduino’yu bu iki alanda karşılaştıracağız. Bazı “medya çalışanları” tarafından “Yapılacak her şey sadece  hayal gücüyle sınırlı olan” bir platform olarak lanse edilse de genel olarak Arduino bir donanımsal ve yazılımsal bütünlükte olan bir geliştirme platformu olarak sunulmaktadır. Böyle olduğu zaman bunu kendi geliştirme kartı olan üçüncü parti derleyici statüsüne sokabiliriz.

Bana göre ise Arduino eğitim ürünü olup mikrodenetleyici ve yazılım eğitimlerinde kullanılan bir prototipleme platformudur. Arduino bir eğitim ürünü olarak gayet iyi iş yapmaktadır. Mikrodenetleyici programlamayı öğrenemeyen pek çok kimse Arduino ile mikrodenetleyici ve yazılım dünyasına giriş yapmaktadır. Bu noktada “açık kaynak” olduğu sürece Arduino’yu desteklememiz söz konusudur. Fakat bir mühendislik öğrencisinin Arduino’ya bağlanması ve bununla mesleğinde bir ilerleme beklentisi içerisinde olması büyük hata olacaktır. Ayrıca kendine “maker” diyebilen bir kişinin ise belli bir süreden sonra Arduino ile bağlarını kopartması gerekir. Dediğimiz gibi Arduino en iyi verimi başlangıç ve eğitim süresi boyunca vermektedir. Sonrası için ise bir ayak bağı olmaktadır. Yazdığım “Arduino Eğitim Kitabı” toplam 572 sayfadan oluşup bu konuda ortaya koyulmuş en kapsamlı eserlerden biridir. Kitabın gayesi Arduino’yu öğretip ortada bırakmak değil mikrodenetleyiciler üzerinde çalışacak insan yetiştirmektir. Kitapta yer alan örnekler bile oyuncakvari Arduino projeleri değil mikrodenetleyici eğitiminde kullanılmaya yönelik örnek projelerdir. Arduino üzerinden yazılımı, elektroniği ve mikrodenetleyicileri kolayca öğrenmek Arduino kullanmanın birinci gayesi olmalıdır.

Resim: http://assemblepgh.org/wp-content/uploads/arduino.jpg

Bir platform hakkında eğitim kitabı yazdığım ötekisi hakkında ise ders yazı dizisini bitirdiğim için hiçbirinin fanboyu olmadan objektif bir karşılaştırma yapabileceğime inanıyorum. Yoksa önce Arduino öğrenip sonra AVR ya da ARM’yi keşfettikten sonra Arduino’ya çamur atmaya başlayanlar gibi bir tutum içerisinde olsaydım bu yazının bir objektifliği kalmayacaktı. Kitabımda ise Arduino platformu hakkında oldukça olumlu yorumlarım mevcuttur. Bu yazı da bu dünyaya Arduino ile giriş yapanların şevkini kıracak nitelikte anlaşılmasın. Doğru bilgiyi öğrenmek herkesin hakkı olup yanlış bilgilerle bir ilerleme de sağlanamaz.

Önceki yazımızda DUE kartındaki  32-bit mikrodenetleyicinin donanım özelliklerinin neredeyse hiçbirini düzgün kullandıracak bir yazılım desteği olmadığını söylemiştik. CAN bus için karta bağlantı yuvası koyup CAN bus desteği vermemek gibi komedi derecesinde olaylar vardı. Şimdi Arduino’nun 8-bit AVR mikrodenetleyiciler için ne kadar yazılımsal destek sağladığına bakalım.

Öncelikle bir geliştiricinin bakış açısından bu geliştirme ortamlarını birbiriyle kıyaslayalım.  Öncelikle AVR-GCC üzerine yazılan Arduino ile AVR-GCC derleyicisine ve AVR donanımına bir bakalım ve Arduino’nun ne kadar başarılı olduğunu görelim.

C ile programlama yapacaklar için AVR donanımında bazı özellikler kullanım dışı olsa da bunların eksikliği yine bazı fonksiyonlarla ve makrolarla telafi edilmiştir. Geriye kalan işlemci komutları ve hafıza adresleri ise Assembly dilinde programlama yapacakları ilgilendirdiği için AVR Assembly’in C’ye göre kısıtlı yerlerde üstlünlükleri olup C dilinde tam kapsamlı programlama yapmamız karşısında bir engel bulunmamaktadır. C dilinin güçlü özelliklerini ve C kütüphanelerini kullanmak da bunun yanında büyük bir artıdır. Yazılımsal olarak Assembly’e göre büyük üstünlüğümüz bulunmaktadır. Assembly dilinin ise donanım olarak yüksek performans gerektiren uygulamalarda kullanılabilirliğinden başka çok da getirisi yoktur.

C ile AVR programlama derslerimizde anlattığımız üzere C dili ile kullanamadığımız bir donanım özelliği yoktu. Mikrodenetleyicinin datasheetini açıyor ve kafamıza göre programlama yapabiliyorduk. Bizim önümüzde bir engel yok gibiydi. Tabi kesme, uyku gibi çok az bir özellik için kütüphane dosyası kullanmamız gerekse de bu gerekli kütüphaneler de derleyici ile beraber geliyordu. Kimsenin yazdığı bir kütüphaneye muhtaç değildik. Arka planda neler döndüğünden haberimiz vardı. Bu sayede programımızı gayet kararlı ve yüksek performansta çalıştırabiliyorduk.

AVR donanımında yer alan Flash hafıza programlama, ADC, I2C, USART, SPI gibi birimler Arduino’da kütüphane olarak dahi olsa bulunmaktadır. Hem de bu birimleri kullanmak oldukça kolay hale gelmiştir. Fakat Analog Karşılaştırıcı, Zamanlayıcı ve Kesmelerin bir bölümü kullanım dışıdır.  En önemlisi ise Arduino’nun kopyaladığı Wiring frameworkünde bile yer alan Port fonksiyonları Arduino’da yer almamaktadır. Port fonksiyonlarının eksikliği yüzünden pek çok kez alt alta digitalWrite() yazmak zorunda kalmışızdır. Burada Analog karşılaştırıcı çok önemli olmasa da zamanlayıcılar çok önemlidir.

Zamanlayıcıları C ile AVR programlama derslerinde on derste ancak anlatabilmiştik. Zamanlayıcılar mikrodenetleyicinin en temel birimlerinden olup en önemli uygulamalarda yer almaktadır. Frekans okuma, frekans üretme ve zamanlama gibi çok hassas işleri bile yapabilen zamanlayıcılar Arduino’da millis() fonksiyonuna sıkıştırılmıştır. Bu fonksiyon ise yıllardan beri hatalı bir fonksiyon olup belli bir süre sonra sistemin çökmesine neden olmaktadır. On derste anlattığımız bir konuyu tek bir fonksiyona sıkıştırmak ne denli verimli olabilir siz düşünün. Diğer üçüncü parti derleyicilerde olduğu gibi bunun için 15-20 adet hazır fonksiyon yazsalardı fena mı olurdu ?

Bir sonraki yazıda Arduino’ya en yakın ortam olan üçüncü parti derleyici kategorisinde bir derleyici ile Arduino’yu karşılaştıracağız. Orada bunu daha rahat görebilirsiniz.

Kesmeler konusunda size onlarca kesmenin olduğunu söylemiştik. Zaten yavaş çalışan bir mikrodenetleyici için kesmelerin programın kararlılığı için çok önemli olduğu ortadadır. Bu kesmeler Arduino’da attachInterrupt() fonksiyonu ile kullanılır ve sadece iki ayaktan alınan dış kesme fonksiyonu çalıştırılır. Diğer kesmeler ortada yoktur. Olanlar ise fonksiyon ya da kütüphaneler ile arka planda çalıştığından müdahale etmemiz program kararsızlığına neden olabilir.

Arduino’nun belli başlı donanım özellikleri konusunda eksikliğinin olduğunu söylesek de çoğu donanım fonksiyonu için resmi olarak performanslı olmasa da güzel kütüphaneleri vardır. Kolayca öğrenmek ve kullanmak üzere iyi düşünülmüş ve özellikli kütüphanelerdir. Çoğu Wiring ortamından kopya edilse de bu tartışmaya şimdilik girmeyeceğiz. Wire, SPI, SD, EEPROM, LiquidCrystal kütüphanelerini fazlaca kullandım. Gerçi üçüncü parti bir derleyici satın alınınca da böyle temel kütüphanelerle beraber geliyor fakat bunun bulunmasını yine de artı bir özellik olarak sayacağız.

Buraya kadar Arduino topluluğundan ve üçüncü parti kütüphanelerden bahsetmediğimi hatırlatmam gerekir. Biz konuyu resmi statüde ele alıyoruz.

Biz bu Wire, SD, EEPROM gibi resmi kütüphaneleri kullanıyoruz. Fakat bir gün geldi yapmamız gereken projede Analog Karşılaştırıcı kullanmamız gerekti. Bunun için Arduino’nun sağladığı bir şey yoktur. İnternetten araştıracağız ve biri AVR-GCC kodlarıyla bunun için Arduino kütüphanesi yazmış olacak ve biz kullanacağız. Bunun gibi çoğu parça için çoğunlukla AVR-GCC kodlarıyla yazılmış kütüphaneleri Arduino’da kullanırız. Bu kütüphaneler topluluk tarafından yazıldığı için Arduino’ya mal edilemez.

Arduino kart olarak Atmega328P’yi tam anlamıyla kullanır ve mikrodenetleyiciye tam erişim sağlarız. Bu yüzden farklı bir derleyicide yazdığımız programı da bu karta atıp kullanabiliriz. Burada UNO kartı ne kadar projede kullanılmaya pek müsait şekilde olmasa da NANO gibi kartlar olduğu için kartların donanım olarak bir artısının olduğunu söylemek gerekir.

Buraya kadar Arduino’nun yazılımı ile AVR donanımını kıyasladık fakat AVR-GCC derleyicisi ile Arduino’yu pek fazla kıyaslama imkanı bulamadık.

Kıyaslamamız ise pek mümkün değildir çünkü Arduino AVR-GCC derleyicisi üzerine yazılan kütüphane kolleksiyonundan ibarettir. Bir kütüphane ile bir derleyici karşılaştırıldığında kütüphane her zaman daha kullanışlı fakat kararlılığı ve performansı düşük derleyici ise kullanışlılığı düşük ve kararlıkla performansı yüksek olacaktır. Birkaç hazır fonksiyon adına projenin kararlılığından ve performansından vazgeçebilmemiz için kar-zarar dengesini iyi hesaplamamız gereklidir. Burada hazır fonksiyonların oldukça kararsız ve performanssız olduğunu yaptığım onlarca projede gördüm.  Arduino ile bir cihaz yapıp bunu piyasaya sürmek büyük risk demektir. Arduino sadece eğitim alanında kullanılabilecek bir kararlılığa ve performansa sahiptir.

Bu performans ölçümünü en basit işlem olan dijital giriş ve çıkış işlemi ve bir osiloskop ile yapmanız mümkündür. En basit dijital giriş ve çıkış işleminde bile Arduino AVR’den ortalama 40 kat daha yavaş kalmaktadır.

Bir sonraki yazıda üçüncü parti bir AVR derleyicisi ile Arduino’yu karşılaştıracağım. Bu karşılaştırmanın daha verimli olacağına inanıyorum. Bir sonraki yazıda görüşmek üzere.

Kaynaklar,

Kapak Resmi, http://assemblepgh.org/wp-content/uploads/arduino.jpg

UYARI!!

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.