Seri HaberleÅŸme
Yazar: Burak Demir

--
SERİ HABERLEÅME (UART, SPI, I2C) Protokolleri
Senkron HaberleÅŸme (US(A)RT)
Senkron haberleşme gerçekleştirilirken, gönderilen veri biti ve alınan veri biti birbiriyle uyum içerisinde olmalıdır. İletişimi gerçekleştirecek olan aygıtlar eş zamanlı olarak çalışmak zorundadır.
Yani alıcı ve verici aynı saat (clock) üzerinde olmalıdır.
Asenkron HaberleÅŸme (UART)
Asenkron haberleşme yapmak için belirli bir clock’a ihtiyaç duyulmaz. Veri herhangi bir anda iletilebilir. Belirli standartlar kullanılarak gerçekleştirilir ve Senkron haberleşmeye göre daha yavaş bir iletim olur.
UART (Universal Asynchronous Receiver Transmitter), bilgisayar ve mikrokontrolcüler 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.
Paralel ve Seri HaberleÅŸme
Paralel haberleşme’de (senkron: eş zamanlı) örneğin 8 tane bitin 8 tane ayrı kanaldan aynı anda aktarabiliriz.
Seri haberleşmede (asenkron) ise 8 tane biti tek bir hattan arka arkaya seri bir şekilde gönderebiliriz.
Senkron haberleşmede veri ile birlikte bir de saat (clock) sinyali kullanılır. Veri, saat sinyali ile eş zamanlı olarak iletilir. Saat ve veri hattına ihtiyacımız olur.
Asenkron iletiÅŸimde ise saat sinyali yoktur. Zaman bilgisi yoktur.
UART Bağlantıları
UART birimlerinde RX, TX ve GND uçları bulunur.
Haberleşecek birimlerin RX ve TX uçları çapraz olarak bağlanır. GND (topraklama) bağlantıları ortaklanır.

Haberleşme Türleri
- FULL DUPLEX kavramı:
Telefon gibi düşünebiliriz. İki tarafın da aynı anda konuşabileceği haberleşme yapısı. İki taraf da birbirine veri iletip alabilir. - HALF DUPLEX kavramı:
Telsiz gibi düşünebiliriz. İki taraf da konuşabilir ama aynı anda değil. Biri konuşur, diğeri dinler; diğeri konuşur, biri dinler. - SIMPLEX kavramı:
Biri konuşur, diğeri dinler. Tek taraflı bir iletişimdir.
Baud Rate
Seri haberleşme hızları “baud rate†ile ifade edilir.
Genellikle 300 ile 115200 bps arasında değişir.
(Bps -> bits per second)
İki birimin de haberleşebilmesi için aynı “baund rate†değerlerinde iletişim yapmaları gerekir.
Kesmelerle UART HaberleÅŸmesi
Kesmelerle UART haberleşmesi için HAL_UART_RxCpltCallback işlevi kullanılabilir. STM32 HAL kütüphanesi, kesme tabanlı UART haberleşmesi için bu tür bir işlev sağlar.
Bu işlev, belirli bir UART alım işlemi tamamlandığında otomatik olarak çağrılır ve bu sayede alınan verileri işlemek için kullanılabilir.
Uygulamalar
- UART ile haberleşme uygulaması yapınız.
- Kesmeler’i kullanarak UART ile seri haberleşme örneği gerçekleştiriniz.
SPI Haberleşme Protokolü (Serial Peripheral Interface)
SPI, seri haberleşme protokollerinden biridir ve genellikle mikrodenetleyiciler ve çevresel cihazlar arasında yüksek hızlı veri iletimi gerektiren uygulamalarda kullanılır.
SPI, tek yönlü veya çift yönlü veri iletimini destekleyebilir ve birden fazla cihazla haberleşmeyi kolaylaştıran bir yapıya sahiptir. SPI, senkron bir protokoldür, bu nedenle iletim ve alım için saat sinyalleri kullanılır.
SPI haberleşmesi, genellikle bir ana cihaz (master) ve birden fazla alt cihaz (slave) arasında gerçekleştirilir. Master cihaz, saat sinyalini sağlar ve veriyi tüm slave cihazlara iletebilir.
SPI Haberleşme Protokolünün Temel Özellikleri
- Çalışma Yapısı:
SPI haberleşmesi, seri bir yapıya sahiptir, yani veri bitleri ardışık olarak gönderilir. Bir iletim işlemi, bir başlatma biti (Start biti) ile başlar ve bir son biti (Stop biti) ile biter. - Saat Sinyali (SCLK):
SPI haberleşmesinde master cihaz, saat sinyalini üretir ve tüm veri iletimini bu saate göre senkronize eder. Veri çizgisi (MOSI - Master Output Slave Input) saat yükselme kenarında veriyi alıcıya gönderirken, veri çizgisi (MISO - Master Input Slave Output) saat düşme kenarında veriyi gönderir. - Çift Yönlü İletim:
SPI, çift yönlü bir haberleşme protokolüdür. Master cihaz veri gönderirken, slave cihaz aynı zamanda veri gönderebilir. Böylece, hem master hem de slave cihazlar eşzamanlı olarak veri iletebilir. - Slave Seçimi (CS/SS):
SPI'da her bir slave cihaz için bir "Slave Select" (CS/SS) pini bulunur. Bu pin, master cihaz tarafından düşük seviyeye çekilerek ilgili slave cihazın iletişim yapacağını belirler. Diğer slave cihazlar bu süre zarfında pasif durumdadır ve veri iletimi için bekler.
Åimdi SPI haberleÅŸmesi kullanarak bir mikrodenetleyici ve bir sensör arasında veri alışveriÅŸi örneÄŸini ele alalım.
Uygulama
- SPI haberleşme uygulaması yapınız.
I2C (Inter-Integrated Circuit) Haberleşme Protokolü
I2C (Inter-Integrated Circuit), seri haberleÅŸme protokollerinden biridir ve iki hattan (SCL ve SDA) oluÅŸur.
I2C protokolü, senkron bir protokoldür, yani iletim ve alım için saat sinyalleri kullanılır. I2C, Philips Semiconductor tarafından geliştirilmiştir ve düşük hızlı veri iletimi gerektiren uygulamalarda yaygın olarak kullanılır.
I2C Haberleşmesinin Temel Özellikleri
- Master-Slave Yapısı:
I2C, bir master cihaz ve birden fazla slave cihaz arasında haberleşmeyi sağlar. Master cihaz, haberleşmeyi başlatan ve saat sinyalini sağlayan cihazdır. Slave cihazlar ise master cihaz tarafından kontrol edilen ve komutlarına göre yanıt veren cihazlardır. - SCL (Serial Clock) Sinyali:
Saat sinyali, I2C haberleşmesinde master cihaz tarafından sağlanır ve veri iletimini senkronize eder. Tüm veri iletimi SCL sinyaline göre yapılır. - SDA (Serial Data) Sinyali:
Verilerin aktarıldığı veri çizgisidir. Hem master hem de slave cihazlar SDA hattını okuyabilir ve yazabilir. - Adresleme:
I2C, her bir slave cihazın benzersiz bir adresle tanımlandığı bir adresleme mekanizmasına sahiptir. Master cihaz, haberleşmeyi başlatmak için öncelikle slave cihazın adresini gönderir. - Start ve Stop Durumları:
I2C haberleşmesi, start ve stop durumları ile belirli bir iletişim döngüsünü başlatır ve sonlandırır. Start durumu, veri iletimini başlatmak için kullanılırken, stop durumu iletimi sonlandırır. - ACK ve NACK:
Slave cihazlar, veri alındığında ACK (Acknowledge) veya veri alınamadığında NACK (Not Acknowledge) sinyali gönderirler. ACK, veri alındığını belirtirken, NACK veri alınamadığını belirtir.
MS5611
MS5611, bir barometrik basınç sensörüdür ve I2C haberleşme protokolünü kullanarak mikrodenetleyici veya diğer cihazlarla iletişim kurar.
Bu sensör, atmosferik basınç ve sıcaklık ölçümü için kullanılır ve yüksek çözünürlüklü veriler sağlar.
MS5611 Sensörünün I2C kullanımı, mikrodenetleyici üzerinde uygun I2C kütüphanelerinin kullanılmasını gerektirir. Bu kütüphaneler, I2C haberleşmesi için gerekli yapılandırmaları sağlar ve veri alışverişini kolaylaştırır.
Mikrodenetleyicinizde uygun I2C kütüphanelerini kullanarak MS5611 sensörü ile iletişim kurabilir ve atmosferik basınç ve sıcaklık verilerini okuyabilirsiniz. Verileri okuduktan sonra, bu değerleri hava durumu tahminleri, yükseklik ölçümü ve diğer uygulamalarda kullanabilirsiniz.

OSR (Over-Sampling Ratio - Aşırı Örnekleme Oranı)
OSR (Over-Sampling Ratio - Aşırı Örnekleme Oranı), sensörde basınç ve sıcaklık ölçümlerinin hassasiyetini ve doğruluğunu ayarlamak için kullanılan bir terimdir.
MS5611 sensöründe OSR değeri, sensörün basınç ve sıcaklık ölçümleri yaparken kaç adet örnekleme yapılacağını belirler. OSR değeri ne kadar yüksekse, örnekleme sayısı da o kadar artar ve ölçümler daha hassas ve doğru olur. Ancak, yüksek OSR değeri daha fazla işlem gücü ve zaman gerektirir.
Kullanıcılar, uygulamanın ihtiyacına ve performans gereksinimlerine göre uygun bir OSR değeri seçmelidirler. Daha yüksek hassasiyet gerektiren uygulamalarda daha yüksek OSR değerleri kullanılabilirken, daha hızlı tepki süreleri gerektiren uygulamalarda daha düşük OSR değerleri tercih edilebilir.
Örneğin, 256 OSR değeri, düşük hassasiyetli ve daha hızlı tepki süreli ölçümler sağlarken, 4096 OSR değeri yüksek hassasiyetli ve daha uzun tepki süreli ölçümler sağlar. Her durumda, kullanıcılar doğru performans ve güç tüketimi dengesini sağlamak için uygun OSR değeri seçmelidirler.
Uygulama
- MS5611 sensörünü kullanarak I2C haberleşme protokülü ile sensör verilerini okuyunuz.
NUCLEO-F103RB



ST life.augmented NUCLEO-F103RB CN7 HEADER (top left side) 81 PC 10 UART3 TX UART3 RX PC 11 D4 PC 12 PD 2 VDD E5V BOOTO GND U3 NC NC 22 NC IOREF PA 13 RESET PA 14 3V3 CN6 PA 15 SPI1 SSEL PWM2/1 5V GND GND PB 7 12C1 SDA UART1 RX GND PC 13 BUTTON1 VIN PC 14 PC 15 PF O PF_1 VBAT PC 2 ADC1/12 PC 3 ADC1/13 CN7 NC UART2_CTS PWM2/1 ADC1/0 A0 PA 0 UART2_RTS PWM2/2 ADC1/1 A1 PA 1 SPI1_SSEL ADC1/4 A2 PA 4 CN8 PWM3/3 ADC1/8 A3 PB 0 ADC1/11 A4 PC 1 ADC1/10 A5 PC 0 life.augmented ST 70 NUCLEO-F103RB ARDUINO HEADER (top right side) PB 8 D15 12C SCL CAN1 RD 12C1 SCL PB 9 D14 12C SDA CAN1 TD 12C1 SDA AVDD AVOD GND C16 289D PA 5 D13 SP11 SCLK LED1 ADC1/5 SPI SCK PA 6 D12 SP11 MISO SPI MISO ADC1/6 PWM3/1 PA 7 D11 SPI1 MOSI SPI MOSI ADC1/7 PWM3/2 PB 6 D10 SPI CS UART1 TX 12C1 SCL PC 7 D9 PWM313/2 025 PA 9 D8 UART1_TĞ¥ PWM1/2 CN5 PA 8 D7 PWM1/1 PB 10 D6 UART3 TX 12C2 SCL PWM2/3 PB 4 D5 SPI1 MISO PWM3/1 PB 5 D4 SP11 MOSI PWM3/2 PB 3 D3 SPI1 SCLK PWM OUT WM PA 10 D2 UART1 RX PWM1/3 PA 2 D1 UART2 TX PA 3 DO UART2_RX CN1O CN9
TTL (Time-to-Live) Nedir ve Ne İçin Kullanılır?

- TTL kullanımı ile ilgili örnek uygulama yapınız.
Burak Demir
