Neden AVR Mikrodenetleyicileri Öğrenmelisiniz?

AVR ile çalışmalara gerçek anlamda lojikprob.com sitesine yazmaya başladığım 2018'in yaz aylarında başlamıştım. O günden bu güne yaklaşık 3 yılın geçtiğini söyleyebilirim. Bu süre zarfında en çok meşgul olduğum mikrodenetleyiciler AVR serisi oldu ve yeterli miktarda tecrübe ettiğimi düşünmekteyim. Bu makalede bu tecrübelerden faydalanarak neden AVR mikrodenetleyicilerin öğrenilmesi gerektiğini sizlere açıklayacağım.

Öncelikle AVR mikrodenetleyiciler piyasanın en iyi mikrodenetleyici ailesi değildir. İşin aslında “en iyisi” diyebileceğimiz bir mikrodenetleyici ailesi de yoktur. Bazı noktalarda en iyisi diyeceğimiz mikrodenetleyiciler olsa da diğer noktalarda eksikliğini rahatça görebiliriz. Bu yüzden bir profesyonel anlamda çalışırken sevdiğiniz, beğendiğiniz için değil “ihtiyaca göre” seçim yapmanız gereklidir. Bazı firmalar halen 8051 mimarisini bile kullanmaktadır. Eskiliğinden ve verimsizliğinden dolayı çok haz edilmese de böyle bir firmada işe girdiğinizde mecburen bunu öğrenmek ve programlamak zorunda kalabilirsiniz. Profesyonel alan farklı olduğu için ben daha çok eğitim ve kendinizi geliştirme perspektifinden bakmaktayım.

Mikrodenetleyici Eğitimi

Bana göre AVR mikrodenetleyicilerin mikrodenetleyici eğitim sürecinde çok önem arz eden bir konumu vardır. Eğitim sürecinde 30 adım atmanız gerekliyse sadece 1. adımı Arduino ile atabilirsiniz. Ama 2. adımdan itibaren en azından 10. adıma kadar bunu AVR ile atma imkanınız vardır. Ben Arduino’nun asıl hedefimiz olmadığını söylediğim gibi AVR’ın da asıl hedef olmadığını söylemekteyim. Ama Arduino öğrenen biri bir adım atmış oluyorsa AVR öğrenen biri 10 adım atmış oluyor ve pek çok projeyi AVR ile rahatça yapabiliyor. Daha ilerisine ihtiyaç duyulduğu zaman ise tek çözüm AVR’dan daha ilerisine geçmektir. Burada yine ihtiyacınıza göre programlanabilir mantık, gömülü linux ya da 32-bit mikrodenetleyiciler üzerinde çalışabilirsiniz. Ama öğrendiğiniz AVR bilgisi bir kazanım olarak sizde kalacaktır.

Eğer yapılabilseydi herkese doğrudan STM32 gibi 32-bit mikrodenetleyicileri öğrenmekle işe başlayın derdim. Ama eğitim denen süreç kademeli olarak ilerlemektedir. Kimse bir ilkokul öğrencisine limit, türev ya da integral öğretmez. İlkokul öğrencisi de bunu kolay kolay öğrenemez. Ama öğretilen dört işlem ile bu ileri seviye matematik konularını öğrenmese dahi hayatını kolaylaştırabilir. En azından markete, pazara gidince hesabını yapabilir.

Mikrodenetleyici eğitiminde ise Arduino işin ilk adımı olarak görülse de insanı asla yeterli bir noktaya getirmemektedir. İş yapabilir seviyeye gelmek için daha ilerisine geçiş şarttır. Bunların 32-bit mikrodenetleyiciler olması da şart değildir. Yapılan işin niteliğine göre belki de AVR yapacağınız projelerde oldukça yeterli olabilir.

Kaynaklar

Şu an AVR hakkında yeterli miktarda Türkçe kaynağın meydana geldiğini söyleyebilirim. Türkçe kaynakların yetmediği noktada ise İngilizce kaynaklar elinizin altındadır. Kaynak bakımından diğer mikrodenetleyicilerle kıyaslarsak AVR daha iyi bir noktadadır diyebilirim. Daha öncesinde PIC kaynakları fazla olduğu için öğrenciler 8-bit PIC mikrodenetleyicileri öğrenmeyi tercih etmekteydi. Bir dönem ise Arduino kaynakları az olduğu için mühendislik öğrencileri bile Arduino’yu öğrenmekte sıkıntı yaşamaktaydı. Bilişim medyası mensubu Youtubeçular bu yüzden tık alabilme adına Arduino eğitmenliğine başlamaktaydı. Arduino noktasında “nitelikli” kaynaklar yeterli bir seviyeye geldikten sonra artık Arduino öğrenmenin bir mesele olmadığını görmüş olduk. Yani bir konu hakkında yeterli kaynak varsa gereksiz yere zorluk çekilmemekte, öğrenciler rahat bir şekilde öğrenmektedir. Bizim yıllar boyu nitelikli kaynak oluşturma çabamız da bu yüzdendir.

Gerçekten Gömülü Yazılımı Öğretmesi

Daha öncesinde PIC hakkında pek çok kaynak olsa da bu kaynakların çoğunun “CCS C” veya “Mikro C” gibi framework kullanan yani hazır kütüphane fonksiyonlarını kullandığımız derleyiciler üzerinden anlattığını görmekteyiz. CCS C, Arduino’dan çok da farklı olmayıp tamamen hazır kütüphane fonksiyonlarından oluşmakta ve işin derinine inmenize mani olmaktadır. Üstelik Arduino gibi kaynak kodu da açık olmayıp öğrenmeye tamamen bir bariyer haline gelmektedir. Bu tarz ticari ürünleri eğitimde kullanırken dikkatli olmak gerekli, mümkün mertebe açık kaynağa yönelmek gereklidir. AVR’ın derleyicisi, derleyici dosyaları açık kaynaklı olduğu için yeri geldiğinde işin derinine inip dosyaları incelemeniz mümkündür. Biz de yazdığımız kaynaklarda bunu yeri geldiğince yaptık ve işin mantığını anlatmakta oldukça yardımcı oldu.

Siz Arduino, CCS C gibi frameworklerin hazır kütüphane fonksiyonlarına bağlı kalarak asla gerçek manada gömülü yazılımcılığı öğrenemezsiniz. Bare-metal yani yazmaç seviyesinde kod yazabilmeli ve yeri geldiğinde derleyicinin yerleşik fonksiyonları, inline assembly gibi konulara inebilmelisiniz. Önemli olan nokta ise datasheet okuyabilmeli ve burada okuduklarınızı kod haline getirebilmelisiniz. Bu sizin kazanmanız gereken bir yetenek olsa da bu tarz hazırlanmış, sizi buna yönelten eğitim kaynaklarını kullanmanız önem arz etmekte.

AVR, AVR-GCC derleyicisi ile gelmekte ve beraberinde standart olarak bir framework getirmemekte. Birkaç derleyici dosyası hariç pek çok işinizi sıfırdan yani bare-metal olarak yapmak zorundasınız. Yani datasheet okumadan, işin aslını öğrenmeden kolay bir şekilde AVR programlama söz konusu değildir. Bunun zor olacağını düşünseniz de AVR basitliği ile 32-bit denetleyiciler kadar sizi zorlamaycak ve en önemlisi canınızı sıkmayacaktır. Eğlenerek bu işi yapmanız işin başındayken hevesinizin kaçmaması için önemlidir. Şahsen ben STM32'ler üzerinde de bir süre çalıştım ama zorluğu ve can sıkıcılığından dolayı tekrar AVR’a döndüm. Şu an ihtiyaç duymadığım ve yazılıma yöneldiğim için aşırı derecede kafa yormak istemiyorum.

Yazılımcıysanız AVR Öğrenin

İnternet ortamında pek çok zaman bilgisayar öğretmenleri, web geliştiriciler gibi yazılım ağırlıklı çalışan meslek sahiplerinin Arduino’ya meraklandığını ve severek bunu öğrenip uygulama yaptıklarını görmekteyim. Bu bir hobi olara hoş olsa da web, mobil veya diğer uygulama yazılımı geliştirme bilgisi ile gömülü sistem programcılığını birleştirip güzel projeler yapma potansiyeli mevcuttur. Bunun için 32-bit mikrodenetleyicilere kafa yormak da şart değildir. Bir tık ilerisini öğrenmekle güzel projeler ortaya koyulabilir. Böyle bir durumda AVR’ı tavsiye ederiz. AVR işin aslında elektronikçilerden çok yazılımcılara yönelik bir mikrodenetleyici ailesidir. Yeri geldiğinde ise Arduino topluluğunun yazdığı kütüphanelerden ve projelerden ilham alma veya onlardan yararlanma imkanınız mevcuttur.

Ben de halen AVR üzerinde çalışırken yeri geldiğinde Arduino topluluğunun yazdığı programlardan yararlanmaktayım. Bunu AVR’a uyarlamak hiç zor değil.

Yeterli Derecede Performanslı

AVR’lar performansı ile çok öne çıkan mikrodenetleyiciler değiller. Ama bunların performans noktasında oldukça yeterli olduğunu, küçümsenmemesi gerektiğini söylemeliyim. Her ne kadar 8-bit olup 16–20MHz aralığında çalışsa da pek çok komut sadece bir çevirimde çalışmakta ve zengin komut kümesiyle 8-bit PIC gibi serilerden çok daha fazla performanslı çalışmaktadır. Üstelik AVR-GCC üzerinde çalışırken C derleyicisinin de oldukça iyi olduğunu gördüm. Assembly kodlarını üretirken oldukça verimli kod üretmekte ve kodunuz C dilinde yazılsa da Asssembly’i çok aratmayacak derecede performanslı çalışmakta. Bu performansın biraz da kontrol uygulamaları için geçerli olduğunu unutmayın. Yani dış dünya ve çevre birimleri ile fazlaca etkileşime geçiyor ve iç tarafta yoğun bir işlem yapmıyorsanız 32-bit mikrodenetleyicileri bile çok aramazsınız. Ama sizin için gerekli olan işlem gücü ise istediğiniz performansı elde etmekte sorun yaşayabilirsiniz.

Assembly

Bir gömülü yazılımcı değer alt seviye çalışıyorsa muhakkak eğitim sürecinde en azından bir mimarinin Assembly dilini öğrenmek zorundadır. Bu Assembly dili okullarda 8086 üzerinden öğretilen Assembly dili olmaktansa günümüzde uygulama yaparak öğreneceğiniz ve ortak Assembly diline çok daha uzak olmayan bir dil olabilir. Bu durumda AVR Assembly oldukça iyi bir tercih olacaktır. Örneğin PIC Assembly dilini “marjinal” assembly dilleri içerisine sokabiliriz. Her ne kadar 35 komut içerse de pek çok mimarinin Assembly diline oldukça yabancı olup 80'lerin RISC idealini daha çok yansıtmaktadır. Şimdiki RISC mimarilerinin neredeyse hepsinin PIC mimarisinden oldukça uzak olduğunu görebilirsiniz. AVR Assembly dili hem öğrenmesi kolaydır, hem C diline daha çok benzetilebilir hem de diğer Assembly dillerini anlamlandırmada size yardımcı olacaktır. AVR Assembly’de her bir komutun C dilindeki karşılığını bulabilir, bu şekilde anlamdırabilirsiniz. Zaten C diline göre tasarlandığını üretici de teknik dokümanlarında yazmaktadır ve bu yüzden C derleyicisi gayet performanslı çalışmaktadır.

Keyifle Çalışmak

Bütün bunlardan ilerisi bir iş üzerinde çalışırken bundan eğlenmeniz, keyif alabilmeniz gereklidir. AVR öğrenirken ve bunun üzerinde çalışırken bunu hissedebilirsiniz. Arduino da başta her ne kadar eğlenceli gelse de bir süre sonra sığlığından ve basitliğinden dolayı sıkacak. Adeta oyuncakla oynuyormuş havasına kapılacaksınız. Arduino’nun sizi tatmin etme noktasında çok başarısı yoktur. Ben şu ana kadar yaptığım bütün AVR uygulamalarından ve yazdığım makalelerden yeterince keyif aldım ve hiçbir zaman zaman kaybettiğimi, pişman olduğumu söyleyemem. Yaptığım her uygulama bana bir katkıda bulundu ve yerimde saydırmadı. Eğer Arduino’ya bağlı kalırsanız bir müddet sonra yerinizde saydığınızı ve ilerleyemediğinizi hissedip bu konu hakkında da bir çare üretememekten yakındığınızı göreceksiniz.

--

--