Arduino Kaynak Kodu İncelemesi -5- pins_arduino.h ve pins_arduino.c Dosyaları

Arduino’da ayak işlemlerini anlayabilmek için öncelikle bu iki dosyayı incelememiz lazımdır. Fakat ayak işlemlerini anlamaktan ziyade çalışan AVR kodlarını ve fonksiyonları anlamamız daha önemlidir. Aslında bu iki dosyayı atlamak istesem de sonra karşıma çıkan digitalWrite() gibi fonksiyonlarda geri dönüp bu dosyalardan belli kısımları anlatmam gerekecekti. O yüzden anlatılacak pek bir şey olmasa da bu iki dosyayı gözden geçireceğiz. Öncelikle pins_arduino.h dosyasını açalım ve kodları incelemeye başlayalım. Dosyaya aşağıdaki bağlantıdan erişebilirsiniz.

https://github.com/arduino/ArduinoCore-avr/blob/master-older/cores/arduino/pins_arduino.h

Burada NOT_A_PIN ve NOT_A_PORT tanımlarına sıfır (0) değeri verilmiştir. Bu koddan itibaren bu değerlerin kullanıldığı yerlerde sıfır (0) olduğunu anlamamız gerekir. Sonrasında ise zamanlayıcıları temsil eden adlara çeşitli numaralar verilmiştir. Arduino’da zamanlayıcılar iki yerde kullanılıyordu. Bunlardan biri millis() gibi zaman fonksiyonları ile alakalıydı ve diğeri ise ayaklardan alınan PWM çıkışında kullanılmaktaydı. Dijital giriş ve çıkışta PWM çıkış denetimi yapılacağı için ve PWM çıkışının da pek çok ayaktan yapıldığı için böyle çeşitli tanımlar oluşturulmuştur.

Burada çeşitli değer dönüşüm ve maskeleme değerlerinin toplandığı dizi değişkenleri tanımlanmıştır. Bunların farklı bir yanı PROGMEM olarak program hafızasına kaydedilmeleridir. Dosyanın devamında göreceğimiz üzere bu değişkenlere pek çok değer atanıyor ve fazlaca yer tutuyordu. O yüzden program hafızasına kaydedilmiştir.

Burada çeşitli makro tanımlarını görmekteyiz. pgmspace.h kütüphane dosyasında mevcut olan fonksiyonları kullanmaktadır. Çeşitli ayak ayarlarından oluşan bu makroları yeri geldiğinde daha ayrıntılı inceleme şansımız olacak.

Şimdi pins_arduino.c dosyasını açalım ve dosyanın devamına bakalım. pins_arduino.c dosyasını aşağıdaki bağlantıdan açabilirsiniz.

https://github.com/arduino/ArduinoCore-avr/blob/master-older/cores/arduino/pins_arduino.c

Burada yine çeşitli tanımları görmekteyiz. PA, PB, PC adıyla sembolize edilen portlara çeşitli rakam değerleri verilmiştir. Ayrıca REPEAT8, BVOTO7 ve BV7TO0 adımda üç makro tanımlanmıştır. Bu makronun kullanılışına ilerideki incelemelerimizde değinebiliriz. Burada ise şimdi PORT, DDR ve PIN yazmaçlarının kullanımına dair tanımları görmekteyiz.

Bu kontrol yapısı ATmega1280 mikrodenetleyicisine uyumluluk için yazılmıştır. Daha doğrusu Wiring dili orjinal haliyle ATmega1280 mikrodenetleyicisi için yazılmıştır. İlk Arduino ise ATmega8 için yapılmıştır. O yüzden ana kod bu olsa da biz Arduino kısmını inceleyeceğimiz için bu parçayı atlayalım.

Bu diziler port adlarını haritalandırır ve çeşitli fonksiyonlara uyumlu hale getirir. Burada da üç adet DDR yani veri yönü yazmacı görmekteyiz. Bunlar PORTB, C ve D’nin ayaklarının giriş ya da çıkış olacağını belirler. Bu veri yapısının pinMode() fonksiyonu için kullanılacağını kestirebiliriz.

Burada ise yine aynı şekilde PIN ve PORT yazmaçlarını görüyoruz. Bu veri yapısı üzerinde PORT tabanlı işlemler yapılacaktır. Sadece PORT değerinin olduğuna dikkat ediniz.

Bu yapı ise ayak numaralarını bulundurur. Bu ayaklar sıra ile D portuna sonra B portuna en son ise C portuna bağlıdır. Arduino’da 0-14 arası dijital ayak 14’den sonraki ayakların da analog ayak olduğunu hatırlayalım. Burada da o ayakların hangi portta olduğu belirtilmiştir.

Burada ise yukarıdaki veri yapısına benzer şekilde fakat bit değerlerini bulunduran bir yapı olduğunu görmekteyiz. Bu iki veri yapısındaki veriler Arduino ayağının nasıl kullanılacağını belirler. Biz AVR’de tek bir ayaktan çıkış almak için port ve bit değerini kullanıyorduk. Bu iki değere ihtiyacımız olduğu için bu iki değer burada sırayla belirtilmiştir.

Burada ise yine Arduino ayaklarının zamanlayıcıya bağlı olup olmadığı belirtilmiştir. Burada 0’dan başlayıp 19’a kadar gittiğine dikkat edin. Bu Arduino ayak numaralarını temsil etmektedir.

Buraya kadar ayaklar ile ilgili dosyalara kısa bir göz attık. Bundan sonra ise programlamada kullandığımız fonksiyonları inceleyeceğiz. Bu kısmı öğrenmenin bize bir getirisi olmasa da program fonksiyonlarını daha rahat anlamamızda faydası olacak. Biz AVR programlarken dijital giriş ve çıkış ayaklarına doğrudan bir erişim sağlıyorduk. Burada bu erişim dolaylandırılmıştır. Bu da ayak numarası kullanma adına yapılan bir işlemdir.

LojikProb.com artık anlık bildirim eklentisini kullanmaktadır. Bizi takip etmek için bildirimleri sağ alttaki zil ikonundan açmanızı tavsiye ederiz. 

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.