UART Nedir?

Bu yazımısa, UART nedir? UART iletişiminin ne olduğunu ve nasıl çalıştığını tartışacağız. Ayrıca Arduino Uno’nun UART arayüzünün nasıl kullanılacağını göstermek için basit bir kod yazacağız. Ardından, iki Arduino arası haberleşme kurmak için UART kullanan bir proje ile örnekler göstereceğiz.

Daha önce hazırladığımız C# İle Arduino Kontrolü ve Seri Haberleşme içeriğimizi okumanızı öneriyoruz.

UART Nedir?

UART, Evrensel Asenkron Alıcı/Verici(Universal Asynchronous Receiver/Transmitter) anlamına gelir. İki cihaz arasında seri iletişim için kullanılan bir donanım cihazıdır (veya devresidir).

UART Cihazlar Nasıl Bağlanır?

İki UART cihazını birbirine bağlamak oldukça kolaydır. Şekil 1, temel bir UART bağlantı şemasını göstermektedir.

UART Nedir? uart nedir,iki arduino seri haberleşme,iki arduino arası seri haberleşme,arduino uart kullanımı,uart kullanımı
UART Bağlantısı

Kablonun biri veri iletmek içindir (TX pini olarak adlandırılır) ve diğeri veri almak içindir (RX pini olarak adlandırılır). Ayrıca aynı anda sadece iki UART cihazını birbirine bağlayabiliriz.

UART Nasıl Çalışır?

UART, alınan paketlerden veri göndermek veya yeniden oluşturmak için verileri paketlere dönüştürerek çalışır.

Seri Veri Gönderme

UART cihazı veri göndermeden önce, verici cihaz veri baytlarını bitlere dönüştürür. Verileri bitlere dönüştürdükten sonra, UART cihazı bunları iletim için paketlere böler. Her paket bir başlangıç biti, bir veri çerçevesi, eşlik biti ve bitiş bitlerini içerir. Aşağıdaki örnek veri paketini göstermektedir.

UART Nedir? uart nedir,iki arduino seri haberleşme,iki arduino arası seri haberleşme,arduino uart kullanımı,uart kullanımı

Paket hazırladıktan sonra, UART devresi bu paketi TX pini aracılığıyla gönderir.

Seri Veri Alma

Alıcı UART cihazı, 1’lerin sayısını hesaplayarak ve pakette bulunan eşlik bitinin değeri ile karşılaştırarak alınan paketi (RX pini aracılığıyla) hatalara karşı kontrol eder. İletimde herhangi bir hata yoksa, veri çerçevesini almak için başlangıç bitini, bitiş bitlerini ve eşlik bitini çıkarmaya devam edecektir. Veri çerçevelerinden tüm veri baytını yeniden oluşturabilmesi için birkaç paket alması gerekebilir. Bayt yeniden oluşturulduktan sonra UART arabelleğinde saklanır.

UART Parametreleri

UART, uygun iletişimin sağlanması için her iki cihazda da aynı olması gereken ayarlara sahiptir. Bu UART ayarları, baud hızı, veri uzunluğu, eşlik biti, durdurma biti sayısı ve akış kontrolüdür.

Baud Hızı(Baud Rate)

Baud hızı, bir UART cihazının iletebileceği/alabileceği saniyedeki bit (bps) sayısıdır. Doğru veri iletimi için her iki UART cihazını da aynı baud hızına ayarlamamız gerekiyor. Baud hızı için genel değerler 9600, 1200, 2400, 4800 , 19200, 38400, 57600 ve 115200 bps’dir.

Veri Uzunluğu(Data Lenght)

Veri uzunluğu, veri baytı başına bit sayısını ifade eder.

Eşlik Biti(Parity Bit)

Eşilk biti, iletilen verilere eklen bit bittir ve alıcıya iletilen verideki 1’lerin sayısının tek mi çift mi olduğunu söyler. Eşlik Biti için olası ayar Tek(Odd) veya Çift(Even)’tir.

  • Tek(odd): veri çerçevesinde tek sayıda 1 varsa eşlik biti ‘1’dir.
  • Çift(even): veri çerçevesinde çift sayıda 1 varsa eşlik biti ‘0’dır.

Durdurma Biti Sayısı(Stop Bits Number)

UART cihazları, iletilen bir dizi bitin (paket adı verilen) sonunu işaretlemek için hiç, bir veya iki durdurma bitini kullanabilir.

Akış Kontrolü(Flow Control)

Akış Kontrolü, UART üzerinden veri iletirken veri kaybı riskini önleme yöntemidir. UART cihazı, iletimi başlatmak/durdurmak için akış kontrolü olarak özel karakterler kullanır.

Arduino UART Kullanımı

Arduino geliştirme kartları, tercih edilen karta bağlı olarak bir veya daha fazla UART pinine sahiptir. Projemiz için pin 0 (RX0) ve pin 1 (TX0) üzerinde bulunan tek UART arayüzüne sahip Arduino Uno kullanacağız. Pin 0 ve 1 Arduino IDE ile USB üzerinden iletişim kurmak için de kullanılır. Bu nedenle, Arduino UNO geliştirme kartınıza kodlar yükleyecekseniz, önce 0 ve 1 pinlerindeki tüm kabloları çıkardığınızdan emin olun.

UART Nedir? uart nedir,iki arduino seri haberleşme,iki arduino arası seri haberleşme,arduino uart kullanımı,uart kullanımı
Arduino Uno TX/RX pinleri

UART Mantık Seviyesi

UART mantık seviyeleri üreticiler arasında farklılık gösterebilir. Örneğin, bir Arduino Uno’nun 5-V mantık seviyesi vardır, ancak bir bilgisayarın RS232 portu +/-12V mantık seviyesine sahiptir. Bir Arduino Uno’yu doğrudan bir RS232 bağlantı noktasına bağlamak Arduino’ya zarar verir. Her iki UART cihazı aynı mantık seviyelerine sahip değilse, cihazları bağlamak için uygun bir mantık seviye dönüştürücü devresi gereklidir

İki Arduino Seri Haberleşme(UART)

Gerekli Malzemeler

  • Arduino UNO x 2
  • Buton x 2
  • Devre tahtası x 2
  • Bağlantı kabloları

Bağlantı Şeması

UART Nedir? uart nedir,iki arduino seri haberleşme,iki arduino arası seri haberleşme,arduino uart kullanımı,uart kullanımı

Program Kodu

Bu program kodunu iki Arduino UNO’ya da yükleyin. Program kodunu yüklemeden önce TX0 ve RX0 pinlerine bağlı kabloları ayırmayı unutmayın. Kodu yükledikten sonra, TX0 ve RX0 pinlerindeki kabloları yeniden bağlayın.

Yüklemeden sonra karta bağlı butonlara basarak kartlardan birinin dahili LED’ini kontrol edebiliyoruz. Program kodu düğme durumunu kontrol eder ve yerleşik LED’i kontrol etmek için diğer karta karşılık gelen ‘0’ veya ‘1’ karakter değerini gönderir.

void setup() {
  pinMode(8, INPUT_PULLUP); // buton input olarak ayarlandı
  pinMode(13, OUTPUT);      // LED output olarak ayarlandı
  digitalWrite(13, LOW);    // LED kapalı olarak başlatıldı

  Serial.begin(9600);       // 9600 baud hızda seri iletişim ayarlandı
}

void loop() {
  if (Serial.available()) {
    char gelen_veri = Serial.read();   // seri arabellekten bir bayt oku ve gelen_veri'ye kaydet
    if (gelen_veri == '1') digitalWrite(13, HIGH); // LED yak
    if (gelen_veri == '0') digitalWrite(13, LOW);  // LED kapat
  }

  if (digitalRead(8) == HIGH) Serial.write('0');    // butona basılmazsa '0' karakterini seri iletişime gönder
  else Serial.write('1');                           // butona basılırsa '1' karakterini seri iletişime gönder
}

Hiçbir iletişim protokolü mükemmel değildir, ancak UART ile yapılan işlem oldukça iyidir. Projenizin gereksinimlerine uyup uymadıklarına karar vermenize yardımcı olacak bazı artıları ve eksileri şunlardır:

UART Avantajları

  • Sadece iki kablo kullanılır
  • Saat sinyaline ihtiyaç duymaz
  • Hata denetimine izin vermek için bir eşlik biti vardır
  • Her iki taraf da buna göre ayarlandığı sürece veri paketinin yapısı değiştirilebilir
  • Yaygın olarak kullanılan bir yöntemdir

UART Dezavantajları

  • Veri çerçevesinin boyutu maksimum 9 bit ile sınırlıdır
  • Birden çok bağımlı(çevre birimi/slave) veya birden çok ana sistemi(kontrolcü/master) desteklemez.
  • Her UART’ın baud hızları, birbirinin %10’u dahilinde olmalıdır