Arduino’da Dijital Pini, Analog’a Çevirmek

İki başlık olarak önce ADC devamında ek entegreler ile dijital pinleri analoga(DAC) çeviriyoruz . Mikroişlemciler binary (ikili) sinyallerini algılama özelliğine sahiptir: Bir mikro denetleyici sabit “X” volt ile beslendiğinde, sıfır volt’u (0V) binary 0 ve X volt’u (xV) binary 1 olarak anlar. Ancak 0-xV’tan başka, ölçülmesi gereken ara değerler de vardır. Örneğin ölçtüğümüz sinyal 2.72V ise ne olur? Bu 0 mı yoksa 1 mi? Uygulamalarımızda genellikle değişen sinyalleri ölçmemiz gerekir; Bunlara analog sinyaller denir. 5V’lık bir analog sensör, 0.01V veya 4.99V veya bunların arasında herhangi bir değer üretebilir . Neredeyse tüm mikroişlemciler bu gerilimleri, bir karar vermek için programlarda kullanabileceğimiz değerlere dönüştürmemize izin veren bir cihaza sahiptirler. Bu cihaz Analog / Dijital Çeviriciler olarak isimlendirilir. Bir önceki yazımızda daha detaylı olarak bahsetmiştik, buradan okuyabilirsiniz.

Arduino'da ADC Kullanımı

Arduino kartlarında, sadece analog pinlerinde analog voltajları okunabilir. Bu pinlerin etiketlerinin önünde (A0’dan A5’e) bir ‘A’ vardır. Aşağıdaki resimde kırmızı işaretlenen pinler analog pinlerdir.

dijital, Arduino’da Dijital Pini, Analog’a Çevirmek

ADC’ler mikrodenetleyiciler arasında büyük oranda değişiklik gösterebilir. Arduino’daki ADC, 10 bit ADC’dir ve 1.024 (210) ayrı analog seviyeyi algılama yeteneğine sahiptir. Bazı mikro denetleyicilerin 8 bitlik ADC’leri (28 = 256 farklı seviye) vardır ve bazıları 16-bit ADC’lere sahiptir (216 = 65.536 farklı seviye).

Arduino ile DAC Kullanımı

Arduino kartlarında, dahili ADC olsada, DAC için ekstra bir entegre gerekiyor, dijital sinyalin analoga çevrilmesi için deneyimizde, TL2451 ve MCP4724 entegrelerini ayrı ayrı kullanacağız.

TL2451 Entegresi İle;

Aslında TLV2451 entegresini kullanmak zorunda değilsiniz, bunun yerine herhangi op amp entegresini kullanabilirsiniz fakat rail-to-rail olmak zorunda, aksi taktirde işlemimiz gerçekleşemez. Konunun temellerinden biri de PWM ve Duty Cyle kavramları yatıyor, bu konuları daha önceki yazılarımızda aktarmıştık, buradan okuyabilirsiniz. Ayrıca 22 uF lik kapasitör ve 3.3 kOhm’luk direnç ile istenmeyen sinyalleri filtreliyoruz.

TL2451 Arduino Kodu

void setup() {              

   pinMode(5, OUTPUT);   

}

void loop() {

  analogWrite(5,127);  }//PWM %50ye ayarlandı

TL2451 Şeması

dijital, Arduino’da Dijital Pini, Analog’a Çevirmek

MCP4725 Entegresi İle;

TLV2451 entegresinden farklı olarak, i2c sistemi kullanılarak yapılan bir çevirme yöntemidir. 12 bit çözünürlükte ve yüksek kalibrasyon doğrulunda çalışmaktadır, kullanmak için Adafruit tarafından yayınlanan kütüphane‘nin kullanılması gerekiyor, ayrıca i2c adresi olarak varsayılan adres “0x60” olarak geliyor. Buradan da entegrenin datasheet’ini görebilirsiniz.

MCP4725 Arduino Kodu

#include <Wire.h>          

#include <Adafruit_MCP4725.h>

#define analogVin A0         

Adafruit_MCP4725 MCP4725;

void setup(void) {

  Serial.begin(9600);

  MCP4725.begin(0x60); 

}

void loop(void) {

      uint32_t MCP4725_value;

    int adcValueRead = 0;

    float voltageRead = 0;

    float MCP4725_expected_output;

          for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 15)

    {

      MCP4725_expected_output = (5.0/4096.0) * MCP4725_value;

      MCP4725.setVoltage(MCP4725_value, false);

      delay(250);

      adcValueRead = analogRead(analogVin);

      voltageRead = (adcValueRead * 5.0 )/ 1024.0;

       Serial.print(“MCP4725 Value: “);

      Serial.print(MCP4725_value);

      Serial.print(“\tExpected Voltage: “);

      Serial.print(MCP4725_expected_output,3);

      Serial.print(“\tArduino ADC Value: “);

      Serial.print(adcValueRead);

      Serial.print(“\tArduino Voltage: “);     

      Serial.println(voltageRead,3);     

    }   

 

}

MCP4725 Şeması

dijital, Arduino&#8217;da Dijital Pini, Analog&#8217;a Çevirmek