Anasayfa » Arduino – Haberleşme protokolleri – UART – Seri haberleşme – i2C – SPi – Robotik Dersler – 77 –

Arduino – Haberleşme protokolleri – UART – Seri haberleşme – i2C – SPi – Robotik Dersler – 77 –

uart_77

Arduino – Haberleşme protokolleri – UART – Seri haberleşme – i2C – SPi  dijital haberleşme protokolleri hakkında bilgilere yer vereceğiz.

Daha önceki yazılarımızda SPi ve i2C haberleşmelere değinmiştik.

Arduino diğer arduino yada sensörle ile iletişim kurmak ve bağlanmak için UART, i2C ve SPi haberleşme protokollerini kullanmaktadır. Bu dijital iletişim protokolleri sayesinde iki yada daha fazla donanım kontrol edilebilmektedir. Bu yazımızda UART haberleşme protokolü üzerinde duracağız.

UART, Evrensel Asenkron Alıcı/Verici anlamına gelir.  Bir UART’ın temel amacı, seri verileri iletmek ve almaktır. UART Haberleşme ile ilgili en iyi şeylerden biri, cihazlar arasında veri iletmek için yalnızca iki kablo kullanmasıdır. RX ve TX ile bağlantı sağlanmaktadır.

UART Haberleşme Nedir?

UART iletişiminde, iki UART birbiriyle doğrudan iletişim kurar. Verici UART, CPU gibi bir kontrol cihazından gelen paralel verileri seri forma dönüştürür, seri olarak alıcı UART’a iletir, daha sonra seri verileri alıcı cihaz için tekrar paralel verilere dönüştürür. İki UART arasında veri iletmek için sadece iki kablo gereklidir. Veri, ileten UART’ın Tx pininden alıcı UART’ın Rx pinine akar.

uart_bus

UART’lar, verileri eşzamansız olarak iletir, bu da, ileten UART’tan gelen bitlerin çıkışını, alıcı UART tarafından bitlerin örneklenmesine senkronize etmek için bir saat sinyali olmadığı anlamına gelir. Bir saat sinyali yerine, ileten UART, aktarılmakta olan veri paketine başlatma ve durdurma bitleri ekler. Bu bitler, veri paketinin başlangıcını ve sonunu tanımlar, böylece alıcı UART, bitleri ne zaman okumaya başlayacağını bilir.

Alıcı UART bir başlangıç biti algıladığında, gelen bitleri baud hızı olarak bilinen belirli bir frekansta okumaya başlar. Baud hızı, saniyede bit (bps) olarak ifade edilen veri aktarım hızının bir ölçüsüdür. Her iki UART da yaklaşık olarak aynı baud hızında çalışmalıdır. Verici ve alıcı UART’lar arasındaki baud hızı, bitlerin zamanlaması çok uzaklaşmadan önce yalnızca yaklaşık %10 farklılık gösterebilir.

Her iki UART da aynı veri paketi yapısını iletmek ve almak için yapılandırılmalıdır.

UART Nasıl Çalışır?

Veri gönderecek olan UART, verileri bir veri yolundan alır. Veri yolu, CPU, bellek veya mikro denetleyici gibi başka bir cihaz tarafından UART’a veri göndermek için kullanılır. Veriler, veri yolundan ileten UART’a paralel biçimde aktarılır. Verici UART, veri yolundan paralel verileri aldıktan sonra, bir başlangıç biti, bir eşlik biti ve bir durdurma biti ekleyerek veri paketini oluşturur. Daha sonra, veri paketi, Tx pininde bit bit seri olarak çıktılanır. Alıcı UART, veri paketini Rx pininde bit bit okur. Alıcı UART daha sonra verileri tekrar paralel forma dönüştürür ve başlangıç bitini, eşlik bitini ve bitiş bitlerini kaldırır. Son olarak, alıcı UART, veri paketini alıcı uçtaki veri yoluna paralel olarak aktarır.

UART Nasıl Çalışır?

Veri gönderecek olan UART, verileri bir veri yolundan alır. Veri yolu, CPU, bellek veya mikro denetleyici gibi başka bir cihaz tarafından UART’a veri göndermek için kullanılır. Veriler, veri yolundan ileten UART’a paralel biçimde aktarılır. Verici UART, veri yolundan paralel verileri aldıktan sonra, bir başlangıç biti, bir eşlik biti ve bir durdurma biti ekleyerek veri paketini oluşturur. Daha sonra, veri paketi, Tx pininde bit bit seri olarak çıktılanır. Alıcı UART, veri paketini Rx pininde bit bit okur. Alıcı UART daha sonra verileri tekrar paralel forma dönüştürür ve başlangıç bitini, eşlik bitini ve bitiş bitlerini kaldırır. Son olarak, alıcı UART, veri paketini alıcı uçtaki veri yoluna paralel olarak aktarır:

UART Veri Transferi
UART Veri Transferi

UART tarafından iletilen veriler paketler halinde düzenlenir. Her paket 1 başlangıç biti, 5 ila 9 veri biti (UART’a bağlı olarak), isteğe bağlı bir eşlik biti ve 1 veya 2 durdurma biti içerir:

UART Veri Paketi

Başlangıç Biti

UART veri iletim hattı, veri iletmediğinde normalde yüksek voltaj seviyesinde tutulur. Veri aktarımını başlatmak için, ileten UART, bir saat döngüsü için iletim hattını yüksekten düşüğe çeker. Alıcı UART, yüksek voltajdan düşük voltaja geçişi algıladığında, veri çerçevesindeki bitleri baud hızının frekansında okumaya başlar.

Veri(Data) Frame

Veri çerçevesi, aktarılmakta olan gerçek verileri içerir. Bir eşlik biti kullanılıyorsa, 5 bitten 8 bit uzunluğa kadar olabilir. Eşlik biti kullanılmazsa, veri çerçevesi 9 bit uzunluğunda olabilir. Çoğu durumda, veriler önce en az anlamlı bit ile gönderilir.

Parity

Parity, bir sayının çiftliğini veya tekliğini tanımlar. Eşlik biti, alıcı UART’ın iletim sırasında herhangi bir verinin değişip değişmediğini söylemesinin bir yoludur. Bitler, elektromanyetik radyasyon, uyumsuz baud hızları veya uzun mesafeli veri aktarımları ile değiştirilebilir. Alıcı UART, veri çerçevesini okuduktan sonra, 1 değerindeki bit sayısını sayar ve toplamın çift mi yoksa tek sayı mı olduğunu kontrol eder. Eşlik biti 0 (çift eşlik) ise, veri çerçevesindeki 1 bitin toplamı çift sayı olmalıdır. Eşlik biti 1 ise (tek eşlik), veri çerçevesindeki 1 bitin toplamı tek sayı olmalıdır. Parite biti verilerle eşleştiğinde, UART iletimin hatasız olduğunu bilir. Ancak eşlik biti 0 ise ve toplam tek ise; veya eşlik biti 1’dir ve toplam çift ise, UART veri çerçevesindeki bitlerin değiştiğini bilir.

Bitirici Bit

Veri paketinin sonunu bildirmek için gönderen UART, veri iletim hattını en az iki bitlik bir süre boyunca düşük voltajdan yüksek voltaja sürer.

UART Haberleşme Adımları

  • Verici UART, veri yolundan paralel olarak veri alır:
  • Verici UART, veri çerçevesine başlangıç bitini, eşlik bitini ve durdurma bitini/bitlerini ekler:
  • Paketin tamamı, verici UART’tan alıcı UART’a seri olarak gönderilir. Alıcı UART, veri hattını önceden yapılandırılmış baud hızında örnekler:
  • Alıcı UART, veri çerçevesinden başlangıç bitini, eşlik bitini ve bitiş bitini atar:
  • Alıcı UART, seri verileri tekrar paralele dönüştürür ve alıcı uçtaki veri yoluna aktarır:

UARTS’ın Avantajları ve Dezavantajları

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

Avantajlar

  • Sadece iki kablo kullanır.
  • Saat sinyali gerekli değildir.
  • Hata denetimine izin vermek için bir eşlik biti vardır.
  • Veri paketinin yapısı, her iki taraf da buna göre ayarlandığı sürece değiştirilebilir.
  • İyi belgelenmiş ve yaygın olarak kullanılan yöntem.

Dezavantajları

  • Veri çerçevesinin boyutu maksimum 9 bit ile sınırlıdır.
  • Birden çok bağımlı veya birden çok ana sistemi desteklemez.
  • Her UART’ın baud hızı, birbirinin %10’u dahilinde olmalıdır.

 




//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı UART Klavye Kodları - kullanımı örnek Kodları

void setup() {
  Serial.begin(9600);

  for (int i = 2; i < 6; i++)
  {
    pinMode(i, OUTPUT);
  }

  while (! Serial);
  Serial.println("Ledlerin açılması için Alfabeden Tanımlı karekter Girin ");
  Serial.println("x ile hepsini sondurun");



}

void loop() {


  if (Serial.available())

  {
    char ch = Serial.read();
    if (ch == 'a')
    {
      digitalWrite(2, HIGH);
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Kirmizi LED yandi");


    }


    else if (ch == 'b')
    {
      digitalWrite(3, HIGH);
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Mavi LED yandi");
    }


    else if (ch == '4')
    {
      digitalWrite(4, HIGH);
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Sari LED yandi");

    }


    else if (ch == '@')
    {
      digitalWrite(5, HIGH);
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Yesil LED yandi");

    }


    else if (ch == 'x')
    {

      for (int t = 2; t < 6; t++)
      {

        digitalWrite(t, LOW);


      }
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Tum Ledler sonduruldu");

    }




    else

    {
      Serial.print("Girilen Karekter : ");
      Serial.print(ch);
      Serial.println(" > Boyle Bir tus tanimlamasi YOKTUR!");
    }



  }
}

Videoyu İzlemek İçin Tıklayınız

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir