MasterWriter

Bazen, sorumlu millet sadece ne zaman susmak bilmiyorum! Bazı durumlarda, birbirleriyle bilgi paylaşmak için iki (veya daha fazla!) Arduino veya Genuino kartı kurmak yardımcı olabilir. Bu örnekte, iki kart I2C senkron seri protokolü aracılığıyla bir Master Writer / Slave Receiver yapılandırmasında birbirleriyle iletişim kuracak şekilde programlanmıştır. Bunu başarmak için Arduino'nun Tel Kütüphanesi'nin çeşitli fonksiyonları kullanılmaktadır. Master Arduino 1, benzersiz bir şekilde ele alınmış bir Slave'e her yarım saniyede bir 6 bayt veri gönderecek şekilde programlanmıştır. Bu mesaj alındıktan sonra, Arduino Yazılımını (IDE) çalıştıran USB bağlantılı bilgisayarda açılan Slave kartının seri monitör penceresinde görüntülenebilir.

I2C protokolü veri göndermek ve almak için iki hat kullanılmasını içerir: Arduino veya Genuino Master kartının düzenli aralıklarla attığı bir seri saat pimi (SCL) ve iki cihaz arasında verinin gönderildiği bir seri veri pimi (SDA) . Saat çizgisi alçaktan yükseğe değiştiğinde (saat darbesinin yükselen kenarı olarak bilinir), belirli bir cihazın adresini ve aa komutunu veya verilerini sırayla oluşturacak olan tek bir bilgi biti karttan SDA hattı üzerinden I2C cihazı. Bu bilgiler - bit bitinden sonra - gönderildiğinde, çağrılan cihaz isteği yürütür ve gerekirse, zamanlama olarak SCL'de Master tarafından üretilen saat sinyalini kullanarak aynı satır üzerinden verilerini geri gönderir. Master'dan Köleler'e ilk sekiz bit (yani sekiz saat darbesi), Master'ın veri istediği cihazın adresini içerir. Sonrasındaki bitler, Slave'de Master'ın veri okumak veya veri yazmak istediği bellek adresini ve varsa yazılacak verileri içerir.

Her Slave cihazının kendine özgü bir adresi olmalıdır ve hem master hem de slave cihazların aynı veri hattı hattı üzerinden sırayla iletişim kurması gerekir. Bu şekilde, Arduino veya Genuino kartlarınızın, her bir cihazın benzersiz adresini kullanarak mikrodenetleyicinizin yalnızca iki pimini kullanarak birçok cihazla veya diğer kartlarla iletişim kurması mümkündür.

Gerekli Donanım

  • 2 Arduino veya Genuino Kartı
  • bağlantı telleri

Devre

Ana Arduino üzerindeki pim 5'i (saat veya SCL, pim) ve pim 4'ü (veri veya SDA, pim) köle kartındaki muadillerine bağlayın. Her iki kartın da ortak bir zemini paylaştığından emin olun. Seri iletişimi etkinleştirmek için, bağımlı Arduino'nun bilgisayarınıza USB ile bağlı olması gerekir.

Kartlara bağımsız olarak güç vermek bir sorun teşkil ediyorsa, Master'ın 5V çıkışını slave üzerindeki VIN pinine bağlayın.

Şematik

Kod


// Wire Master Writer
// by Nicholas Zambetti 

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.


#include 

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
}

byte x = 0;

void loop()
{
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("x is ");        // sends five bytes
  Wire.write(x);              // sends one byte  
  Wire.endTransmission();    // stop transmitting

  x++;
  delay(500);
}
 // Wire Slave Receiver // by Nicholas Zambetti // Demonstrates use of the Wire library // Receives data as an I2C/TWI slave device // Refer to the "Wire Master Writer" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include void setup() { Wire.begin(4); // join i2c bus with address #4 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(1 < Wire.available()) // loop through all but the last { char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x); // print the integer }  // Wire Slave Receiver // by Nicholas Zambetti // Demonstrates use of the Wire library // Receives data as an I2C/TWI slave device // Refer to the "Wire Master Writer" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include void setup() { Wire.begin(4); // join i2c bus with address #4 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(1 < Wire.available()) // loop through all but the last { char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x); // print the integer }  // Wire Slave Receiver // by Nicholas Zambetti // Demonstrates use of the Wire library // Receives data as an I2C/TWI slave device // Refer to the "Wire Master Writer" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include void setup() { Wire.begin(4); // join i2c bus with address #4 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(1 < Wire.available()) // loop through all but the last { char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x); // print the integer } 

See Also