Mikrodenetleyici Programlamaya Başlamak

2018 yılında bloguma mümkün olduğunca fazla içerik yazmak gibi bir hedef koydum. Bu içerikler genellikle tezimi ve projemi yaparken kullandığım metodlar-araçlar, gömülü sistemler, programlama vb. ile ilgili olacak. Bu hafta daha önce elektrikport.om ‘da yazdığım Mikrodenetleyiciler Nasıl Çalışır içerik dizisinden yola çıkarak Mikrodenetleyi öğrenmeye ve programlamaya başlamak üzerine olacak. Bunu bir kaç hafta devam ettirmeyi düşünüyorum. Ardından daha farklı içeriklerle yine blog yazmaya devam edeceğim.

Bahsettiğim içerik dizisinde genel olarak mikrodenetleyicilerin yapısından bahsetmiştim. Bu yazı dizisinde ise içerikleri güncelleyerek mikrodenetleyici programlamaya başlamak isteyenler için bir rehber oluşturmak istiyorum.

Mikroişlemci nedir? –  Mikrodenetleyici nedir?

Öncelikle mikroişlemci ve mikrodenetleyici kavramları arasındaki farkı açıklayalım. Bu iki kavram zaman zaman birbiri yerine kullanılsa da ifade ettikleri aslında farklı yapılardır. Bir mikroişlemci sadece işlem ve hafıza birimlerinden oluşurken mikrodenetleyici hafıza, analog dijital çevirici, zamanlayıcı gibi çevre birimlerini de bünyesinde barındırır. Mikroişlemciler günümüzde genellikle kişisel bilgisayarlarda kullanılmaktadır (Intel, AMD …). 

Mikrodenetleyiciler ise genellikle endüstriye yönelik olarak kontrol ve otomasyon işlemlerini gerçekleştirmek için tasarlanmış, içerisinde bir mikroişlemci barındıran kontrol üniteleri olarak tanımlayabiliriz (PIC, AVR, MSP430, ARM, 8051). Üzerlerinde mikroişlemcilere göre daha fazla birimi barındırırlar fakat mikroişlemcilere göre daha yavaş çalışırlar. Bugün üretilen mikroişlemci-mikrodenetleyicilerin sadece %2’si bilgisayarlarda kullanılırken geri kalan %98 ‘i gömülü sistemlerde kullanılıyor.

Gömülü Sistem Nedir?

Gömülü sistemlerin birden fazla tanımı olsa da en sevdiğim ve en kısa tanımı şöyledir; “tek bir amaca yönelik olarak tasarlanmış küçük bilgisayarlar”. Bir gömülü sistem genellikle mikrodenetleyici ve birkaç çevre biriminden oluşur. Çamaşır makinalarında, mikrodalga fırınlarda, otomobillerde halk arasında “beyin” olarak tabir edilen elektronik birimler birer gömülü sistemdir. Çamaşır makinasını kontrol eden elektronik kart kabaca bir veya birden fazla mikrodenetleyici, motor sürücü, sıcaklık sensörü gibi birimlerden oluşur. Bu gömülü sistem ve mikrodenetleyici içerisinde bulunan gömülü yazılım ömrü boyunca sadece çamaşır makinasını kontrol edecek şekilde tasarlanmış ve yazılmıştır. Gömülü sistemlere tek bir amaç için tasarlandıkları için dedicated system- adanmış sistem ismi de verilir.

Mikrodenetleyici Aileleri

Günümüzde ST ve TI firmalarının ARM çekirdekli mikrodenetleyicileri, Microchip firmasının PIC ailesi, ATMEL firmasının (Microchip’e satıldığı için artık Microchip firmasının diyebiliriz) AVR ailesi yaygın olarak kullanılmaktadır. Özellikle gelişmiş işlem kapasitesi, hafıza boyutu, çevre birimlerinin zenginliği ile ARM çekirdekli mikrodenetleyicilerin popülerliğini giderek arttırıyor.

2017 yılında yapılan gömülü sistemler piyasa araştırması hangi mikrodenetleyici ailelerinin hangi oranlarda tercih edildiğini ayrıntılı olarak ortaya koymuş. İncelemek için aşağıdaki linke tıklayabilirsiniz.

2017 Gömülü Sistemler Piyasa Araştırması | gomuluyazilim.com

Mikrodenetleyici Savaşları

Eğer bu konuya ilginiz vara zaman zaman bazı forumlarda “en iyi mikroişlemci hangisi” gibi uzun tartışmalarla karşılaşmış olabilirsiniz. Eğer bir gömülü sistem mühendisi olmak istiyorsanız bu gibi kısır tartışmalara takılmadan, günlerce acaba hangi mikrodenetleyiciyi öğrenmeliyim sorusuna cevap aramadan doğrudan öğrenmeniz gerekenlere odaklanın. Çünkü “en iyi mikrodenetleyici şudur” denilemez ve bir mikrodenetleyici ailesi ile başladıktan sonra başka bir aileye-mimariye geçiş yaptığınızda sıfırdan başlamazsınız.

Gömülü sistemlerde bir tarafta sizin ihtiyaçlarınız öbür tarafta ise bu ihiyaçlarınızı en iyi fiyat/performans oranıyla karşılayan en uygun mikrodenetleyici vardır. En uygun tanımını biraz açalım. Öncelikle tasarlayacağınız sistemde ihtiyaçlarınızı belirlediniz. Kısa bir araştırma yaptığınızda sizin bu ihtiyaçlarınızı karşılayacak onlarca farklı mikrodenetleyici bulacaksınız. Hangisini seçeceksiniz? Burada farklı parametreler devreye girecek; eğer maliyet sizin için önemli ise ve zaman sıkıntınız yoksa ihityaçlarınızı karşılayan en ucuz mikrodenetleyiciyi seçmek isteyebilirsiniz. Seçtiğiniz denetleyici mimarisine aşina olmasanız bile zaman sıkıntınız olmadığı için bu problem olmayacaktır. Ya da ciddi bir zaman kısıtınız varsa ve maliyet o kadar önemli değilse aşina olduğunuz pahalı bir mikrodenetleyici ile çalışabilirsiniz. Üretim sayısı, zaman kısıtı, erişilebilirlik, geliştirme ortamlarının zenginliği bu parametrelerden bazıları.

Mikrodenetleyici Programlamayı Öğrenmek

Mikrodenetleyici programlamayı öğrenmek ile ilgili özellikle öğrenciler arasında yaygın olarak gördüğüm bir yanılgı var. Bir mikrodenetleyici ailesini programlamayı öğrendikten sonra başka bir proje için ya da daha popüler hale geldiği için fakrlı bir aileye geçiş yapmak sıfırdan başlamak değildir.

Mikrodenetleyici programlamayı öğrenirken aslında tüm mikrodentleyici mimarilerinde ve ailelerinde ortak olan kavramlarla/birimlerle başlarsınız. Bu kavramlar, birimler farklı üreticiler tarafından farklı isimlendirilebilir. Ama bu temelde aynı şey oldukları gerçeğini değiştirmez. Bu yüzden mikrodenetleyici öğrenmeye başlamak isteyen birinin odaklanması gereken nokta mikrodenetleyicilerin genel yapısı, çevre birimleri ve algoritmadır. Algoritma kurmayı ve mikrodenetleyicilerin, mikrodenetleyici birimlerinin nasıl çalıştığını anlayan bir mühendis kolay bir şekilde üreticilerin yayınladıkları dökümanlardan yardım alarak yeni yapıya alışacaktır. 

Hangi dil?

Bugün mikrodenetleyici programlamak için kullanılan en yaygın dil C dilidir. Mikrodenetleyiciler için farklı dillerde birçok derleyici geliştirilse de hangi mikrodenetleyici olursa olsun programlamak için en efektif dil hala C dilidir. Üreticiler mikrodenetleyicilerini tasarlarken bir komut seti ile kontrol edilecek şekilde tasarlarlar. Bu komut seti assembly dili olarak ifade edilir. Bu komut setini makina kodlarına çeviren yazılıma ise assembler. C dilinden önce mikrodenetleyiciler bu düşük seviyeli dil (assembly) ile programlanıyordu. Daha sonra üreticiler ve geliştirme ortamı ve derleyici geliştiricileri C dilinin nimetlerinden faydalanmak için C dilinde yazılan kodları assembly diline çeviren derleyiciler yayınladırlar. Bugün assembly artık sadece hassas zaman işlemleri gerektiren yerlerde kullanılıyor. 

Assembly Öğrenmeli miyim?

Bir gömülü sistem mühendisi olmak istiyorsanız bile muhtmelen assembly ile kod yazma ihtiyacı duymayacaksınız. Ama yine de assembly bilmenin mikrodenetleyici yapısını anlamak için önemli olduğunu düşünüyorum. Bu yüzden mikrodenetleyici programlama öğrenmeye başladığınızda yapacağını ilk “hello world!” uygulamasını yani led yakma uygulamasını ve buna benzer bikaç basit uygulamayı bir kaç saatinizi ayırarak assembly dilinde yazmaya çalışmanızı tavsiye ederim.

Kısaca mikrodenetleyiciler ve onları programlamak ile ilgili genel bir bilgiye sahip olmuş olduk. Bir sonraki içerikte mikrodenetleyicilerin genel yapısı, çevre birimleri, haberleşme protokolleri, system on chip gibi kavramları inceleyeceğiz.

Sorularınız için yorum yazabilirsiniz.

Bir Cevap Yazın