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