Gömülü Sistem Rehberi -8- 8-Bit Mikrodenetleyiciler Üzerinden İlerlemek

Arduino ile ilgili tartışmalara bakınca bazden keşke Arduino hiç olmasaydı da bunlarla uğraşmak ve bunları tartışmak yerine herkes doğrudan 8-bit mikrodenetleyicileri programlamaya başlasaydı dediğim olmuştur. Günümüzde mühendislerin bile Arduino ile uğraştığını ve daha 8-bit mikrodenetleyicileri programlamayı öğrenemediklerini görmekteyiz. Arduino’nun gerçek geliştiricilik arasında nasıl bir perde görevi gördüğünü ve eğer doğru bakış açısıyla olaya bakılmadıkça bu perdenin kalkamayacağını tecrübe ederek öğrenmekteyiz. Benim gibi pek çok ileri seviye konuları anlatan insan bir konuyu anlatırken ilgi çekmesi için Arduino’yu bahane ederek konuyu anlatmaktadır. Örneğin normalde AVR’de zamanlayıcı, analog karşılaştırıcı kullanımını anlatacaksak Arduino’da zamanlayıcı ya da analog karşılaştırıcı kullanımı diye anlatmak zorundayız. Çünkü o sektör Arduino merkezli hale gelmiştir ve Arduino’ya rağmen biz birşeyler anlatmak durumunda kalmaktayız. Bunu da yine Arduino’nun adını kullanarak yapmak durumundayız. Arduino merkezli düşünen ve konuya yukarıdan bakamayan kitlelerden ve Arduino’nun tekelleşmesinden aşırı derecede muzdaribiz.

Ben mikrodenetleyiciler ve elektroniğe başladığım sıralarda Arduino’nun adı hiçbiryerde duyulmuş değildi. Fakat Arduino sektörü oluşmadığından elektronik parça, modül ve geliştirme kartlarını da kolay kolay bulamıyorduk. Elimizde yeterli malzeme olmadığı için yapabileceklerimiz oldukça kısıtlıydı. Şimdi ise çok güzel entegreleri bile modül haline getirip Arduino ile kullanılmak üzere pazarlamaktalar. Bu biz geliştiricilerin yararına olmuştur. Gerçi bu modülleri bir noktadan sonra kendimiz de yapabilsek de işin başında kolay kullanılır ve erişebilir malzemeler oldukça artmıştır. Örneğin AD9833 dalga üreteci modülünü birkaç tık ile alıp projemde kullanabilirim. Ben ilk başladığım zamanlarda bunu almak da kullanmak da hayal gibi birşeydi.

Bunun gibi ekranlar, konnektörler, entegreler ve çeşitli modüller bu Arduino ve büyüyen kitlesi sayesinde sürekli artmış ve geniş bir pazar haline gelmiştir. Bunu biz geliştiriciler lehimize kullanabiliriz. Aynı zamanda Ardunio ile açık kaynak ve kod paylaşımı konusunda geliştiriciler motive olmuş ve pek çok kütüphane yazmıştır. Bu kütüphaneleri illa Arduino ile kullanmamız şart değildir. Pek çoğu bize yazılımsal açıdan fikir verecek ve yardımcı olacak kütüphanelerdir. Bir kütüphane nasıl yazılır sorusuna bir kütüphaneyi inceleyerek başlamak en iyi yollardan biridir. Ne kadar hazır yazılmış kodları ve kütüphaneleri incelerseniz o kadar ustalığı öğrenirsiniz. Bunu öğrendikten sonra Arduino kullanıcıları gibi bulduğunuz kütüphaneyi olduğu gibi kullanmazsınız. Hatta kodları incelersiniz ve beğenmezseniz düzeltebilirsiniz.

Ben 8-bit mikrodenetleyiciler üzerinde AVR ile ilerledim. Daha öncesinde PIC ile ilgili çalışmalarım olsa da onlar lise zamanlarında kaldığı için başlangıç seviyesinde kalmıştı. 8-bit mikrodenetleyiciler üzerinde ilerlemenin en iyi yolunun AVR öğrenmekle olduğunu iddia etmekteyim. Bunun en önemli sebebi ise mevcut olan kaynak kodlar, kütüphaneler ve Arduino’dur. Arduino’nun kaynak kodunu incelediğim ve size aktardığım Arduino Kaynak Kodu İncelemesi adlı çalışmamda Arduino ile birşey yapmayı değil doğrudan Arduino yapmayı öğrendik aslında. Kaynak kodları inceledikten sonra Arduino’nun nasıl meydana geldiğini, eksik yönlerini ve bizim nasıl ideal bir kütüphane kolleksiyonu (Framework) yapabileceğimizi anlamış oldum. Bunları inceledikten sonra Arduino’nun pek dikkate değmeyecek öğrenci projesi olmaktan öte de pek gidemediğini görebilme imkanına sahip oluruz. Zaten Arduino da bir öğrencinin master tezinden öte bir şey değildi. Bunun marka haline gelmesi, tekelleşmesi, büyük bir sektör olması medyanın manipulasyonu ile olmuştur.  Arduino bize çok büyük bir icat gibi gösterilmekte ve eğitimlerde Arduino’dan ilerisine atıfta bile bulunulmamaktadır. Bu belki hobicilere yönelik böyle olsa kabul edilebilir fakat mühendislerin ve bu işte profesyonel olmak isteyenlerin bu şekilde zaman kaybetmesi kabul edilemez.

8-bit mikrodenetleyiciler üzerinde ilerlemenin en iyi yolunun AVR öğrenmek ve Arduino’nun kaynak koduyla kütüphanelerini incelemek olduğunu söylesek de işin PIC tarafını görmezden gelememek gereklidir. PIC programlarken yine AVR ve Arduino ikilisinde olduğu gibi işin basit ve karmaşık boyutu olmak üzere iki boyutu vardır. PIC Basic, Proton, CCS C, Mikro C gibi derleyiciler ile işin basit boyutunda kalsak da yazmaç tabanlı C dilinde program yazmakla ya da PIC Assembly ile işin ileri boyutuna gitme şansımız olur. 8-bit mikrodenetleyicilerde ileri gitmek için hazır fonksiyonları donanımdan bihaber kullandığımız derleyicilerden kurtulmamız gereklidir. Fakat başlangıç için Arduino’nun kötü olmadığını söylediğimiz gibi CCS C veya Mikro C’nin de kötü olmadığını söylüyoruz. Hazır fonksiyonların ve kütüphanelerin olması bize projelerimizde hız katacaktır ve yazılım uygulamalarını, pratiği yüzlerce sayfa datasheet okumadan edinmemizi sağlayacaktır. Fakat işin eninde sonunda ileri seviye olabilmek için muhakkak yazmaçlarla ve bitlerle muhatap olmak gereklidir. Assembly programcısı olmak ya da Assembly üzerinde program yazmak şart olmasa da bir platformun Assembly dilini öğrenip anlamak lazımdır. Bunu hiç kullanmasanız dahi günün birinde karşınıza çıktığında zorlanmadan öğrenebilmeniz için mantığını bilmeniz gereklidir. Örneğin ben AVR Assembly dilini ve mantığını kavrasam da Assembly dilinde bir satır kod yazmadım. Açıkcası kod yazma ihtiyacı duymadım. Fakat kod yazmak gerektiğinde sıfır durumunda olmayacağım ve sadece teorik bilgimi pratiğe dökmek gerekecek.

Ben hobicilerin BASIC dili ile program yazmasına karışmasam da bir geliştiricinin C dilini öğrenmesi ve bir C derleyicisinde program yazmaya başlamasını kesin olarak savunmaktayım. Hatta Assembly öğrenilmeden önce C öğrenilmeli ve Assembly ile programlama işi sonraya bırakılmalıdır. AVR için Arduino -> AVR-GCC şeklinde bir ilerleme izlendiği gibi PIC için de CCS C/MikroC -> C dilinde yazmaç tabanlı programlama şeklinde bir yol izlenmelidir. Yani önce hazır fonksiyonların ve kütüphanelerin bulunduğu derleyicileri öğrensek de sonrasında datasheet okumaya başlamalı, temel bilgi ve donanım bilgisini ilerletmeli ve gömülü C programcılığını geliştirerek yazmaç tabanlı programlamaya geçmeliyiz. Durum böyle olduğu zaman işin çoğunu halletmiş sayılırız. Hatta pek çok geliştirici 8-bit mikrodenetleyicileri bu seviyede programlamayı öğrendikten sonra artık çok da ileri gitmemektedir. Aslında bu noktada durup bu konuda uzmanlaşmak gerekse de öğrencinin zamanı kısıtlı olduğu için diğer konuları öğrenmeyi çok geciktirmemesi lazımdır. Ben şu an kullanmasam dahi ileride ihtiyacım olacağından dolayı STM32’lerin mantığın çoktan kavramış ve programlanabilir mantık üzerinde ön araştırmalara başlamış durumdayım. Eğer sağlam bir temel ve yabancı dile sahip olmasaydım çok fazla tökezleyecektim. O yüzden kendine güvenmeyen öğrencilerin bu kadar hızlı gitmesini tavsiye etmiyorum.

Bazıları basamaklar arasında uzun süre durmayı zaman kaybı olarak nitelendirse de bu öğrenciye göre değişmektedir. Eğer öğrenci bir sonraki seviyeye geçmeye hazır olup da geçmiyorsa zaman kaybediyor demektir. Sizin bir sonraki seviyeye geçme zamanınızı yine siz bilmek zorundasınız. Bunun için en iyi ölçüt “Artık avcumun için gibi biliyorum. Öğreneceğim birşey kalmadı.” diyebilmektir. AVR’yi avcumun içi gibi bilmeden STM32’ye başlasaydım ne AVR’yi öğrenebilecektim ne STM32’yi. O yüzden bir şeyi sağlam olarak öğrenin, o sizin garantiniz olsun ve sonrasında öğrenip öğrenemeyeceğiniz meçhul olan bir konuya giriş yapın. Bu bir programlama dilini tam olarak bilmeden bir diğer programlama dilini öğrenmeme konusunda da geçerlidir. Birini tam olarak bilmek 5-6 programlama dilini yarım yarım öğrenmekten daha iyidir. Yeni başlayanların tam öğrenmesi gereken iki temel konu AVR mikrodenetleyiciler ve C dili olmalıdır. C dilini etkin bir şekilde kullanabilmeli, yazılı kodları anlayabilmeli, kütüphaneleri çözebilmeli, kütüphane yazabilmelisiniz. Aynı zamanda datasheeti de neredeyse ezberinizdeymiş gibi okuyup anlamalısınız. Burada ezberlemek değil anlamak ve kafanızda bir mikrodenetleyiciyi bina etmeniz gereklidir.

8-bit mikrodenetleyiciler üzerinden ilerlemeyi anlatırken pratiği, devre tasarımını, c programlama dilini konuya dahil etmiyorum. Çünkü bunlar üzerinde ayrı fakat eşzamanlı olarak ilerlemeniz gerekli ve hepsinin de ayrı ayrı püf noktaları bulunmaktadır. Bunları farklı bir yazıda ele alacağım için benim yazdığım yazıları da ayrı ayrı okumalı fakat eşzamanlı olarak takip etmelisiniz. İlerleyen yazılarda farklı yönlerden gömülü sistemler üzerinde ilerleme konusuna devam edeceğim.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

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.