ທັງ ໝົດ ກ່ຽວກັບລົດເມ Arduino I2C

ລົດເມ Arduino I2C

ຂອບກົດລະບຽບ Arduino ສາມາດສ້າງໂຄງການເປັນ ຈຳ ນວນຫລວງຫລາຍ ຄືກັບທີ່ທ່ານໄດ້ເຫັນຖ້າທ່ານອ່ານ Hwlibre, ການຂຽນໂປແກຼມ microcontroller ດ້ວຍວິທີງ່າຍໆ. ແຕ່ໃນບັນດາການເຊື່ອມຕໍ່ແບບອະນາຄົດແລະດິຈິຕອນຂອງກະດານຮາດແວເສລີນີ້, ຍັງມີບາງອັນທີ່ຍັງບໍ່ທັນຮູ້ຈັກກັບຜູ້ເລີ່ມຕົ້ນຫຼາຍຢ່າງ, ເຊັ່ນວ່າທ່າແຮງທີ່ແທ້ຈິງຂອງການເຊື່ອມຕໍ່ PWM, SPI, RX ແລະ TX pins ຂອງພອດ serial, ຫຼື ລົດເມ I2C ເປັນເຈົ້າຂອງ. ເພາະສະນັ້ນ, ກັບການເຂົ້ານີ້ທ່ານຢ່າງ ໜ້ອຍ ກໍ່ສາມາດຮູ້ທຸກຢ່າງທີ່ທ່ານຕ້ອງການຈາກ I2C.

ຂອບກົດລະບຽບ ລົດເມ I2C ທ່ານສາມາດເຊື່ອມຕໍ່ແລະ ນຳ ໃຊ້ອຸປະກອນຂອງບຸກຄົນທີສາມທີ່ມີໂປໂຕຄອນແບບນີ້ເພື່ອສື່ສານກັບກະດານ Arduino. ລະຫວ່າງພວກມັນ, ທ່ານສາມາດເຊື່ອມຕໍ່ອຸປະກອນເສີມ, ການສະແດງ, ວຽກງານຕ້ານການ, ເຂັມທິດ, ແລະວົງຈອນປະສົມປະສານຫຼາຍອີກຍ້ອນການປະດິດສ້າງຂອງ Philips.

I2C ແມ່ນຫຍັງ?

I2C ໝາຍ ເຖິງວົງຈອນປະສົມປະສານລະຫວ່າງກັນ, ນັ້ນແມ່ນ, ວົງຈອນປະສົມປະສານລະຫວ່າງກັນ. ມັນແມ່ນລົດເມການສື່ສານຂໍ້ມູນຂ່າວສານທີ່ໄດ້ຮັບການພັດທະນາໃນປີ 1982 ໂດຍບໍລິສັດ Philips Semiconductors, ເຊິ່ງມື້ນີ້ແມ່ນ NXP Semiconductors ຫຼັງຈາກໄດ້ ກຳ ຈັດພາກນີ້. ໃນຕອນ ທຳ ອິດມັນຖືກສ້າງຂື້ນ ສຳ ລັບໂທລະພາບຂອງແບນີ້, ເພື່ອສື່ສານຊິບພາຍໃນຫລາຍໆຢ່າງໃນແບບ ທຳ ມະດາ. ແຕ່ວ່ານັບແຕ່ປີ 1990 I2C ໄດ້ແຜ່ຂະຫຍາຍແລະຖືກ ນຳ ໃຊ້ໂດຍຜູ້ຜະລິດຫຼາຍຄົນ.

ປະຈຸບັນຖືກ ນຳ ໃຊ້ໂດຍຜູ້ຜະລິດຊິບເຊັດຫຼາຍສິບຄົນ ສຳ ລັບຫລາຍ ໜ້າ ທີ່. Atmel, ຜູ້ສ້າງ microcontrollers ສຳ ລັບກະດານ Arduino, ໄດ້ແນະ ນຳ ການອອກແບບແບບ TWI (Two Wired Interface) ເພື່ອຈຸດປະສົງໃນການອອກໃບອະນຸຍາດ, ເຖິງແມ່ນວ່າມັນຄ້າຍຄືກັບ I2C. ແຕ່ໃນປີ 2006, ສິດທິບັດຕົ້ນສະບັບ ໝົດ ອາຍຸແລະບໍ່ມີລິຂະສິດອີກຕໍ່ໄປ, ສະນັ້ນ ຄຳ ສັບ I2C ໄດ້ຖືກ ນຳ ໃຊ້ຄືນ ໃໝ່ (ພຽງແຕ່ໂລໂກ້ຍັງສືບຕໍ່ໄດ້ຮັບການປົກປ້ອງ, ແຕ່ວ່າການປະຕິບັດຫຼືການ ນຳ ໃຊ້ ຄຳ ສັບນີ້ບໍ່ ຈຳ ກັດ).

ລາຍລະອຽດດ້ານເຕັກນິກລົດເມ I2C

ລົດເມ I2C

El ລົດເມ I2C ໄດ້ກາຍເປັນມາດຕະຖານອຸດສາຫະ ກຳ, ແລະ Arduino ໄດ້ຈັດຕັ້ງປະຕິບັດ ສຳ ລັບການສື່ສານກັບອຸປະກອນເສີມທີ່ຕ້ອງການ. ມັນຕ້ອງການພຽງແຕ່ສອງສາຍຫລືສາຍໄຟ ສຳ ລັບການປະຕິບັດງານຂອງມັນ, ໜຶ່ງ ເສັ້ນທາງສັນຍານໂມງ (CLK) ແລະອີກເສັ້ນ ໜຶ່ງ ສຳ ລັບການສົ່ງຂໍ້ມູນ serial (SDA). ນີ້ແມ່ນປະໂຫຍດເມື່ອທຽບກັບການສື່ສານອື່ນໆເມື່ອທຽບໃສ່ລົດເມ SPI, ເຖິງແມ່ນວ່າການປະຕິບັດງານຂອງມັນມີຄວາມຊັບຊ້ອນຫລາຍຂື້ນຍ້ອນການໃຊ້ວົງຈອນເພີ່ມເຕີມ.

ຢູ່ເທິງລົດເມນີ້ ແຕ່ລະອຸປະກອນທີ່ເຊື່ອມຕໍ່ກັບມັນມີທີ່ຢູ່ ໃຊ້ໃນການເຂົ້າເຖິງອຸປະກອນເຫຼົ່ານີ້ສ່ວນບຸກຄົນ. ທີ່ຢູ່ນີ້ຖືກແກ້ໄຂໂດຍຮາດແວ, ແກ້ໄຂ 3 ສ່ວນສຸດທ້າຍໂດຍເຄື່ອງໂດດຫລືປ່ຽນ DIP, ເຖິງແມ່ນວ່າມັນຍັງສາມາດເຮັດໄດ້ໂດຍຊອບແວ. ແຕ່ລະອຸປະກອນຈະມີທີ່ຢູ່ທີ່ເປັນເອກະລັກ, ເຖິງແມ່ນວ່າຫຼາຍໆມັນອາດຈະມີທີ່ຢູ່ດຽວກັນແລະມັນອາດຈະ ຈຳ ເປັນຕ້ອງໃຊ້ລົດເມຂັ້ນສອງເພື່ອຫລີກລ້ຽງການຂັດແຍ້ງຫລືປ່ຽນມັນຖ້າເປັນໄປໄດ້

ນອກຈາກນັ້ນ, ລົດເມ I2C ຍັງມີ ສະຖາປັດຕະຍະ ກຳ ປະເພດ Master-Slave, ນັ້ນແມ່ນ, ແມ່ບົດຂ້າໃຊ້. ນີ້ຫມາຍຄວາມວ່າເມື່ອການສື່ສານເລີ່ມຕົ້ນໂດຍອຸປະກອນຕົ້ນສະບັບ, ມັນຈະສາມາດສົ່ງຫຼືຮັບຂໍ້ມູນຈາກຂ້າທາດຂອງມັນ. ຂ້າໃຊ້ຈະບໍ່ສາມາດລິເລີ່ມການສື່ສານໄດ້, ພຽງແຕ່ນາຍຊ່າງສາມາດເຮັດໄດ້ແລະທັງຂ້າໃຊ້ຍັງບໍ່ໄດ້ເວົ້າລົມກັນໂດຍກົງໂດຍບໍ່ມີການແຊກແຊງຂອງນາຍ.

ຖ້າທ່ານມີ ຄູອາຈານຫຼາຍຄົນຢູ່ເທິງລົດເມ, ມີພຽງຄົນດຽວທີ່ສາມາດເຮັດ ໜ້າ ທີ່ເປັນອາຈານພ້ອມໆກັນ. ແຕ່ມັນກໍ່ບໍ່ຄຸ້ມຄ່າ, ເພາະວ່າການປ່ຽນແປງຂອງຄູຕ້ອງມີຄວາມສັບສົນສູງ, ສະນັ້ນມັນບໍ່ຄ່ອຍຈະມີເລື້ອຍໆ.

ຮັກສາຢູ່ໃນໃຈວ່າ ຕົ້ນສະບັບໃຫ້ສັນຍານໂມງເພື່ອຊິງອຸປະກອນທັງ ໝົດ ໃນລົດເມ. ນັ້ນ ກຳ ຈັດຄວາມ ຈຳ ເປັນຂອງຂ້າໃຊ້ແຕ່ລະຄົນໃຫ້ມີໂມງຂອງຕົນເອງ.

ອະນຸສັນຍາລົດເມ I2C ຍັງໄດ້ເຫັນລ່ວງ ໜ້າ ເຖິງການໃຊ້ຕົວຕ້ານທານດຶງໃນສາຍແຮງດັນ (Vcc), ເຖິງແມ່ນວ່າຕົວຕ້ານທານເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກ ນຳ ໃຊ້ກັບ Arduino ໂດຍ pull-up ເພາະວ່າຫ້ອງສະຫມຸດການຂຽນໂປແກຼມ ໃນຖານະເປັນລວດກະຕຸ້ນພາຍໃນດ້ວຍຄ່າ 20-30 k. ນີ້ອາດຈະອ່ອນເກີນໄປ ສຳ ລັບບາງໂຄງການ, ດັ່ງນັ້ນຂອບເຂດຂອງສັນຍານຈະຊ້າລົງ, ສະນັ້ນຄວາມໄວຕ່ ຳ ແລະໄລຍະຫ່າງຂອງການສື່ສານທີ່ສັ້ນກວ່າສາມາດໃຊ້ໄດ້. ເພື່ອແກ້ໄຂວ່າທ່ານອາດ ຈຳ ເປັນຕ້ອງວາງຕົວຕ້ານທານທີ່ດຶງຈາກພາຍນອກຈາກ 1k ເຖິງ 4k7.

ສັນຍານ

ສັນຍານ I2C

 

La ກອບການສື່ສານ ໃນນັ້ນສັນຍານລົດເມ I2C ປະກອບດ້ວຍບິດຫຼືລັດຕ່າງໆ (ເຄື່ອງທີ່ໃຊ້ໃນ Arduino, ນັບຕັ້ງແຕ່ມາດຕະຖານ I2C ອະນຸຍາດໃຫ້ຄົນອື່ນ):

  • 8 ບາດ, 7 ຂອງມັນ ທິດທາງ ຂອງອຸປະກອນ ສຳ ລອງທີ່ທ່ານຕ້ອງການເຂົ້າເຖິງເພື່ອສົ່ງຫຼືຮັບຂໍ້ມູນຈາກມັນ. ດ້ວຍ 7 ບາດ, ສາມາດສ້າງໄດ້ເຖິງ 128 ທີ່ຢູ່ທີ່ແຕກຕ່າງກັນ, ດັ່ງນັ້ນ 128 ອຸປະກອນສາມາດເຂົ້າເຖິງທາງທິດສະດີ, ແຕ່ສາມາດເຂົ້າເຖິງໄດ້ພຽງ 112 ເຄື່ອງເທົ່ານັ້ນ, ເພາະ 16 ໂຕຖືກສະຫງວນໄວ້ໃນການ ນຳ ໃຊ້ພິເສດ. ແລະບິດເພີ່ມເຕີມທີ່ບົ່ງບອກຖ້າທ່ານຕ້ອງການ ສົ່ງຫລືຮັບ ຂໍ້ມູນຂ່າວສານອຸປະກອນສໍາລອງ.
  • ຍັງມີຢູ່ ນ້ອຍຄວາມຖືກຕ້ອງ, ຖ້າມັນບໍ່ມີການເຄື່ອນໄຫວ, ການສື່ສານຈະບໍ່ຖືກຕ້ອງ.
  • ຈາກນັ້ນ bytes ຂໍ້ມູນ ວ່າພວກເຂົາຕ້ອງການສົ່ງຫລືຮັບໂດຍພວກຂ້າທາດ. ແຕ່ລະໄບຕ໌, ຕາມທີ່ທ່ານຮູ້, ແມ່ນປະກອບດ້ວຍ 8 ບິດ. ໃຫ້ສັງເກດວ່າ ສຳ ລັບທຸກໆຂໍ້ມູນ 8 ບິດຫລື 1 ໄບຕ໌ທີ່ສົ່ງຫຼືໄດ້ຮັບ, ຕ້ອງມີການກວດສອບຄວາມຖືກຕ້ອງ, ທີ່ຢູ່ແລະອື່ນໆອີກ 18 ບິດ, ນັ້ນ ໝາຍ ຄວາມວ່າລົດເມມີຄວາມໄວ ຈຳ ກັດຫຼາຍ.
  • ເປັນບິດສຸດທ້າຍຂອງ ຄວາມຖືກຕ້ອງ ຂອງ comunication ໄດ້.

ນອກຈາກນັ້ນ, ຄວາມຖີ່ຂອງໂມງ ສຳ ລັບ ລະບົບສາຍສົ່ງແມ່ນ 100 Mhz ເປັນມາດຕະຖານ, ເຖິງແມ່ນວ່າມີຮູບແບບທີ່ໄວກວ່າທີ່ 400 Mhz.

ຂໍ້ດີແລະຂໍ້ເສຍຂອງລົດເມ I2C

ໄດ້ ປະໂຫຍດ ພວກເຂົາແມ່ນ:

  • ຄວາມລຽບງ່າຍ ໂດຍໃຊ້ສອງເສັ້ນເທົ່ານັ້ນ.
  • ມັນມີ ກົນໄກທີ່ຈະຮູ້ວ່າສັນຍານໄດ້ມາເຖິງ ເມື່ອປຽບທຽບກັບອະນຸສັນຍາການສື່ສານອື່ນໆ.

ໄດ້ ຂໍ້ເສຍປຽບ ພວກເຂົາແມ່ນ:

  • ຄວາມໄວ ລະບົບສາຍສົ່ງຕ່ ຳ ທີ່ຂ້ອນຂ້າງ.
  • ມັນບໍ່ແມ່ນຊ້ ຳ ຊ້ອນເຕັມ, ນັ້ນແມ່ນ, ທ່ານບໍ່ສາມາດສົ່ງແລະຮັບພ້ອມກັນ.
  • ບໍ່ໃຊ້ຄວາມສະ ເໝີ ພາບ ຫຼືກົນໄກການກວດສອບປະເພດອື່ນໆທີ່ຈະຮູ້ວ່າຂໍ້ມູນທີ່ໄດ້ຮັບບໍ່ຖືກຕ້ອງ.

 

 

I2C ກ່ຽວກັບ Arduino

ລົດເມ Arduino I2C

En Arduino, ຂື້ນກັບຕົວແບບ, ເຂັມທີ່ສາມາດເປີດ ນຳ ໃຊ້ລົດເມ I2C ນີ້ແຕກຕ່າງກັນ. ຍົກ​ຕົວ​ຢ່າງ:

  • Arduino UNO, ນາໂນ, Mini Pro: A4 ແມ່ນໃຊ້ ສຳ ລັບ SDA (ຂໍ້ມູນ) ແລະ A5 ສຳ ລັບ SCK (ໂມງ).
  • Arduino Mega: pin 20 ສຳ ລັບ SDA ແລະ 21 ສຳ ລັບ SCK.

ຈົ່ງຈື່ໄວ້ວ່າການໃຊ້ມັນທ່ານຕ້ອງ ນຳ ໃຊ້ຫ້ອງສະມຸດ ລວດ. ລ ສຳ ລັບລະຫັດລະຫັດ Arduino IDE ຂອງທ່ານ, ເຖິງແມ່ນວ່າຈະມີແບບອື່ນໆ I2C y I2Cdevlib. ທ່ານສາມາດອ່ານເອກະສານຂອງຫໍສະ ໝຸດ ເຫຼົ່ານີ້ຫລືບົດຂຽນຂອງພວກເຮົາກ່ຽວກັບໂຄງການຕ່າງໆທີ່ທ່ານສົນໃຈທີ່ຈະໄດ້ຮັບລະຫັດວ່າມັນຈະຖືກຈັດເປັນໂຄງການແນວໃດ.

ວິທີການຮູ້ທີ່ຢູ່ຂອງອຸປະກອນທີ່ຈະໃຊ້ກັບ I2C?

ພຽງແຕ່ ໜຶ່ງ ຄຳ ເຕືອນສຸດທ້າຍ, ແລະນັ້ນກໍ່ແມ່ນວ່າເມື່ອທ່ານຊື້ ICs ຈາກຜູ້ຜະລິດເອີຣົບ, ຍີ່ປຸ່ນຫຼືອາເມລິກາ, ທ່ານ ຊີ້ບອກທິດທາງ ທ່ານຄວນຈະໃຊ້ ສຳ ລັບອຸປະກອນ. ໃນທາງກົງກັນຂ້າມ, ຄົນຈີນບາງຄັ້ງກໍ່ບໍ່ໄດ້ແຈ້ງລາຍລະອຽດຫຼືມັນບໍ່ຖືກຕ້ອງ, ສະນັ້ນມັນຈະບໍ່ເປັນຜົນ. ນັ້ນສາມາດແກ້ໄຂໄດ້ງ່າຍດ້ວຍເຄື່ອງສະແກນທີ່ຢູ່ເພື່ອຮູ້ທິດທາງທີ່ທ່ານຄວນອ້າງອີງໃສ່ແຜນວາດຂອງທ່ານ.

La ຊຸມຊົນ arduino ໄດ້ສ້າງສິ່ງນີ້ ລະຫັດເພື່ອສະແກນທີ່ຢູ່ແລະລະບຸມັນ ດ້ວຍວິທີງ່າຍໆ. ເຖິງແມ່ນວ່າຂ້ອຍຈະສະແດງລະຫັດຢູ່ທີ່ນີ້:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


ເນື້ອໃນຂອງບົດຂຽນຍຶດ ໝັ້ນ ຫລັກການຂອງພວກເຮົາ ຈັນຍາບັນຂອງບັນນາທິການ. ເພື່ອລາຍງານການກົດຜິດພາດ ທີ່ນີ້.

ເປັນຄົນທໍາອິດທີ່ຈະໃຫ້ຄໍາເຫັນ

ອອກ ຄຳ ເຫັນຂອງທ່ານ

ທີ່ຢູ່ອີເມວຂອງທ່ານຈະບໍ່ໄດ້ຮັບການຈັດພີມມາ. ທົ່ງນາທີ່ກໍານົດໄວ້ແມ່ນຫມາຍດ້ວຍ *

*

*

  1. ຮັບຜິດຊອບຕໍ່ຂໍ້ມູນ: Miguel ÁngelGatón
  2. ຈຸດປະສົງຂອງຂໍ້ມູນ: ຄວບຄຸມ SPAM, ການຈັດການ ຄຳ ເຫັນ.
  3. ກົດ ໝາຍ: ການຍິນຍອມຂອງທ່ານ
  4. ການສື່ສານຂໍ້ມູນ: ຂໍ້ມູນຈະບໍ່ຖືກສື່ສານກັບພາກສ່ວນທີສາມຍົກເວັ້ນໂດຍພັນທະທາງກົດ ໝາຍ.
  5. ການເກັບຂໍ້ມູນ: ຖານຂໍ້ມູນທີ່ຈັດໂດຍ Occentus Networks (EU)
  6. ສິດ: ໃນທຸກເວລາທີ່ທ່ານສາມາດ ຈຳ ກັດ, ກູ້ຄືນແລະລຶບຂໍ້ມູນຂອງທ່ານ.