11 Ağustos 2025 Pazartesi

 



Serial Port tüm Arduino kartlarda en az bir adet mevcuttur ve Arduino kartımız ile bilgisayar veya diğer cihazların haberleşmesinde kullanılır. Arduino UNO kartında bir adet Serial Port vardır. Birden fazla Serial Port kullanmak isteyen kullanıcıların Arduino MEGA veya Arduino DUE gibi toplamda 4 adet Serial Porta sahip olan kartları tercih etmesi gerekmektedir.

Arduino UNO kartında dijital 0 (RX) ve dijital 1 (TX) pinleri Serial Port’u için ayrılmıştır. PC’nin seri portu ile haberleşmek için bu iki pini kullanabildiğimiz gibi, Arduino kartımız ile bilgisayarımız arasındaki USB bağlantısını da kullanarak haberleşme sağlayabiliriz. Arduino USB üzerinden iletişim için bu pinleri kullanır. Ayrıca bu pinleri dijital giriş/çıkış için de kullanabilmemiz için dışarıya çıkarılmıştır. Arduino’ya program yüklerken yada seri monitör kullanırken bu pinlerin boş olması gerekir. Yoksa usb iletişiminde yada bu pinlere bağlanan komponentlerin çalışmasında sorunlar çıkabilir.

Arduino kart üzerinde bulunan iki adet uyarıcı ledin yardımı ile çalışma esnasında Serial Port’un o anki çalışma durumunu takip edebiliriz.

ÖNEMLİ: Arduino TX/RX pinlerindeki seri iletişim TTL mantık seviyelerini kullanır (karta bağlı olarak 5V veya 3.3V). Bu pinleri doğrudan bir RS232 seri portuna bağlamayın. RS232:  -12V(1), +12V(0) şeklinde çalışır ve Arduino kartına zarar verebilir.




Arduino Seri Port Komutları

Arduino IDE’sindeki seri port ekranı ile Arduino’nun PC’ye bağlandığı USB portundan Arduino ile iletişime geçebilir,  ona klavyeden seri olarak data gönderebilir ve ondan seri olarak data alabiliriz.

 

a.  Serial.begin();

Bu fonksiyon Arduino UNO için 0 ve 1 numaralı pinlerinde bulunan fiziksel seri haberleşme özelliğini aktif eder. Bu fonksiyonumuz “seri haberleşme hızı, iletilecek bilginin bit sayısı, parity (eşlik) biti ve stop biti” olmak üzere 4 adet parametre alır.

Serial.begin(baudRate, yapılandırma);

baudRate: Bu özellik olmazsa olmaz olan seri portun saniyede göndereceği ve alacağı bit sayısını belirler. Seri portun haberleşeceği cihaz ile aynı olmak zorundadır. 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 değerleri alabilir.

yapılandırma: SERIAL_XYZ

X = Data Bit değeridir. Bu özellik seri porttan gönderilecek her bir verinin kaç bitten oluşacağını belirler. 5 ile 8 bit arasında bir değer alabilir.

Y = Parity yani eşlik biti değeridir. Parity biti gönderilen 8 bitlik veri içindeki 1’lerin toplamının çift yada tek olduğunu belirtir. Alabileceği değerler; N,O ve E değerleridir.

·         “N” değeri “None” yani Parity biti gönderilmeyecek demektir.

·         “O” değeri “One” yani tek sayı demektir. Parity biti “1” olur.

·         “E” değeri “Even” yani çift sayı demektir. Parity biti “0” olur.

Alıcı gelen veriyi kontrol eder. Gelen verideki bitlerin toplamına ve parity değerine bakar. İkisi birbiriyle uyuyorsa doğru olarak kabul eder.

Z = Gönderilecek verinin sonuna eklenecek olan Stop Biti sayısını temsil eder. 1 ve 2 değerini alabilir. Aldığı değer kadar gönderilen verinin sonuna stop biti ekler. Varsayılan değeri “1”dir.

Örnek: Serial.begin(9600, SERIAL_8N1);

Arduino IDE’ye Serial.begin(9600); yazdığımızda yapılandırma otomatik olarak SERIAL_8N1 değerini kullanır.

 

b.  Serial.end();

Seri portu kapatır ve seri port arabelleğindeki tüm veriler silinir. Seri portu devredışı bırakarak RX ve TX pinlerini dijital giriş/çıkış olarak kullanılmasına izin verir. Bu fonksiyondan sonra tekrar seri portu etkinleştirmek için Serial.begin() fonksiyonu kullanılır. Serial.end() fonksiyonu herhangi bir parametre almaz ve geriye değer döndürmez.


a.  Serial.print();

Bu fonksiyon gönderilecek olan verinin ASCII standartlarında gönderilmesini sağlar. Yani veriyi karşıya direkt karakter olarak gönderir.  Bu fonksiyon ile gönderilen veriler makina tarafından ekrana basılabilir ve insan tarafından okunabilir.

İzin verilen format değerleri; BIN (Binary yani 2 tabanlı veri), OCT (Octal yani 8 tabanlı veri), DEC (Decimal yani 10 tabanlı veri) veya HEX (Hexadecimal yani 16 tabanlı veri) olarak gönderilebilir. Örneğin;

 

Serial.print(78, BIN);       // "1001110" gönderir

Serial.print(78, OCT);       // "116" gönderir

Serial.print(78, DEC);       // "78" gönderir

Serial.print(78, HEX);       // "4E" gönderir

Serial.print(1.23456, 0);    // "1" gönderir

Serial.print(1.23456, 2);    // "1.23" gönderir

Serial.print(1.23456, 4);    // "1.2345" gönderir

Serial.print("merhaba\t");  // merhaba yaz bir tab kadar boşluk bırak

Serial.print("merhaba\n");  // merhaba yaz bir alt satıra in

 

b.  Serial.println();

Serial.println() fonksiyonu Serial.print() fonksiyonu ile tamamen aynı işlemi yapar, ancak bu fonksiyon gönderdiği her verinin sonuna Satır Başı (ASCII 13 veya ‘\r’) karakteri ve ardından Yeni Satır(ASCII 10 veya “\n”) karakterini ekler. Böylelikle gönderilen her veride alıcı cihaz alt satırdan devam eder.


Seri Porttan Veri Alma İşlemi

PC’den veri bitleri gönderilmeye başlandığında Arduino’daki UART, 8 bitin her birini 1 bayta toplar ve bu baytları seri port ara belleğine kaydeder. Seri port ara belleği en çok 64 bayt depo edebilir. Serial.read() komutu verileri ara bellekten bayt bayt okuyarak istediğimiz bir değişkene atar. Okunan bayt silinir.


Burada dikkat edilmesi gereken bir nokta vardır. PC’den veri gönderildiğinde çoğu zaman iletimin sonuna karakter eklenir. Yani seri arabelleğine 1 baytlık karakter fazladan eklenir. Bu karakter satır sonu(\n) gibi bir şeydir. Bunun sebebi veri alırken programımızın iletimin ne zaman biteceğini bilmesi içindir. Hatta bu karakter 2 baytlık da olabilir.



Arduino seri monitör üzerinden veri gönderiyorsak sağ altta satır sonu karakteri (‘\n’) ekleme seçeneklerini görebiliriz. Aşağıdaki resimdeki gibi:


“Satır sonu yok” u seçersek sadece istediğimiz karakterleri göndeririz. Satır sonu karakteri (‘\n’) gitmez. Diğer seçeneklerden birini seçersek gönderdiğimiz her 1 bayt karakterin arkasına 1 bayt da satır sonu karakteri ekler.

Yaptığımız uygulamanın birinde “satır sonu yok” u seçtik. Çünkü diğer türlü, gönderdiğimiz karakterlerden sonra seri port ekranında satır başı yapıyor ve uygulamanın hatalı çalışmasına neden oluyordu. Gönderdiğimiz verinin bittiğini Serial.available() komutu ile tespit etmemize rağmen bu satır sonu karakteri (‘\n’) verinin arkasına eklendiği için, kullandığımız şartlı ifadenin yanlış çalışmasına sebep oluyordu.

“satır sonu karakteri” seçili olsa dahi, istersek komutlarda yapacağımız bir değişiklik ile bu satır sonu karakterini devre dışı bırakabiliriz. Bunun için if ile bir şart koyarız. Ara bellekteki bilgi istediğimiz bilgi mi yoksa satır sonu karakteri mi onu tespit edebiliriz. Diğer uygulama bu şekilde yapıldı. Aşağıdaki gibi:  


NOT: Seri porttan alınan-gönderilen veriler char türündedir.  Biz veriyi okurken int türündeki bir değişkene atarsak karakterin ascii’deki decimal karşılığını görürüz. Örneğin klavyeden “m” harfini gönderdik. Bu veriyi char türünde değil de int türündeki bir değişkene atarsak verinin ascii’deki karşılığı olan decimal 109 sayısını görürüz.


a.  Serial.available();

Serial.available() fonksiyonu seri port ara belleğindeki(buffer) byte sayısını verir. Biz seri porta gelen veriyi almadan önce bu veriler seri port arabelleğine kayıt edilir. Seri port arabelleği 64 byte değerindeki veriyi saklayabilecek kapasitededir. Biz Serial.available() fonksiyonu ile ara bellekteki verinin kaç byte’dan oluştuğunu öğrenebiliriz. Fonksiyon, herhangi bir parametre almaz ve gelen verinin byte sayısını integer cinsinden değer olarak bize verir.

Bu fonksiyonu seri porta veri gelip gelmediğini anlamak için de kullanabiliriz.

 

b.  Serial.read();

Serial.read() fonksiyonu, seri porta gelen verileri okumak için kullanılır. Seri Porttan gelen veriyi ilk byte’tan başlayarak sırayla byte byte okuma işlemini gerçekleştirir. Okuduğu her değerin integer karşılığını döndürür. Okunan bu verileri bir değişkene atayarak kullanabilirsiniz. Eğer okunacak veri yoksa -1 değerini döndürür. Serial.read() ile veri okuduğumuzda okuduğumuz alandaki veri silinir.

 

c.  Serial.readBytes();

Seri porttan gelen veriyi byte byte istenilen byte adedinde okuyarak char veya byte tipinde bir diziye yazma işlemini gerçekleştirir. İki adet parametre alır. Birinci parametre verilerin aktarılacağı dizi, ikinci parametre ise seri porttan kaç byte veri okunacağını bildirir.

Serial.readBytes(verilerin_aktarılacağı_dizi,okunacak_byte_sayısı);

Örneğin; Serial.readBytes() komutu ile seri portun ara belleğinden 6 baytlık veri okumak istiyoruz ama ara bellekte 12 bayt veri varsa okuma işlemi aşağıdaki gibi olur:


İlk 6 baytı okuduktan sonra işlemi bitirmeyip okumaya devam edersek okuma işlemi yukarıdaki gibi olur. 

a.  Serial.readBytesUntil();

Seri porttan gelen verileri belli bir karaktere kadar okumaya yarar. Belirlenen karaktere ulaşıldığında okuma işlemi sona erer ve belirtilen karakter arabellekten temizlenir.

Serial.readBytesUntil(karakter, dizi, byte_sayisi);

karakter      : Hangi karakter gelince okuma sona ersin. Veri türü char.

dizi              : Okunan verinin aktarılacağı dizi. Veri türü byte ya da char.

bayt_sayisi  : Okunacak byte sayısı. Veri türü int.

 

b.  Serial.readString();

Bu fonksiyon seri porta gelen girdi dizisini satır sonuna kadar okuyarak okunan değeri String(metin) formunda geri döndürür. Okunan bu verileri bir değişkene atayarak kullanabilirsiniz.

 

c.  Serial.readStringUntil()

Bu fonksiyonumuz seri porttan gelen verileri belirlenen karaktere kadar okur. Bu fonksiyon readString fonksiyonundan farklı olarak bir char parametre daha alır. Veri dizisinin okunduğu esnada bu char parametre ile karşılaşıldığında okuma işlemi sonlandırılır. Okunan bu verileri bir değişkene atayarak kullanabilirsiniz.

Serial.readStringUntil(‘karakter’);

 

d.  Serial.write();

Bu fonksiyon print() fonksiyonuna benzer bir işlev görür. 1 byte büyüklüğündeki char veya byte türündeki veriyi yada bu türdeki dizileri göndermekte kullanılır. Dizinin kaç elemanının gönderileceği ayarlanabilir. Ayrıca write() fonksiyonu geri dönüş değeri olarak üzerinde işlem yapılan byte sayısı döndürür.

NOT: Bir sayının rakamlarını temsil eden karakterleri göndermek için bunun yerine print() komutunu kullanın.

Serial.write(77);                                      à 77 decimal sayısının char karşılığı olan M harfini gönderir.

Serial.write(dizi);                                  àdizi’yi gönderir.

Serial.write(dizi, 3);                           àdizi’nin ilk 3 elemanını(3 bayt) gönderir.

bayt_sayisi = Serial.write(dizi);   àdizi’yi gönderir ve gönderdiği eleman sayısını(kaç baytlık işlem yapıldığını) değişkene atar.


a.  Serial.availableForWrite();

Seri port ile veri gönderme işlemini engellemeden, seri port arabelleğindeki veri yazılabilecek kaç bayt(karakter)’lık alan olduğunu bildirir.

alan = Serial.availableForWrite();

 

b.  Serial.find();

Arduino seri portuna gelen veri içinde belirlenen karakteri arar. Char türü parametre alır. Eğer karakteri bulursa TRUE, bulamazsa FALSE sonucu döndürür. Geriye dönüş değeri bool türündendir.

yazi= Serial.find(‘G’);           yazi= Serial.find(“MERHABA”);

 

c.  Serial.flush();

Bu fonksiyon gönderilen seri veri iletiminin tamamlanmasını beklemek için kullanılır. Herhangi bir parametre almaz ve geriye değer döndürmez.

Bu komut kullanıldığında tüm verinin seri port üzerinden gönderildiğinden emin olunur ve seri veri akışını temizleyerek iletim arabelleğini(buffer) bir sonraki veriyi göndermeye hazır hale getirir. Yani seri port üzerinden gönderilen verilerin temizlenmesini de sağlamış olur.

Serial.flush(), kullanıcı programında hemen devam etmek yerine, verilerin gönderilmesini beklemenin bir yoludur. Yani Serial.flush()'ı çağırdıktan sonra tüm verilerin gönderildiğinden ve iletim arabelleğinin(buffer) boş olduğundan emin olabilirsiniz.

Serial.flush(), birçok kişinin düşündüğü gibi "gelen" tamponunu boşaltmaz. İletim tamponunu boşaltılırken programınızı duraklatır.

Serial.print()'i çalıştırdığınızda, bu fonksiyon nerdeyse anında geri döner. Dize iletilene kadar beklemek yerine, print() dize için bir tampon ayarlar ve ardından kesmeler yoluyla her seferinde bir karakter iletir. Arka planda iletim gerçekleşirken program çalışmaya devam eder. Kodunuzun, bir seri dizenin gönderiminin bitirilmesini beklemesini istiyorsanız, Serial.flush() kullanmanız gerekir. Ancak; Serial.print()'lerle kullandığımız kritik zamanlamanız varsa, zamanlamanızın değişebileceğini aklınızda bulundurmanız gerekir.


a.  serialEvent()

Bu bir fonksiyondur. Seri porta veri geldiğinde otomatik olarak bu fonksiyon çalışır. Bir nevi seri port kesmesi gibi davranır. Bu işlemi loop() döngüsünden bağımsız olarak yapar. Yani loop() döngüsünde kodlarımız çalışırken, seri porta bir veri geldiğinde, serialEvent() fonksiyonumuz çalışır.

serialEvent() fonksiyonu her Arduino kartında çalışmaz. Çalıştığı kartlar; UNO R3, Nano, Mega 2560 Rev3 ve Due’dir. Seri port sayısı birden fazla olan Mega 2560 Rev3 ve Due kartlarında fonksiyon serialEvent1(),serialEvent2()……… gibi olur.

Bu fonksiyon yerine Serial.available(); komutu da kullanılabilir.



Eğer arabellekte 1 bayt veri varsa veriyi okumak için yukarıdaki programı kullanabiliriz ama arabellekten 1 bayttan fazla veri okuyacaksak programı aşağıdaki gibi yazmamız daha uygun olacaktır.






_____________________________________________________________________________________________________________________________________________________


10 Temmuz 2025 Perşembe

 



RS232, 1960 yıllarının başında ortaya çıkmış, Recommended Standart’ın kısaltılmış hali olan, asenkron ve senkron seri iletişim protokolüdür.  Asenkron iletişimde clock sinyali kullanılmazken, senkron iletişimde clock sinyali vardır. Bu konumuzda asenkron iletişim üzerinde duracağız.

RS232 iletişimde bitler aynı hat üzerinden sırayla tek tek gider. Genelde kısa mesafe haberleşme için kullanılır. Yapılan çalışmalar kabloların kapasitesinden ötürü 15 metrenin üzerinde yapılan haberleşme işlemlerinde verilerin bozulmalara uğradığını göstermektedir. Fakat düşük kapasiteli kablolar yardımı ile yapılan bu haberleşmenin 300 metreye kadar yapılabildiği görülmüştür. Uzun mesafelerde yüksek hız elde etmek için RS-485 gibi diğer standartlar daha uygundur.

RS-232, yalnızca iki cihaz arasındaki iletişim içindir. RS-232'de bitler, bir zaman serisi halinde gönderilir. Hem senkron hem de asenkron iletimler bu standart tarafından desteklenir. İletilen veri ile alınan veri ayrı devreler olduğundan iletişim çift yönlü (full duplex) çalışabilir ve her iki yönde eşzamanlı olarak veri akışı olur. RS232 iletişim protokolü ayrıca I2C veya TTL aygıtlarından üretilen sinyallerden daha uzun mesafelerde sinyal iletmek için daha uygundur.

 

RS232 Voltaj Seviyeleri

Geçerli sinyaller +3 ile +12 volt arasında ya da −3 ile −12 volt arasındadır. -3V ile -12V arasındaki bir sinyal voltajı mantıksal '1'i temsil ederken, +3V ile +12V arasındaki voltaj mantıksal '0'ı temsil eder. Bu yüzden −3 ile +3 volt arasındaki gerilim değerleri RS-232 için geçerli değildir. Ayrıca GND toprak pini bulunur. RS232 seri haberleşme standardı, TTL(Transistor-Transistor Logic) seviyesinde iletim yapmaz. RS232 akım değeri ise 3 Amperdir.


RS232 Veri Türü

RS232’de veriler ASCII karakterleri şeklinde gönderilir. Gönderilecek olan veri, gönderici tarafından, belirlenmiş olan bu formatta hazırlanmakta ve iletilmektedir. Bu işlem süreçlerinde de alıcı devamlı olarak hattı dinlemektedir.


RS232 Kablo Sayısı

Tüm özelliklerin gerekmediği uygulamalarda, gönderilen veri (Transmitted Data: TxD), alınan veri (Received Data: RxD) ve ortak toprak (Common Ground: GND) hatlarından oluşan en az 3 kablolu RS-232 bağlantısı kullanılabilir. Hatta, veri akışı tek yönlü ise, iki kablolu bağlantı (veri ve toprak) bile kullanılabilir. Yalnızca donanım akış kontrolü gerektiği durumlarda iki yönlü veriye ek olarak RTS ve CTS hatları da eklenerek 5 kablolu sürümü elde edilir.


RS232 Baudrate

RS232’de baudrate değeri vardır. Bu değer seri portun saniyede göndereceği ve alacağı bit sayısını belirler. Örneğin baud hızı 9600 ise saniyede 9600 bit gider. Seri portun haberleşeceği cihaz ile aynı olmak zorundadır. 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 değerlerini alabilir.


RS232 Konnektör

RS232 protokolü DB9 veya DB25 konnektörü kullanır. DB25 konnektörleri 25 pin, DB9 konnektörü 9 pin kullanır.

 

DB9 Konnektörü




NOT: RS232 ilk olarak bilgisayar terminallerini modemlere bağlamak için tasarlanmıştı. Daha sonradan güncellendi. Yukarıdaki tablodaki pinlerin bu amaçla kullanıldığı görülmektedir. Biz ise RxD, TxD, GND gibi pinleri kullanarak asenkron veri iletimi ile dış kaynaktaki cihazlarla iletişime geçeceğimiz için buradaki birçok pini kullanmayacağız. Bizim kullanacağımız iletişimdeki pin bağlantıları genelde aşağıdaki resimdeki gibi olacak.




RS232 Veri İletim Protokolü



Start Biti: Alıcı cihaza veri gönderileceğinin haber verilmesini sağlar. Bu önemlidir çünkü; RS-232’nin asenkron protokolünde start biti alıcı cihazı, verileri doğru zamanlama ile okumaya hazırlar. Başlangıç bit değeri 0(sıfır)’dır.

Data: Gönderilecek veridir. RS232’de veriler ASCII karakterleri şeklinde gönderilir. Genelde data biti 8 bittir ama 5 ile 9 arasında da olabilir.

Parity Biti: Parity yani eşlik biti değeridir. Parity biti gönderilen 8 bitlik veri içindeki 1’lerin toplamının çift yada tek olduğunu belirtir. Alabileceği değerler; N,O ve E değerleridir.

•  “N” değeri “None” yani Parity biti gönderilmeyecek demektir.

•  “O” değeri “One” yani tek sayı demektir. Parity biti “1” olur.

•  “E” değeri “Even” yani çift sayı demektir. Parity biti “0” olur.

Stop Biti: Gönderilen datanın bittiğini belirten bittir. 1 yada 2 stop biti olabilir.


Aşağıdaki örneklerdeki gibi veri iletimi olur:





Aşağıdaki örnekte 198 sayısının iletiminin nasıl gerçekleştiğine bakalım. Parity biti kullanmayacağız. İlk önce bir bitin ne zaman başlayıp ne zaman biteceğini hesaplayalım. Bunun için baud değerini 9600 kabul edersek;

1 bitin uzunluğu = 1 / 9600 = 104 µsn eder. Yani bir bitin uzunluğu 104 µsn’dir. O zaman;



Alıcı, start biti başladıktan yani 1 ile 2 nolu çizgi arasını 104 µsn saydıktan sonra veri almaya hazırdır. 2 ile 3 nolu çizginin tam ortasına geldiği zaman ise 1. biti alır. 3 ile 4 nolu çizginin tam ortasına geldiği zaman ise 2. biti alır. Bu durum bu şekilde devam eder. Bitin tam ortada alınmasının nedeni herhangi bir parazit ya da karasızlık durumunun önüne geçmek içindir. Alıcı stop bitini görüp 104 µsn saydıktan sonra veri alımını tamamlamış olur. 


UART ve USART Seri Haberleşme Protokolleri

UART(Universal Asynchronous Receiver Transmitter); bilgisayar ve mikrokontrolcüler veya mikrokontroller ve çevre birimleri 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); hem senkron hem de asenkron olarak çalışabilir. UART’a göre daha gelişmiş bir protokoldür. Haberleşme mantığı 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.

RS232 haberleşme de UART-USART yöntemini kullanmaktadır. UART mantık seviyeleri üreticiler arasında farklılık gösterebilir. Örneğin, bir Arduino Uno’nun 5V mantık seviyesi vardır. Ancak; bir bilgisayarın RS232 portu +/-12V mantık seviyesine sahiptir. Bir Arduino Uno’yu doğrudan bir RS232 bağlantı noktasına bağlamak Arduino’ya zarar verir. Her iki UART cihazı aynı mantık seviyelerine sahip değilse, cihazları bağlamak için uygun bir mantık seviye dönüştürücü devresi gereklidir.


UART-USART Veri İletim Örneği 



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 Kullanılır?

UART-USART haberleşmesi yapabilmek için mikrodenetleyicimizdeki daha önceden tanımlanmış olan pinleri kullanırız. PC ile mikrodenetleyici arasındaki iletişim için; ya USB-TTL dönüştürücü ya da RS232-TTL dönüştürücü modülü kullanırız. Her iki modülü de RX-TX pinleri mikrodenetleyici RX-TX pinleri ile ters olarak bağlanacak şekilde bağlantısını yaptıktan sonra iletişimi başlatabiliriz.

(Yani mikrodenetleyici TX —> Modül RX, mikrodenetleyici RX —> Modül TX)



Arduino UART Kullanımı

Arduino geliştirme kartları, tercih edilen karta bağlı olarak bir veya daha fazla UART pinine sahiptir. Arduino Uno pin 0 (RX0) ve pin 1 (TX0) üzerinde bulunan tek UART arayüzüne sahiptir. Pin 0 ve 1 Arduino IDE ile USB üzerinden iletişim kurmak için de kullanılır. Bu nedenle, Arduino UNO geliştirme kartınıza kodlar yükleyecekseniz, önce 0 ve 1 pinlerindeki tüm kabloları çıkardığınızdan emin olun.



UART Avantajları

·         Sadece iki kablo kullanılır

·         Saat sinyaline ihtiyaç duymaz

·         Hata denetimine izin vermek için bir eşlik biti vardır

·      Her iki taraf da buna göre ayarlandığı sürece veri paketinin yapısı değiştirilebilir

·         Yaygın olarak kullanılan bir yöntemdir

UART Dezavantajları

·         Veri çerçevesinin boyutu maksimum 9 bit ile sınırlıdır

·     Birden çok bağımlı(çevre birimi/slave) veya birden çok ana sistemi(kontrolcü/master) desteklemez.



Örnek: 01001010 verisinin UART iletişiminin nasıl gerçekleştiğine bakalım.



Çeşitli TTL Dönüştürücüler

a.   RS232 – TTL Dönüştürücü Devre Şeması




a.   RS232 – TTL Dönüştürücü Kart




a.   FT232 Usb - Uart Dönüştürücü Kart




_____________________________________________________________________________________________________________________________________________________


Arduino Eğitimi Konu - 7

Arduino Eğitimi Konu - 9

Toplam Sayfa Görüntüleme Sayısı

Seri İletişim Protokolleri

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com