Arduino – UART İletişim

 

 

Seri iletişimdeki “seri” kelimesi iletişimin arka arkaya gelen sinyaller aracılığı ile olacağını belirtmek amacıyla kullanı

lmaktadır. İletişimin ilk yollarından birisi olan dumanla haberleşme de aslında seri iletişimin bir türüdür. İnsanlar uzakl

ara mesaj iletmek amacıyla bir ateş yakarlar ve bu ateşin üzerini belirli periyotlarda örtüp açarak gökyüzüne kısa veya uzun dumanlar gönderme yöntemiyle mesajlarını kodlarlardı. Bu duman parçalarını gören diğer insanlar kodlanan mesajı çözerler ve iletişim sağlanmış olurdu.  Seri iletişime bir diğer örnek ise telgraftır. Telgrafta mors alfabesi kullanılıyordu ve bu alfabede rakamlar ve harflerin nokta ve çizgilerden oluşan karşılıkları bulunmaktaydı. Telgrafı kullanan operatör örneğin ‘A’ harfini gönderecekse telgrafın butonuna bir kez tıklayarak bir nokta , arkasındanda kısa süre basılı tutarak bir çizgi gönderiyordu. Alıcı tarafta ise bir makara üzerine sarılı kağıda bir elektromıkna

tısa bağlı kalem vasıtasıyla bu nokta ve çizgi tamamen elektromekanik bir yöntemle çizdiriliyor ve kağıt üzerinde “. _” şeklinde bir görüntü oluşuyordu. Alıcı taraftaki operatör bu şekilleri çözümleyerek mesajı ortaya çıkarıyordu.  Günümüzde insanların birbirleriyle iletişimi kadar makinelerin birbirleriyle iletişimi de büyük önem kazanmıştır. Örneğin bir televizyonun kumandasının televizyonla haberleşmesi de bir seri haberleşme örneğidir ve günlük hayatımızda makinelerin birbirleriyle haberleşmelerine sıklıkla başvururuz. Seri dijital  haberleşme yöntemlerinden olan UART daha önce verilen duman ve telgraf örnekleriyle büyük benzerlikler ihtiva eden bir makineler arası haberleşme protokolüdür.

UART – Universal Asynchronous Receiver/Transmitter (Evrensel Asenkron Alıcı/Verici) kelimelerinin baş harflerinden oluşur. Evrensel olmasının sebebi iletişim özelliklerinin değiştirilebilir olmasından dolayı bu modül bulunan bütün cihazlarda kullanılabilmesidir. Asenkron olması ise iletişim esnasında harici bir clock (saat) sinyaline ihtiyaç duymamasına dayanır. Günümüzde neredeyse bütün mikrodenetleyicilerde dahili UART modülü bulunur.

UART iletişimi

nde toplam 3 adet kabloya ihtiyaç duyulur.  Bunlar iki yönlü haberleşme için birer kablo ve alıcı ile verici arasındaki şase vo

ltaj farkını sıfırlamak amacıyla ortak bir GND bağlantısıdır. UART haberleşmesinde her bir mikrodenetleyici veya cihaz iki adet pine sahiptir. Bu pinler RX ve Tx olarak isimlendirilir. Tx pini transmit (veri gönderme), Rx pini receive (veri alma) amacıyla kullanılır. Haberleşecek olan cihazlardan birisinin Tx pini diğerinin Rx pinine, Rx pini ise diğerinin Tx pinine bağlanarak çarpraz bir bağlantı oluşturulur. Aşağıdaki şekilde bu bağlantı gösterilmiştir.

UART haberleşmesinde gönderilecek verinin boyutu 5 bitten 9 bite kadar olabilir fakat genellikle 8 bit (1 byte) veri iletimi kullanılmaktadır. Aşağıdaki şemada 8 bitlik bir verinin gönderilmesi esnasındaki sinyal şekline bir örnek verilmiştir.

Şekilde görüldüğü gibi iletişim yokken veri hattı yüksek konumdadır. Veri iletileceği zaman bir başlangıç biti gönderilir ve bu bitin durumu düşük konumdur. Daha sonra iletişim kaç bit olarak ayarlandıysa o kadar bit veri gönderilir. Yukarıdaki şekilde data 8 bit olarak gönderilmiştir. Daha sonra eşlik biti gönderilir. Bu bit gönderilecek verilerin içerisindeki 1 değerlerinin sayısına göre değişiklik göstermektedir. Eğer 8 bit veri içerisindeki 1 lerin sayısı tek sayı ise eşlik bitinin değeri ‘1’ eğer data içerisindeki 1 lerin sayısı çift ise eşlik biti ‘0’ değeri alır. Bu bitin amacı veri iletimi esnasında veri kaybı olup olmadığını kontrol etmektir.  Eşlik bitinin kullanımı opsiyoneldir ve alıcı verici arasındaki iletişim kurulurken en başta bu bitin kullanılıp kullanılmayacağı belirtilir.  Veri iletiminin bittiğini haber veren bit ise stop bitidir ve 2 adet yüksek konumlu bit olarak gönderilir ve veri hattını yüksek konumda tutar. Arduinoda bu yüksek konum 5V’tur.

UART iletişimde herhangi bir clock sinyali ile senkronizasyon sağlanmadığı için verilerdeki her bit belirli bir zaman aralğına sahiptir. Örnek olarak her bir bitin gönderilmesi 1 milisaniye saniyede 1000 bit veri gönderilir ve bu değere “baud rate-(veri aktarım hızı)” ismi verilmektedir ve alıcı-verici çiftinin baud rate değeri eşit olmak zorundadır.

Uart ile temel olarak ikilik sayı değerleri ile veri iletişimi yapılmaktadır. Eğer bu iletişimde karakterler gönderilmek istenilirse gönderilen şey yine ikili sayı sisteminde düzenlenmiş olan sayısal değerler olacaktır. Her karakterin bir sayısal karşılığı bulunmaktadır ve bu karşılıklara ASCII kod denilmektedir. Aşağıda bazı karakterlere ait ASCII kodları görülmektedir. Bu kodlar Arduino içerisinde karakterler ile işlem yaparken otomatik olarak elde edilmektedir.

Arduinoda seri haberleşmeyi kullanmak için ‘Serial’ kütüphanesi kullanılmaktadır. Bu kütüphanede kullanılan fonksiyonlardan bazıları aşağıda açıklanmıştır.

begin: Bu fonksiyon seri haberleşmeyi başlatmak ve veri hızını belirlemek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.begin(9600); // Seri iletişimi başlat ve veri iletim hızını 9600 bps olarak ayarla.

write: Bu fonksiyon tek bir veri paketi göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.write(‘a’); // ‘a’ karakterini gönder.

print: Bu fonksiyon bir veri dizisini göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.print(“Arduino”); // “Arduino” yazısındaki karakterleri arka arkaya gönder.

println: Bu fonksiyon bir veri dizisini göndermek ve ardından bir alt satıra geçme komutu (carriage return)göndermek amacıyla kullanılır. Örnek kullanımı aşağıdaki gibidir:

Serial.println(“Arduino”);// “Arduino” yazısındaki karakterleri arka arkaya gönder ve son olarak carriage return karakterini göndererek satır başı yap.

available: Bu fonksiyon arduinonun veri alıp almadığını ve aldıysa kaç paket veri aldığını öğrenebilmek amacıyla kullanılır.

read: Bu fonksiyon arduinonya gelen 1 paket veriyi almak için kullanılır. Örnek kullanımı aşağıdaki gibidir.

if( Serial.available()>0)  // eğer gelen veri sayısı 0’dan büyükse yani veri geldiyse

{

char gelenVeri=Serial.read(); //gelenVeri isminde bir değişken oluştur ve gelen veriyi bu değişkene al.

}

Bu yazıda yapacağımız uygulamamızda bilgisayar üzerinden gelen karakterleri LCD ekran üzerinde göstereceğiz. Arduino üzerinde usb’den seriye dönüştürücü bir çip bulunmaktadır ve bu çipin RX TX uçları Arduinonun Tx, Rx pinlerine bağlıdır. Bu çip arduinoya program yükleme amacıyla kullanıldığı gibi PC-Arduino arasında seri haberleşme sağlamak amacıyla da kullanılabilir. Bu çipin özelliği USB port üzerinde bir sanal seri port oluşturmak ve USB’den gelen verileri  Arduino geliştirme kartı üzerindeki Atmega328p mikrodenetleyicisine UART protokolü ile iletmek ve Atmega328P’den gelen UART protokolündeki verileri USB formatında PC’ye iletmektir.

Bu uygulamada kullanacağımız devre aşağıdaki gibidir:

Uygulamada kullanacağımız kodlar aşağıdaki gibi olabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir