PCF8574 : Arduino 용 I2C I / O 확장기 정보

PCF8574 TI 칩

당신은 확실히 들었습니다 PCF8574 IC, 별도로 구매하거나 다른 많은 모듈과 같이 이미 모듈에 장착 된 칩 전자 부품 Arduino 보드와의 통합을 용이하게합니다. 이 경우에 대한 입력 및 출력의 확장기입니다. I2C 버스.

Arduino가 이미 자체적으로 통합 I2C 버스, 그리고 그것은 사실입니다. 그러나 PCF8574는 해당 버스를 개발 보드의 한계를 넘어 확장하는 데 도움이 될 수 있으며, 이는 Arduino가 제공하는 것 이상을 필요로하는 일부 제조업체에게 큰 도움이 될 수 있습니다.

I2C 버스는 무엇입니까?

Arduino UNO 밀리 함수

I2C라는 이름은 내부 집적 회로 또는 통합 회로. 버전 1.0은 1992 년에 Philips가 만들었습니다. 그런 다음 두 번째 2.1이 2000 년에 나오고 현재는 특허가 100 년에 만료되어 자유롭게 사용할 수있을 때 표준 (최대 3.4Mbit / s까지 허용되지만 2006kbit / s에서)이되었습니다.

현재 업계에서 널리 사용됩니다. 커뮤니케이션을 위해, 또한 하나의 IC에 통합 된 서로 다른 마이크로 컨트롤러 및 주변 장치를 통신하는 프로젝트에 대해 제조업체에서 매우 높이 평가합니다.

El I2C는 버스입니다 잘 알려진 직렬 통신. 두 채널 만있는 동기식 통신 프로토콜을 사용합니다 (세 번째 채널이 있지만 참조 또는 GND에 연결됨). 실제로 TWI (Two Wire Interface)라고도합니다.

  • 시계 (SCL) 용.
  • 데이터 용 기타 (SDA).
둘 다 오픈 드레인 CMOS 연결이며 풀업 저항이 필요합니다. 또한 한 장치가 0을 전송하고 다른 장치가 1을 전송하면 문제가 발생할 수 있으므로 라인은 항상 1 (높은 수준)로 설정되고 장치는 항상 0 (낮은 수준)으로 전송됩니다.

그것은 주인과 노예 그들은 클럭 신호를 생성하는 첫 번째 케이블에 의해 제어되는 동일한 케이블 또는 트랙을 통해 데이터를 보냅니다. I2C 버스에 연결된 각 주변 장치에는 전송을 지시하기 위해 고유 한 주소가 할당됩니다. 그러나 교사가 항상 같을 필요는 없습니다 (다중 교사), 항상 전학을 시작하는 사람입니다.

기사에서 이미 설명했듯이 아두이노 I2C 앞서 언급 한 것처럼 각 보드에는 서로 다른 위치에 이러한 I2C 연결이 있습니다. 각 플레이트 버전에서 적절하게 사용할 수 있으려면 명심해야 할 사항입니다.

  • Arduino UNO: SDA는 A4, SCK는 A5
  • 아두 이노 나노: 이전과 동일합니다.
  • 아두이노 미니 프로: 동일합니다.
  • 아두 이노 메가: SDA는 핀 20에 있고 SCK는 21에 있습니다.
  • 플레이트에 대한 추가 정보.

스케치에 I2C를 쉽게 사용할 수 있다는 것을 이미 알고 있습니다. Wire.h 라이브러리 이 직렬 통신을위한 다양한 기능 :

  • 시작 (): Wire 라이브러리를 시작하고 마스터인지 슬레이브인지 지정
  • requestFrom (): 마스터가 슬레이브에게 데이터를 요청하는 데 사용됩니다.
  • beginTransmission (): 슬레이브로 전송을 시작합니다.
  • endTransmission (): 전송을 종료합니다.
  • 쓰다()-마스터의 요청에 대한 응답으로 슬레이브에서 데이터를 쓰거나 마스터의 전송을 큐에 넣을 수 있습니다.
  • 사용 가능 (): 읽을 바이트 수를 반환합니다.
  • 읽다(): 슬레이브에서 마스터로 또는 그 반대로 전송 된 바이트를 읽습니다.
  • onReceive (): 슬레이브가 마스터로부터 전송을받을 때 함수를 호출합니다.
  • onRequest (): 슬레이브가 마스터에게 데이터를 요청할 때 함수를 호출합니다.

Arduino 프로그래밍 및 기능에 대해 다운로드 할 수 있습니다. PDF 튜토리얼.

PCF8574는 무엇입니까?

PCF8574 모듈

PCF8574는 I2C 버스 디지털 입력 및 출력 (I / O) 확장기. IC 및 모듈에서 사용할 수있을뿐만 아니라 다양한 제조업체에서 제조 할 수 있습니다. 어쨌든 Arduino 보드에 연결하고 마더 보드가 허용하는 것보다 더 많은 장치를 제어 할 수있는 용량을 갖는 것이 매우 실용적입니다.

El PCF8574 핀아웃 간단합니다. 8 소나무 준 지향성 (통신 할 칩이 연결된 P0-P7), 반면에 Arduino 보드에 연결해야하는 SDA 및 SCL은 물론 모듈에 전원을 공급하기위한 VCC 및 GND도 있습니다. 그리고 통신이 향하는 장치를 선택하기 위해 세 개의 주소 지정 핀 A0, A1, A2를 잊지 마십시오 ...

PCF8574 핀아웃

자신의 다른 특징들 알아야 할 사항 :

  • 개방형 배수구 인 연결은 입력 및 출력으로 모두 사용.
  • La 피크 전류 출력 (싱크, PCF25쪽으로 전류가 흐를 때)으로 작동 할 때 8574mA이고 300µA (소스, PCF8574에서 전류가 흐름)로 작동합니다.
  • La 장력 전원 공급 장치는 2.5 및 6v입니다. 대기 소비는 매우 낮아 10µA에 불과합니다.
  • 모든 출력 걸쇠가있다, 외부 조치없이 상태를 유지합니다. 상태를 변경하고 싶을 때만 행동하면됩니다.
  • 당신은 8을 얻을 수 있습니다 가능한 방향, 즉, 최대 8 개의 장치와 통신하거나 8 개의 모듈을 사용하여 최대 64 개의 장치로 확장합니다. 주소 (핀 A0, A1, A2)는 다음과 같습니다.
    • 000 : 주소 0x20
    • 001 : 주소 0x21
    • 010 : 주소 0x22
    • 011 : 주소 0x23
    • 100 : 주소 0x24
    • 101 : 주소 0x25
    • 110 : 주소 0x26
    • 111 : 주소 0x27
  • 인정 중단 (INT) 특수 라인으로 지속적으로 모니터링하지 않고 데이터를 감지합니다.

Arduino와 통합

Arduino IDE의 스크린 샷

Arduino와의 연결은 매우 간단합니다. Vcc를 Arduino 보드의 5v 핀에 연결하고 GND를 Arduino의 GND에 연결하기 만하면됩니다. 반면에 PCF8574 SDA 및 SCL 모듈의 핀은 핀으로 연결 14 (A5 SCL) 및 15 (A4 SDA). 그래야만 작동하기 시작합니다. 분명히 Px를 사용하여 통신하려는 장치를 연결할 수 있습니다.

그렇다면 그것은 사라질 것입니다. 예제 스케치로 시작 Arduino IDE에서. 다음과 같은 추가 라이브러리를 사용하지 않고도 할 수 있습니다.

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   for (short channel = 0; channel < 8; channel++)
   {
      // Escribir dato en cada uno de los 8 canales
      Wire.beginTransmission(address);
      Wire.write(~(1 << channel));
      Wire.endTransmission();
      
      // Lee dato del canal
      delay(500);
   }
}

입력으로 :

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   short channel = 1;
   byte value = 0;
 
   // Leer el dato del canal
   Wire.requestFrom(pcfAddress, 1 << channel);
   if (Wire.available())
   {
      value = Wire.read();
   }
   Wire.endTransmission();
 
   // Mostrar el valor leido por el monitor serie
   Serial.println(value);
}

또는 도서관 이용, PCF8574와 같은 여기에서 다운로드하십시오. 이 라이브러리와 함께 제공되는 예제 자체에서 다음과 유사한 코드를 사용합니다.

#include <Wire.h>
#include "PCF8574.h"
 
PCF8574 expander;
 
void setup() 
{
  Serial.begin(9600);
  
  expander.begin(0x20);
  
  /* Setup some PCF8574 pins for demo */
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, INPUT_PULLUP);
 
  /* Blink hardware LED for debug */
  digitalWrite(13, HIGH);  
  
  /* Toggle PCF8574 output 0 for demo */
  expander.toggle();
  
  /* Blink hardware LED for debug */
  digitalWrite(13, LOW);
}
 
 
 
void loop() 
{
}


코멘트를 첫번째로 올려

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

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