ARM Tabanlı Mikrodenetleyiciler
ve
Buton - Led Uygulaması
Bugünkü yazıda farklı bir konuya giriş yapmak istiyorum ve iş ilanlarında sıkça karşınıza çıkacak bir işlemciden bahsetmek istiyorum. Arduino ile hobi olarak ufak bir giriş yaptığımız bu gömülü sistem mühendisliğinde asıl amaç ARM gibi önemli bir işlemciyi öğrenmek olmalıdır. Hemen hemen bütün elektronik firmaları arm mimarisine sahip işlemcileri kullanmaktadır. Bu sebeple elektronik mühendisliği yapmak isteyen herkesin bilmesi gereken bir alandır ARM.
32 bit ve 64 bit olmak üzere 2 farklı sürümü bulunur. Az enerji tüketirler ve uygun fiyata üretilebilirler ve yüksek performans ile çalışırlar. Bu avantajlarından dolayı tabletlerde, laptoplarda ve mobil cihazlarda sıkça tercih edilmiştir. 2014 yılından beri üretilen cep telefonlarının %98'i ARM tabanlı mikroişlemcilerle yapılmıştır.
Apple'da Iphone modelinde ARM mimarisini kullanmaktadır.
Şunu bilmekte fayda var ki ARM firması kendi başına mikroişlemci üreten bir firma değildir. Firma, arm mimarisini ürettikten sonra mikroişlemci üreten firmalara bu mimariyi lisanslar. Raspberry Pi ve STM gibi firmalar kartlarını bu mimari üzerine geliştirmişlerdir. Ben bu yazıda STM modeli üzerinden bir butonla led nasıl yakılır onu göstermeye çalışacağım.
Arm mimarisi temel olarak 3 gruba ayrılmaktadır ;
1 ) Klasik Arm İşlemciler : ARM7, ARM9, ARM 11
2 ) Gömülü sistemlere yönelik Arm işlemciler : Cortex - M0, Cortex - M1 vs.
3 ) Uygulama seviyesindeki Arm işlemciler : Cortex - A5, Cortex - A8 vs.
Klasik arm işlemciler daha çok motor kontrolü, sinyal işleme gibi uygulamalarda kullanılırken Cortex M ve R serisi STM, TI ve Toshiba gibi firmalar tarafından tercih edilir. Cortex A serisi ise Iphone,Ipad, Galaxy Tablet gibi elektronik cihazlarda tercih edilir. Şunu bilmek gerekir kullanım alanları farklı olsa da programlama yöntemleri birbirine oldukça benzemektedir. Herhangi bir modeli programlamayı öğrenen bir kişi diğer modellere de kolayca adapte olacaktır.
Arm hakkında temel düzeyde bir bilgi sahibi olduysak butonla led yakma uygulamamıza yavaşça geçelim. Kodlara girmeden bazı temel kavramları başlıklar halinde kısaca açıklamak istiyorum. Bu şekilde kodları incelerken daha az kafamız karışabilir.
GPIO : Elektronik devre kartı üzerinde bulunan diğer modüllerle haberleşmeyi ve diğer modülleri kontrol etmeyi sağlayan " Genel Amaçlı Giriş / Çıkış Portları " dır. Bir GPIO aynı anda hem giriş hem de çıkış portu olarak kullanılabilir. GPIO modülü zamana bağlı bir modüldür. Bu sebeple bu modülün clock bilgisi verilmelidir ve konfigürasyonları yapılmalıdır. Aksi halde çalışmaz.
Push / Pull : Pull Up ve Pull Down kelime anlamı olarak " yukarı çekmek " ve " aşağı çekmek " anlamlarına gelir. Pull Down'da butona basıldığında işlemciye +Vcc giderken Pull Up'da butona basıldığında işlemciye Gnd bilgisi gider.
ARM programlama yaparken bilmemiz gereken başka bir şey var ki o da şudur : Esasen butonun yalnızca Pull Down ve Pull Up dışında 3. bir durumu daha vardır. 3. durum ise " Open Drain " durumudur yani BUTON BİLGİSİNİN GİTMEDİĞİ DURUM. GPIO'u pull down yada pull up diye konfigüre etmediğimiz zaman bacak doğrudan open drain modunda çalışacaktır. Yani çıkışında 5 V varsa çıkışa 5V gider, 0V varsa çıkışa direk 0V gider. Biz ledlerimizi butonla kontrol etmek istediğimiz için buton konfigürasyonu sırasında Pull Up yada Pull Down şeklinde olduğu bilgisini de programımıza yazacağız.
Şimdi programa geçebiliriz ;
Komutların hangi amaçla kullanıldığını açıklamak gerekirse ;
GPIO_InitTypeDef GPIO_InitStructure : İlk yazdığımız kod GPIO'un ( Genel Amaçlı Giriş Çıkış Portlarının ) istediğimiz şekilde kullanılabilmesi için yazdığımız bir koddur. Onun önüne yazılan GPIO_InitStructure sadece bir değişkendir. Herhangi bir şey yazılabilir. Genelde bu şekilde kullanıldığı için biz de böyle yazdık.
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0 ) : GPIO_ReadInputDataBit istediğimiz kanaldan gelen veriyi okumak için kullanılır. Butonu konfigüre ederken A kanalını kullandığımız için A kanalındaki A0 bacağını okuduk.
GPIO_SetBits : İstenilen bacağı aktif eder, 5V ile besler.
GPIO_ResetBits : İstenilen bacağı pasif hale geçirir, 0V gönderir.
Konuyla ilgili böyle anlaşılır ve açıklayıcı bilgilere ulaşamamıştım teşekkür ederim
YanıtlaSil