Arduino Gelişmiş Giriş Çıkışlar (Advanced I/O)

Arduino üzerindeki pinlerden belirli bir frekansta kare dalga almak, dalga süresini hesaplamak ya da kaydırmalı giriş çıkış (shift register) için kullanılan birtakım fonksiyonlar vardır.

Arduino gelişmiş giriş/çıkış fonksiyonları şunlardır;

  1. tone()
  2. noTone()
  3. pulseIn()
  4. pulseInLong()
  5. shiftIn()
  6. shiftOut()

Şimdi bu fonksiyonların nasıl kullanıldığını inceleyelim.

1. tone Fonksiyonu

Tone fonksiyonu arduino dijital pini üzerinden belirtilen frekansta %50 duty cycle değerine sahip kare dalga üretmek için kullanılır. Yani tone() fonksiyonu ile dijital pin üzerinden istenen frekansa sahip pulse sinyali alınabilir. Eğer süre belirtilir ise, pulse çıkış belirtilen süre boyunca devam eder, eğer süre belirtilmez ise, noTone() fonksiyonuna ulaşılıncaya kadar denetleyicimiz pulse sinyal üretmeye devam eder. Bu fonksiyonumuz 3 adet parametre alır ancak geriye değer döndürmez.

tone() fonksiyonu (Mega dışındaki kartlar için) 3 ve 11 nolu pinlerdeki pwm çıkışını engeller!

tone() fonksiyonu ile en az 31 Hz değerinde pulse çıkış elde edilebilir!

Sözdizimi: tone(pin, frekans, süre);

Bu fonksiyonumuzda;
pin: pulse çıkış alacağımız dijital pin (gerekli)
frekans: alınacak pulse çıkışın frekansı (gerekli) – unsigned int (16 bit şaretsiz tamsayı)
süre: kaç milisaniye süreyle pulse çıkış üretileceği (isteğe bağlı) – unsigned long (32 bit işaretsiz tamsayı)

Örnek:

Arduino’muzun 4 numaralı dijital pininden 50 Hz değerinde pulse çıkış elde edelim.

2. noTone Fonksiyonu

noTone fonksiyonumuz ise tone fonksiyonumuzla üretilen pulse sinyalini durdurmak için kullanılır. Pulse sinyalini durdurmak istediğimiz pin numarası parametre olarak noTone() fonksiyonuna gönderilmelidir. noTone fonksiyonu geriye herhangi bir değer döndürmez.

Sözdizimi: noTone(pin);

Örnek: 4 numaralı pinde 100Hz frekansta pulse çıkış oluşturalım ve pulse çıkışı durduralım.

3. pulseIn Fnksiyonu

pulseIn fonksiyonu belitrilen bir pim üzerine uygulanan bir darbenin kaç mikrosaniye süre ile HIGH ya da LOW durumunda kaldığını belirlemek için kullanılır. Geriye unsigned long türünde mikrosaniye cinsinden değer döndürür. Örnek olarak HIGH parametresi almış ise,  pin üzerine HIGH geldiğinde zamanlayıcıyı çalıştırır. Pulse değeri LOW olunca zamanlayıcıyı durdurur ve HIGH sinyalden LOW sinyale geçme süresini mikrosaniye cinsinden döndürür. Eğer timeout ile belirtilen süre içerisinde pulse sinyali konum değiştirmemiş ise geriye değer olarak 0 döndürür.

Bu fonksiyon 10 mikrosaniye ila 3 dakika arasındaki pulse darbe süreleri dışındaki değerlerde hatalı sonuç verebilir.

Sözdizimi: pulseIn(pin, deger, zamanAşımı);

pin: pulse okunacak olan arduino pini (gerekli)
deger: okunacak lojik seviye (HIGH ya da LOW) (gerekli)
zamanAşımı: darbenin başlamasını kaç mikrosaniye boyunca bekleneceğini belirten süre (isteğe bağlı)

Geriye dönüş değeri unsigned long (32 bit işaretsiz tamsayı) türünde mikrosaniye cinsinden darbe süresi.

Örnek:

4. pulseInLong Fonksiyonu

pulseInLong() fonksiyonu uzun darbe sürelerinde daha doğru sonuç almak için pulseIn() fonksiyonuna alternatif olarak üretilen bir fonksiyondur. pulseInLong() fonksiyonu  belitrilen bir pim üzerine uygulanan bir darbenin kaç mikrosaniye süre ile HIGH ya da LOW durumunda kaldığını belirlemek için kullanılır. Geriye unsigned long türünde mikrosaniye cinsinden değer döndürür. Örnek olarak HIGH parametresi almış ise,  pin üzerine HIGH geldiğinde zamanlayıcıyı çalıştırır. Pulse değeri LOW olunca zamanlayıcıyı durdurur ve HIGH sinyalden LOW sinyale geçme süresini mikrosaniye cinsinden döndürür. Eğer timeout ile belirtilen süre içerisinde pulse sinyali konum değiştirmemiş ise geriye değer olarak 0 döndürür.

Sözdizimi: pulseInLong(pin, deger, zamanAşımı);

pin: pulse okunacak olan arduino pini (gerekli)
deger: okunacak lojik seviye (HIGH ya da LOW) (gerekli)
zamanAşımı: darbenin başlamasını kaç mikrosaniye boyunca bekleneceğini belirten süre (isteğe bağlı)

Geriye dönüş değeri unsigned long (32 bit işaretsiz tamsayı) türünde mikrosaniye cinsinden darbe süresi.

Örnek:

5. shiftIn Fonksiyonu:

shiftIn fonksiyonu bir çeşit shift register işlemi yapmamızı sağlayan fonksiyonumuzdur. Bu fonksiyonumuz her saat darbesinde En az anlamlı bitten en anlamlı bite doğru ya da en anlamlı bitten en az anlamlı bite doğru bir bit veri kaydırması yaparak data pininden gelen değeri okur ve kaydeder. Eğer saat darbesinin her bir periyotunda data pini HIGH ise veriyi HIGH olarark kaydeder ve birsonraki bite kayar, bir sonraki bitte saat darbesinin bir periyotunda data pini LOW ise, ilgili biti LOW konumuna kaydeder. Eğer bir Paralel – Seri shift register cihazdan veri alıyorsanız, alınan bu veriyi shiftIn fonksiyonu ile okuyabilirsiniz.

Bu bir yazılım uygulamasıdır; daha hızlı olan ancak yalnızca belirli pinlerde çalışan bir donanım uygulaması sağlayan SPI kütüphanesini ilerki derslerimizde ele alacağız.

Sözdizimi: shiftIn(colockPin, dataPin, okumaYonu);

colockPin : Senkronizasyon için clock sinyali çıkışı sağlayan pin
dataPin : Verilerin okunmasını sağlayan pin
okumaYonu : Verilerin hangi sıra ile okunması gerektiğini belirten pin (LSBFIRST – En az anlamlı bitten en anlamlı bite doğru, MSBFIRST – En anlamlı bitten en az anlamlı bite doğru)

Geriye dönüş değeri byte türünden veridir.

Örnek olarak girisOku fonksiyonu ile 1 saniye aralıklarla 74HC165 shift register entegresinden veri okuyup seri port ekranına bastıralım:

Devre Şeması:

 

Dipswitch anahtarlarının ON/OFF konumuna göre Seri Port ekran çıktımız aşağıdakine benzer şekilde olacaktır:

6. shiftOut Fonksiyonu:

Bu fonksiyonumuz ise, shiftIn fonksiyonunun tersine, bir veriyi en anlamlı bitten en az anlamlı bite ya da en az anlamlı bitten, en anlamlı bite doğru çıkışa yazdırabileceğimiz fonksiyondur. Fonksiyonumuz her saat darbesinde verinin bir bitini çıkışa gönderir. Eğer verinin ilgili biti bir saat darbesi periyotunda HIGH ise çıkışa HIGH, aksi taktirde çıkışa LOW olarak gönderilir.

Bu bir yazılım uygulamasıdır; daha hızlı olan ancak yalnızca belirli pinlerde çalışan bir donanım uygulaması sağlayan SPI kütüphanesini ilerki derslerimizde ele alacağız.

Sözdizimi: shiftOut(dataPin, clockPin, yazmaYonu, veri);

dataPin : verinin gönderileceği pin (int)
clockPin : Gönderici ile Alıcı cihaz arasında senkronizasyon sağlayan saat darbesi
yazmaYonu : Verinin hangi sıra ile gönderileceği (MSBFIRST – En anlamlı bitten en az anlamlı bite doğru, LSBFIRST – En az anlamlı bitten en anlamlı bite doğru.
veri : Alıcı cihaza gönderilecek veri (byte)

Fonksiyonumuz geriye herhangi bir değer döndürmez.

Örnek olarak veriYaz fonksiyonu ile 74HC 595 Shiftregister entegresine 0 ile 255 arasındaki sayıları yazdıralım:

Aşağıdaki devreyi kurup çalıştırdığımızda, 0 ile 255 arasındaki değerleri shift register entegremizin çıkışından binary olarak aldığımızı görebilirsiniz

 

Yorum Yap