İletişim Protokolleri (Communication Protocols)
Arduino dış dünya ile iletişim kurabilmek için genel amaçlı i/o pinleri önceki konu başlığında incelenmişti. LED, buton, role vb. cihazlardan girdi almak veya bu cihazlara çıktı göndermek GPIO üzerinden kolay bir şekilde gerçekleştirilebilir. Fakat daha karmaşık sensor düzeneklerinin olduğu durumlarda farklı iletişim protokolleri kullanılır. UART, I 2 C (TWI) ve SPI Arduino ekosisteminde sıkça kullanılan iletişim protokolleridir.
UART (Universal Asynchronous Receiver-Transmitter) Asenkron seri iletişim için geliştirilmiş bir donanımdır. Veri format ve transfer hızı ayarlanabilir. Asenkron seri iletişimde veri herhangi bir zamanda gönderilebilir. Veri gönderiminin olmadığı durumlarda hat boşta kalır. Senkron veri iletişimine göre daha yavaştır.
UART veri bytelarını göndericiden alıcıya seri bir şekilde iletir. Karşı taraftaki UART alıcısı ise almış olduğu byteları bir araya getirerek verinin kendisini oluşturur. Tek bir kablodan verinin bu şekilde aktarılmasının maliyeti oldukça düşüktür.
ATmega328, pin0(rx) ve pin1(tx) yardımıyla UART ın kullanımına izin verir (TTL-5V). Arduino UNO üzerinde tek bir UART kanalı bulunmaktadır. Bu kanal aynı zamanda ATmega16U2 tarafından da kullanılmaktadır. Dolayısıyla Arduino ile USB üzerinden bilgisayarla iletişim kurulmadığı durumlarda pin0 ve pin1 üzerinden bağlı olan diğer UART cihazları ile iletişim kurulabilir.
I 2 C (Inter-Integrated Circuit) TWI (Two Wire Interface) I 2 C, seri veri yoludur. Philips tarafından tasarlanmıştır. Genellikle entegre devrelerin ve diğer düşük hızlı elektronik sistemlerin birbirlerine bağlanabilmesi için geliştirilmiştir. İlk olarak tek bir baskı devre kartında kullanılmak üzere düşünülmüştür. Senkron veri iletişimi 2 hat ile birçok birim arasında bilgi aktarımına imkan vermektedir. Bir tanesi data için kullanılırken diğeri saat darbesi içindir. Günümüzde bir çok cihazın I 2 C arayüzü bulunmaktadır. (Mikrokontrolcü, EEPROM, LCD cihazlar, A/D dönüştürücüler)
Senkron İletişim Alıcı ve verici arasında zaman uyumunu sağlamak için bir saat işareti kullanılır. İlk olarak önceden belirlenmiş olan bir senkronizasyon karakteri karşı tarafa gönderilir. Alıcı belirlenmiş olan karaktere bakarak veri yolundaki veriyi okur ya da okumaz. Asenkron iletişime göre oldukça hızlıdır.
Hız ve Adresler Klasik I2C 100K bits/sn. Dir. Fast Mode da 400K bits/sn ye High Speed Mode da ise 3.4M bits/sn ye kadar ulaşır. Mikrokontrolcü üzerinde daha az sayıda pin kullanarak GPIO ların gereksiz yere kullanılmasının önüne geçer. Bu arayüzü kullanarak devre kartına bağlanan herbir birimin 7 bitlik adresi vardır.
İki hattan birincisi SDA veri transferi için gerekli iken, diğeri saat içindir (SCL). Bu pinler Arduino UNO da belirtilmiştir. Ayrıca ilave olarak SDA için A4, SCL için de A5 kullanılabilir. Güvenlikli veri aktarımı için ortak ground kullanılır. Her iki yönde veri aktarımına izin verir fakat bunu aynı zaman içinde gerçekleştirmez. (half-duplex) Master ve Slave olmak üzere iki adet yol tanımlaması bulunur.
Master: Start/Stop komutlarıyla veri transferini başlatır. Saat darbesini üretir. Slave adresini transfer eder. Veri transferinin yönünü belirler. Slave : Sadece adreslendiği zaman yanıt verir. Zamanlama, clock hattı ile kontrol edilir.
SPI (Serial Peripheral Interface Bus) Motorola tarafından geliştirilmiştir. Önceki protokollerden farklı olarak aynı anda hem veri gönderimine hem de alımına izin vermektedir (full-duplex). Master-slave çalışma şekli bu protokol için de geçerlidir. CS : Chip Select SCKL : Clock SDI : Serial Data Input SDO : Serial Data Output
SS : SlaveSelect SCKL : Serial Clock MOSI : Master Out, Slave In MISO : Master In, Slave Out
Sistemde bir tane master ve çok sayıda slave mevcuttur. Full-dublex iletişim sadece seçili olan slave ile master arasında gerçekleşir.