13 Kasım 2018 Salı

ASENKRON SERİ İLETİŞİM

Asenkron Seri İletişim


1)UART-USART


UART = Universal Asynchronous Receiver-Transmitter(Evrensel Asenkron Alıcı-Verici)

USART =  Universal SynchronousAsynchronous Receiver-Transmitter(Evrensel Senkron Asenkron Alıcı-Verici)

UART, verici tarafta paralelden seriye dönüştürme işlemi yapan, alıcı tarafta da seriden paralele dönüştürme yapan bir IC(entegre devre) veya çipidir. SPI, I2C gibi bir iletişim protokolü değil bir mikrodenetleyecideki fiziksel devredir. UART'ın amacı seri veriyi iletmek ve almaktır. Yani UART işlemci ve seri iletişim portu arasında köprü görevi gören bir donanımdır.

Eski bilgisayar sistemlerini hatırlarsanız, "Fare", "Yazıcı" ve "Modem" gibi cihazlar arkada ağır bir konektör kullanılarak bağlanır. Tüm bu cihazlar UART kullanılarak iletişim kurardı

USB, bilgisayarlardaki ve diğer cihazlardaki tüm iletişim standartlarını değiştirmiş olsa da UART hala yukarıdaki cihazlarda kullanılmaktadır.  

Bugün ise UART; "GPS alıcıları", "Bluetooth modülleri", "GSM ve GPRS modemleri", "Kablosuz iletişim sistemleri", "RFID tabanlı uygulamalar"  vb.  birçok uygulamada kullanılmaktadır.


UART aşağıdaki bileşenlere sahiptir:
  •  Bir saat üreteci
  • Giriş-çıkış kaydırma saklayacısı(Shitft Register)
  • İletme/alma kontrolü
  • Okuma/yazma mantıksal kontrolü( Control Logic)
  •  İletme/Alma arabellekleri, tamponları(Buffer)
  • İlk giren ilk çıkar arabelleği(FIFO)





Seri veriyi ileten UART üzerindeki pin TX olarak adlandırılır ve seri veriyi alan UART üzerindeki pin RX olarak adlandırılır. 

Verici UART, veri yolu ile(data bus) kontrol cihazından veri alır. Veri yolundan UART tarafından alınan veriler paralel verilerdir. Kontrol cihazı bir mikrokontroller, CPU veya bir bellek birimi olabilir. 

UART bu verilere, onları bir veri paketine dönüştürmek için "Başlangıç(Start)", "Eşlenik(Parity)" ve "Bitiş(Stop)"bitlerini ekler. Veri paketi daha sonra kaydırma yazmacının yardımıyla paralelden seriye dönüştürülür.



Alıcı UART bu seri verileri RX pininden alır ve başlangıç ​​ve bitiş bitlerini tanıyarak gerçek verileri algılar. Eşlenik biti, verilerin bütünlüğünü kontrol etmek için kullanılır.(parity biti İsteğe bağlı)

Veri paketinden başlangıç, eşlenik ve durdurma bitlerini ayırma üzerine, veriler kaydırma yazmacının yardımıyla paralel verilere dönüştürülür. Bu paralel veri, alıcı taraftaki veri yolundan denetleyiciye gönderilir.


1.2) Orange Pi ve UART

Orange pi kartında da diğer bilgisayar ve elektronik kartlar gibi UART entegre devresi bulunuyor. Orange pi modellerinin her birinde aynı sayıda giriş/çıkış pini bulunmaz. "Zero" modelinde 26 pin, "Pc", "Pc Plus" gibi çoğu modelde ise 40 pin bulunuyor.



Orange pi Zero’da kullanabileceğimiz toplam üç adet UART pini vardır. Bunun biri board üzerinde bulunan, daha çok USB to TTL ile birlikte kullanıp boot ettiğimiz kullandığımız pinler. Diğer ikisi ise 26 pinlik giriş-çıkış pinlerinin bulunduğu kısımda olan pinler.


Benim bu yazıyı yazarken kullandığım model olan Orange pi Pc Plus’da da olduğu gibi çoğu modelde 40 pin vardır. Orange pi Pc Plus’da kullanabileceğimiz toplam dört adet UART pini vardır. 

Bunun biri board üzerinde bulunan, daha çok USB to TTL ile birlikte kullanıp boot ettiğimiz pin. Diğer UART pinleri ise 40 pinlik giriş-çıkış pinlerinin bulunduğı kısımda olan pinler. (Alttaki resimde sarı renkte)


Başlangıçta UART0 diye adlandırılan board üzerinde bulunan TX-RX-GND dizilimde olan pinler aktif edilmiş ve kullanılabilir durumdadır. Diğer UART pinlerini kullanabilmemiz için bu pinleri aktif etmemiz gerekiyor. Bunun için "script.bin" dosyasına girip bu pinleri kullanılabilir duruma getirmemiz gerekiyor.


Sudo bin2fex script.bin script.fex ==>Dosyayı bin formatından fex formatına dönüştürür.

Sudo fex2bin script.fex script.bin ==>Dosyayı fex formatından bin formatına dönüştürür.




Script.bin dosyasında işlem yapabilmek için bu dosyayı fex dosyasına dönüştürüyoruz. Hangi komutları gireceğimiz yukarıdaki resimden takip edebilirsiniz. Dosyayı dönüştürdükten dosyanın içine giriyoruz ve dosya içinde UART kısmını bulup burada etkinleştirmek istediğimiz UART pin bölümlerinin aşağısındaki "uart_used" kısmını "1" yapıyoruz. Daha sonra dosyayı tekrar bin formatına dönüştürüyoruz ve cihazı "reboot"  komutuyla formatlıyoruz. Artık etkinleştirdiğimiz UART pinleri kullanılabilir durumda.

UART pinlerinin hangilerinin kullanılabilir olduğunu görmek için "ls  /dev/tty*" komutunu kullanabiliriz. Ben UART1'i aktif ettiğim için burada "/dev/ttyS1" dizinini görmemiz gerekiyor.



Yine aynı şekilde "dmesg | grep tty" komutunu girerek de bu duruma bakabilirsiniz.



Artık Orange pi ile bilgisayarı haberleştirelim.  UART arabirimi, byte verileri alır ve bunları sırayla birer bit halinde taşır. Hedefte ikinci bir UART, gelen bitleri bir araya getirip bunları tekrar byte haline getirir. Bu arabirime TX ve RX pinlerimizi bağlayacağız.

TTL, mikrokontrolcünün  UART arabirimiyle gönderilip alınan sinyallerdir diyebiliriz. TTL sinyallerin kullanılmasının sebebi, PC’nizin seri ve usb portunun algılayamayacağı seviyede olduğu için dönüştürülmesi gerekir. Bunun için bir USB to TTL modülü kullanmamız gerekiyor.



Ben UART1’ i kullanarak Orange pi ile bilgisayar arasında bir bağlantı kuracağım. Bu bağlantıyı kurarken benim bilmem gereken pinler yukarıdaki tablodan da bakaca olursak "Tx1, Rx1 ve GND" pini olacak. 

ORANGE PI
USB TO TLL
Tx1
Rx
Rx1
Tx
GND
GND

Bağlantıyı yukarıdaki şekilde yaptıktan sonra Orange pi’ ye güç veriyoruz. Bu sırada bilgisayarda aygıt yöneticisi kısmında hangi porta bağlantığımıza bakıyoruz.



NOT: Orange pi'den gönderdiğimiz verileri bilgisayarda görmek için bazı seri haberleşme arayüz programları mevcut. Bir sonraki yazıda bu tarz kullanabileceğimiz programları ve bu programlar aracılığıyla "bitiş bitinin bir veya iki bit olması", "eşlenik bitinin farklı her iki tarafta farklı belirtilmesi" ve "baud rate oranının farklı belirtilmesi" gibi örnekleri paylaşacağım.

Aradaki fiziki bağlantıyı yaptıktan sonra artık bu iki cihaz arası(Orange pi - Bilgisayar) veri alışverişine başlayabiliriz. Bu tarz haberleşmeyle alakalı örnekleri "Python" ve "C" programlama dilleri aracılığıyla göstereceğim.

İlk örneğimizde python programlama dilini kullanarak baud rate 9600 bps olarak belirleyelim ve bilgisayarda girilen değeri “if” yapısı ile kullanıp bir kod yazalım. Kodda “serial” kütüphanesini kullanarak   bilgisayardan veri okuyup bilgisayara veri gönderiyoruz.


İlk örneğimizde “Parity bit” kullanmayalım ve kullandığımız portu ve baud hızını belirtelim.  Bunun dışında herhangi bir değer belirtmiyoruz.

Programı kısaca anlatayım.  Bağlandığımız bilgisayardaki seri arayüz ekranında girdiğimiz [y] ve [n] karakterlerine göre Orange pi’ ye [y] için “yes” , [n] için ise “no” verisi geliyor. Farklı bir değer girildiğinde ise belirlediğimiz iki karakterden birinin girilmesi konusunda bilgisayara uyarı mesajı gönderiyor.

sudo python dosya_ismi.py” ile kodu çalıştırdığımız an, orange pi komut ekranında kodda belirterek bizim yazmasını istediğimiz “Seri Haberlesme basliyor” yazısı ve bilgisayar seri ekranda ise yine bizim kodda belirterek bizim yazmasını istediğimiz “Merhaba Lutfen [y] veya [n] karakterlerinden birini tuslayiniz:” yazısı çıkıyor. Bundan sonra yukarıda anlattığım gibi bilgisayardan girdiğimiz karaktere göre iki cihaz birbiri ile veri alışverişi yapıyor.



Bir sonraki yazıda bu program üzerinden parametreleri değiştirerek hangi durumlarla karşılaştığımızı inceleyeceğiz. Ayrıca kullanabileceğimiz seri arayüz programlarından bahsedeceğim.

Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.


Kaynakça:








Hiç yorum yok:

Yorum Gönder

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...