Anasayfa » Arduino – Haberleşme protokolleri – i2c – SDA, SCL – Robotik Kodla – 79 –

Arduino – Haberleşme protokolleri – i2c – SDA, SCL – Robotik Kodla – 79 –

i2c_79

Arduino – Haberleşme protokolleri – i2c – SDA, SCL hakkında detaylara yer vereceğiz.

Daha önceki yazılarımızda UART ve SPi haberleşmelere değinmiştik.

Arduino, diğer Arduino veya sensörlerle haberleşmek için bazı haberleşme protokolleri kullanır. Bu protokollerden birisi de I2C’dir. I2C (Inter-Integrated Circuit), seri haberleşme türlerinden senkron haberleşmeye bir örnektir. Haberleşme için toprak hattı dışında SDA ve SCL olmak üzere iki hatta ihtiyaç duyulmaktadır. Hat sayısının fazla olması nedeniyle, uzun mesafeli haberleşmelerde tercih edilmez. Genellikle kısa mesafeli ve düşük veri aktarım hızının yeterli olduğu yerlerde kullanılır.

I2C haberleşmesinde, haberleşmeyi kontrol eden master cihazı bulunur. Her haberleşmede bir tane master bulunmalıdır. Haberleşmenin sağlanabilmesi için haberleşme hattına en az bir adet slave (köle) cihaz bağlanmalıdır. Hatta bağlanan birden fazla slave cihazlardan hangisinin veri aktaracağına, master cihaz karar verir. Böylece hat sayısında bir değişiklik olmadan birden fazla cihazla haberleşme sağlanır.

i2c

Master ve slave cihazların aynı besleme hattına bağlanmasına gerek yoktur. Fakat iletişimin sağlanması için toprak hatlarının aynı olması gerekir. Bunun yanında veri aktarımı için SDA (Serial Data Line) ve SCL (Serial Clock) olmak üzere iki adet haberleşme hattı bulunur. Bu hatlardan SDA, cihazlar arasındaki veri aktarımının sağlandığı hattır. Bu hatta çift yönlü veri aktarımı olur. Hatta aktarılan verilerin senkronizasyonu, SCL hattı tarafından gerçekleştirilir. SCL hattında master cihaz tarafından üretilen saat sinyali bulunur. SDA hattındaki haberleşme, bu sinyale göre düzenlenir.

Haberleşmenin tüm hat boyunca hatasız bir şekilde sağlanabilmesi için SDA ve SCL hatları, pull-up dirençlerle VCC hattına bağlanmalıdır. SDA ve SCL pinleri, kullanılan Arduino türüne göre değişiklik göstermektedir. Arduino türlerine göre SDA ve SCL pinleri aşağıdaki tabloda gösterilmiştir.

Arduino türü SDA pini SCL pini
Arduino Uno A4 A5
Arduino Mega 20 21
Arduino Leonardo 2 3
Arduino Due 20 21
Arduino Nano A4 A5

Örnek olarak 3 adet i2c modülüne sahip ekranları tek bir arduino ile kontrol edeceğiz.

i2c_lcd_şema



//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı i2c Kodları - kullanımı örnek Kodları

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
LiquidCrystal_I2C lcd_4(0x27,20,4);
int pot = A0;
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
int sayac=0;


void setup()
{
  
  lcd.init();       
  lcd.backlight();
  lcd.setCursor(1,0);
  lcd.print("Merhaba 2x16");
  lcd.setCursor(6,1);
  lcd.print("GiT");
  delay(2000);
  lcd.clear();


  lcd_4.init();       
  lcd_4.backlight();
  lcd_4.setCursor(3,0);
  lcd_4.print("Merhaba 4x20");
  lcd_4.setCursor(8,1);
  lcd_4.print("GiT");
  delay(2000);
  lcd_4.clear();



display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(2,20);
display.println("Merhaba");
display.display();
delay(4000);

  
  
}


void loop()
{

int pot_dgr = analogRead(pot);

  lcd.clear();
  lcd.setCursor(1,0);
 // lcd.autoscroll();
  lcd.print("EKRAN TEST 2X16");
  lcd.setCursor(6,1);
  lcd.print(pot_dgr*2);
  delay(1000);
  

  lcd_4.clear();
  lcd_4.setCursor(1,0);
 // lcd.autoscroll();
  lcd_4.print("EKRAN TEST 4 X 20");
  lcd_4.setCursor(8,1);
  lcd_4.print(pot_dgr);
  lcd_4.setCursor(4,2);
  lcd_4.print("KONTROL i2C");
   lcd_4.setCursor(8,3);
  lcd_4.print("0x27");

  
  delay(1000);


display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(3);
display.setCursor(2,10);
display.println("Merhaba");


for(int i=0;i<10;i++)
{
sayac++;
display.setTextSize(3);
display.setCursor(60,45);
display.println(sayac);

display.display();
delay(250);
display.clearDisplay();
}

 
  
 

}

Videoyu İzlemek İçin Tıklayınız

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir