UART Nedir ve Nasıl Çalışır?

Daha önce Seri Haberleşme Protokolleri (UART, SPI, I2C) yazımda küçük bir değinme ile bahsettiğim haberleşme protokollerine biraz daha detaylı olarak girmeye başlayacağımız serimizin ilk yazısı olan “UART Nedir (USART Nedir) ve Nasıl Çalışır?” yazısı ile karşınızdayım.

UART (Universal Asynchronous Receiver Transmitter), bilgisayar ve mikrokontroller veya mikrokontroller ve çevre birimler arasında haberleşmeyi sağlayan haberleşme protokolüdür. Asenkron olarak çalıştığı için herhangi bir “clock” ihtiyacı duymaz. USART (Universal Synchronous Asynchronous Receiver Transmitter) ise hem senkron hem de asenkron olarak çalışabilir. UART’a göre daha gelişmiş bir protokoldür. Haberleşme mantıklı aynı şekilde çalışır ancak USART aynı zamanda senkron haberleşmeleri de gerçekleştirebilir. Yeni çıkan bir mikroişlemcinin datasheet’ine baktığınız zaman bu birimleri genelde USART birimi olarak görüyoruz çünkü USART aynı zamanda UART’ı da kapsayan bir birim olarak tasarlanmıştır.

USART, 5 ve 9 bit arası data uzunluğuna sahip veriyi taşıma özelliğine sahiptir. Ancak genel olarak 8 veya 9 bitlik kullanımlar tercih edilir.

UART – USART Haberleşmesi

UART haberleşmesini gerçekleştirirken ilk olarak baudrate (veri taşıma hızı) ayarlanması gerekir. Veri taşıma hızı çok çeşitli aralıklarda olabilir ancak piyasada yaygın olarak kullanılan baudrate’ler 4800, 9600, 57600, 115200 ve mikroişlemciler için çok fazla tercih edilmese de 921600. (921600 genelde hızlı işlem gerektiren yerlerde kullanılır.) Baudrate bizim verimizin saniyede ne kadarlık byte’ını taşıyacağını belirlememize yarar. Örneğin veri taşıma hızımızı 115200 seçersek bu bizim için saniyede yaklaşık olarak 11520 byte veri iletimi sağlayacaktır.

Veri iletimi için aşağıdaki görseldeki gibi bir yapı kullanılır. Yani haberleşme işlemimiz bir başlangıç bitinden sonra data bitleri, ardından parity biti ve son olarak da bitiş biti gönderilerek sonlandırılır. Bu işlem sırasında data uzunluğu ve parity biti opsiyonel olarak değişkenlik gösterebilir.

Bu haberleşme tipini kullanabilmemiz için alıcı ve vericinin veri taşıma hızlarının (baudrate) aynı olması gerekiyor (veya birbirine çok yakın değerler olması gerekiyor.) Bunun sebebi ise aktarım sırasında oluşabilecek hataları minimuma indirmek. Hata payları tolere edilebilir seviyede olması taktirde bir sorun yaratmayacaktır (~%1-3)

Yukarıdaki görselde gördüğünüz gibi haberleşme gerçekleşmesi için ilk önce verici tarafında logic 1 (HIGH) seviyesinde bulunan iletişim hattı iletişimin başlaması için logic 0 (LOW) seviyesine çekilir ve bu bizim Başlangıç Bit’imizi (Start Bit) temsil eder. Ardından göndermek istediğimiz verileri başlangıç bitinin arkasına ekleriz. Eğer parity bitine sahipsek onu da ekledikten sonra son olarak iletişime sonlandırmak için gerekli olan bitiş bitini (stop bit) HIGH seviyesine çekerek iletişimin sonlandığını alıcıya bildiririz. Biz verici kısmında bu işlemleri yaparken alıcı da aynı şekilde işlem yapar ve sadece bizim gönderdiğimiz dataları kendi UART Data Register’ına yazar.

Nasıl Kullanabiliriz?

USART haberleşmesi yapabilmek için mikroişlemcimizdeki daha önceden tanımlanmış olan pinleri kullanarız. Bunun için ya USB-TTL dönüştürücü ya da RS232 modülü kullanırız. Her iki modülü de RX-TX pinleri mikroişlemcimizin RX-TX pinleri ile ters olarak bağlanacak şekilde bağlantısını yaptıktan sonra iletişimi başlatabiliriz. (Yani mikroişlemci TX —> Modül RX, mikroişlemci RX —> Modül TX). RS232 ile daha ayrıntılı bilgi için ilgili yazımı ( RS232 Nedir? ) inceleyebilirsiniz.

Kaynaklar:

http://enderunix.org/docs/hard_soft-uart.pdf

https://learn.sparkfun.com/tutorials/serial-communication/uarts

https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter

http s://www.slideshare.net/canezgiaydemir/uart-ve-seri-haberleme

http://www.mcu-turkey.com/wp-content/uploads/2012/11/maximsoftuartfig1.jpg

http://www.bb-elec.com/Images/whitepaper-images/DataByte.aspx

RS232 nedir?

RS232 bir haberleşme standartıdır (communication standart). RS, Recommended Standard‘ın kısaltılmış halidir. Kısa mesafede haberleşme sağlamak için 1960’ların başlarında ortaya çıkmıştır. Şu an kullanılan standart ise 1987’de standart haline getirilmiştir.

Yapılan çalışmalar kabloların kapasitansından dolayı 15 metre üzerinde yapılan haberleşmelerde verinin bozulmalara uğradığını göstermiş. Ancak düşük kapasitanslı kablolar ile bu haberleşmenin 300 metreye kadar sağlanabildiği görülmüş. RS232 haberleşme standartı  seri asenkson olarak çalışmaktadır. Aynı zamanda ‘tam çift yönlü (full duplex)’ olarak çalışabilmektedir.

RS-232 iletimi yapılarken veriler ASCII karakterlerininden dolayı 8 bitlik karakterler halinde iletilmektedir. İletim seri bir şekilde gerçekleşmektedir. Gönderilecek veri gönderici tarafından belirli bir formatta hazırlanır ve hatta iletilir. Bu işlem yapılırken alıcı sürekli olarak hattı dinlemektedir. Alıcı, başlangıç bitini (start bit) gördükten sonra bitiş bitine (stop bit) kadar olan aralıktaki verileri okur.

Aslında hepimizin bilgisayarında, televizyon alıcılarımızda (receiver), modemlerimizde RS232 çıkışları mevcut. Şu an kullanılan standart RS232 kablosu ve çıkışını aşağıdaki görselden inceleyebilirsiniz.

Kaynak: https://cdn.sparkfun.com//assets/parts/1/4/9/00449-01a.jpg
Kaynak: https://images-na.ssl-images-amazon.com/images/G/02/aplusautomation/vendorimages/c25d08b1-7aa6-41a5-89b6-851db089ef4e.jpg._CB292758830_.jpg

 

RS232 neden kullanılır?

RS232, TTL seviyesinde (Transistor – Transistor Logic) iletim yapmaz. Gerilim aralığı +12v ve -12v arasındadır. Bilgisayarın binary sayı sisteminde 0 değeri 0V’u, 1 değeri ise 5V temsil etmektedir. Buna aynı zamanda TTL seviyesi de denir. Ancak veri iletimini TTL seviyesinde gerçekleştirmek oldukça risklidir. Çünkü TTL seviyesi gürültülerden çok çabuk etkilenip bozulmaya uğrayabilir. Burda devreye – kısa mesafeler için – RS232 giriyor. RS232, TTL seviyesinde iletilmiş olan veriyi kendi gerilim aralığı olan +12V ve -12V aralığına çekerek dışardan gelecek olan gürültülerden etkilense bile veri kaybolması yaşanmamasını sağlıyor.

Kaynak: http://www.best-microcontroller-projects.com/image-files/xhow-rs232-works-tx-logic-rs232-diag.png.pagespeed.ic.ymGeZe71tB.png
Kaynak: http://4.bp.blogspot.com/-oe0ZJvhNrBw/TdEM50BeSQI/AAAAAAAAgEQ/0uL8BJdElLc/s1600/RS232+TTL.png

Mikroişlemciler kullanarak yaptığınız projelerde bilgisayar ile uyumlu kablolar (RS232’den USB’ye dönüştüren kablolar da mevcut) kullanarak UART biriminden bilgisayarınızdaki seri monitöre (Real Term, Tera Term veya Arduino Seri monitörü bile olabilir) verileri aktarmanız mümkün. Herhangi bir görüntü aygıtı (LCD gibi) kullanmıyorsanız RS232 bu konuda size oldukça kolaylık sağlayabiliyor.

Kaynaklar: