Arduino I2C 버스에 관한 모든 것

Arduino I2C 버스

Arduino는 많은 수의 프로젝트를 만들 수 있습니다. Hwlibre를 읽으면 보셨 듯이 간단한 방법으로 마이크로 컨트롤러 프로그래밍. 하지만 이 보드의 아날로그와 디지털 연결 사이에는 hardware libre, PWM 연결, SPI, 직렬 포트의 RX 및 TX 핀 또는 I2C 버스 자체의 진정한 잠재력과 같이 많은 초보자에게 아직 다소 알려지지 않은 것들이 있습니다. 따라서 이 항목을 통해 최소한 I2C에 대해 필요한 모든 것을 알 수 있습니다.

I2C 버스 이러한 유형의 프로토콜이있는 많은 타사 장치를 연결하고 사용하여 Arduino 보드와 통신 할 수 있습니다. 이 필립스 발명 덕분에 가속도계, 디스플레이, 카운터, 나침반 및 더 많은 집적 회로를 연결할 수 있습니다.

I2C 란 무엇입니까?

I2C는 Inter-Integated Circuit을 나타냅니다.즉, 통합 회로입니다. 1982 년 Philips Semiconductors 사가 개발 한 직렬 데이터 통신 버스로,이 부분을 없앤 현재 NXP Semiconductors입니다. 처음에는이 브랜드의 TV를 위해 여러 내부 칩을 간단한 방식으로 전달하기 위해 만들어졌습니다. 그러나 1990 년 이후 I2C는 널리 보급되어 많은 제조업체에서 사용하고 있습니다.

현재 수십 개의 칩 제조업체에서 사용 여러 기능을 위해. Arduino 보드 용 마이크로 컨트롤러를 만든 Atmel은 I2C와 동일하지만 라이센스 이유로 TWI (Two Wired Interface) 지정을 도입했습니다. 그러나 2006 년에 원래 특허가 만료되어 더 이상 저작권이 적용되지 않으므로 I2C라는 용어가 재사용되었습니다 (로고 만 계속 보호되지만 해당 용어의 구현 또는 사용은 제한되지 않음).

I2C 버스 기술 세부 사항

I2C 버스

El I2C 버스는 산업 표준이되었고 Arduino는이를 구현했습니다. 필요한 주변 장치와의 통신을 위해. 작동을 위해 두 개의 라인 또는 케이블 만 필요합니다. 하나는 클럭 신호 (CLK) 용이고 다른 하나는 직렬 데이터 (SDA) 전송 용입니다. 이는 SPI 버스에 비해 다른 통신에 비해 유리하지만 추가 회로가 필요하기 때문에 작동이 다소 복잡합니다.

이 버스에서 연결된 각 장치에는 주소가 있습니다. 이러한 장치에 개별적으로 액세스하는 데 사용됩니다. 이 주소는 하드웨어에 의해 고정되며 점퍼 또는 스위치 DIP를 통해 마지막 3 비트를 수정하지만 소프트웨어로도 수행 할 수 있습니다. 여러 장치가 동일한 주소를 가질 수 있지만 각 장치에는 고유 한 주소가 있으며 충돌을 방지하거나 가능하면 변경하기 위해 보조 버스를 사용해야 할 수 있습니다.

또한 I2C 버스에는 마스터-슬레이브 유형 아키텍처, 즉, 마스터-슬레이브입니다. 이것은 통신이 마스터 장치에 의해 시작될 때 슬레이브에서 데이터를 보내거나받을 수 있음을 의미합니다. 슬레이브는 통신을 시작할 수없고 마스터 만 할 수 있으며 마스터의 개입 없이는 슬레이브가 서로 직접 대화 할 수 없습니다.

가지고 있다면 버스의 여러 교사, 한 사람 만 동시에 교사 역할을 할 수 있습니다. 그러나 교사의 변화는 높은 복잡성을 요구하기 때문에 그만한 가치가 없으므로 빈번하지 않습니다.

명심하십시오 마스터는 버스의 모든 장치를 동기화하는 클럭 신호를 제공합니다.. 따라서 각 노예가 자신의 시계를 가질 필요가 없습니다.

I2C 버스 프로토콜은 또한 공급 전압 라인 (Vcc)에서 풀업 저항의 사용을 예측하지만 이러한 저항은 일반적으로 Arduino와 함께 사용되지 않습니다. 프로그래밍 라이브러리 때문에 풀업 와이어는 20-30k의 값으로 내부를 활성화합니다. 일부 프로젝트에서는 너무 부드러울 수 있으므로 신호의 상승 에지가 느려져서 더 낮은 속도와 더 짧은 통신 거리를 사용할 수 있습니다. 이를 수정하려면 외부 풀업 저항을 1k에서 4k7로 설정해야 할 수 있습니다.

신호

I2C 신호

La 통신 프레임 그중 I2C 버스 신호는 비트 또는 상태로 구성됩니다 (I2C 표준이 다른 것을 허용하기 때문에 Arduino에서 사용되는 것).

  • 8 비트, 7 개 주소 데이터를 송수신하기 위해 액세스하려는 슬레이브 장치의. 7 비트를 사용하면 최대 128 개의 서로 다른 주소를 만들 수 있으므로 이론적으로 128 개의 장치에 액세스 할 수 있지만 112 개는 특수 용도로 예약되어 있으므로 16 개만 액세스 할 수 있습니다. 그리고 원하는지 나타내는 추가 비트 보내거나 받다 슬레이브 장치 정보.
  • 또한 거기에 검증 비트, 활성화되어 있지 않으면 통신이 유효하지 않습니다.
  • 그런 다음 데이터 바이트 그들은 노예에 의해 보내거나 받기를 원합니다. 아시다시피 각 바이트는 8 비트로 구성됩니다. 8 비트 또는 1 바이트의 데이터를 송수신 할 때마다 추가로 18 비트의 유효성 검사, 주소 등이 필요하므로 버스의 속도가 매우 제한됩니다.
  • 마지막 비트 검증 의사 소통의.

또한 전송은 표준으로 100Mhz이며, 400Mhz에서 더 빠른 모드가 있지만.

I2C 버스의 장단점

라스 장점들 위치 :

  • 단순성 두 줄만 사용하면됩니다.
  • 그것은 신호가 도착했는지 알 수있는 메커니즘 다른 통신 프로토콜과 비교됩니다.

라스 단점 위치 :

  • 속도 상당히 낮은 전송.
  • 전이중이 아닙니다.즉, 동시에 보내고받을 수 없습니다.
  • 패리티를 사용하지 않습니다. 수신 된 데이터 비트가 올바른지 알 수있는 다른 유형의 검증 메커니즘도 없습니다.

Arduino의 I2C

Arduino I2C 버스

En 모델에 따라 Arduino,이 I2C 버스를 사용하도록 활성화 할 수있는 핀은 다양합니다. 예를 들면 :

  • Arduino UNO, 나노, 미니 프로: A4는 SDA (데이터), A5는 SCK (시계)에 사용됩니다.
  • 아두 이노 메가: SDA 용 핀 20, SCK 용 핀 21.

그것을 사용하려면 반드시 도서관을 활용하다 와이어.h Arduino IDE 코드에 대해 I2C y i2cdevlib. 이 라이브러리의 문서 또는 관심있는 프로젝트에 대한 기사를 읽고 프로그래밍 방법에 대한 코드를 얻을 수 있습니다.

I2C와 함께 사용할 장치의 주소를 아는 방법은 무엇입니까?

마지막 경고는 유럽, 일본 또는 미국 제조업체에서 IC를 구매할 때 방향을 표시 장치에 사용해야합니다. 다른 한편으로, 중국인은 때때로 그것을 자세히 설명하지 않거나 정확하지 않아 작동하지 않습니다. 스케치에서 참조해야하는 방향을 알기 위해 주소 스캐너로 쉽게 해결할 수 있습니다.

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 Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.