당신은 확실히 들었습니다 PCF8574 IC, 별도로 구매하거나 다른 많은 모듈과 같이 이미 모듈에 장착 된 칩 전자 부품 Arduino 보드와의 통합을 용이하게합니다. 이 경우에 대한 입력 및 출력의 확장기입니다. I2C 버스.
Arduino가 이미 자체적으로 통합 I2C 버스, 그리고 그것은 사실입니다. 그러나 PCF8574는 해당 버스를 개발 보드의 한계를 넘어 확장하는 데 도움이 될 수 있으며, 이는 Arduino가 제공하는 것 이상을 필요로하는 일부 제조업체에게 큰 도움이 될 수 있습니다.
I2C 버스는 무엇입니까?
I2C라는 이름은 내부 집적 회로 또는 통합 회로. 버전 1.0은 1992 년에 Philips가 만들었습니다. 그런 다음 두 번째 2.1이 2000 년에 나오고 현재는 특허가 100 년에 만료되어 자유롭게 사용할 수있을 때 표준 (최대 3.4Mbit / s까지 허용되지만 2006kbit / s에서)이되었습니다.
현재 업계에서 널리 사용됩니다. 커뮤니케이션을 위해, 또한 하나의 IC에 통합 된 서로 다른 마이크로 컨트롤러 및 주변 장치를 통신하는 프로젝트에 대해 제조업체에서 매우 높이 평가합니다.
El I2C는 버스입니다 잘 알려진 직렬 통신. 두 채널 만있는 동기식 통신 프로토콜을 사용합니다 (세 번째 채널이 있지만 참조 또는 GND에 연결됨). 실제로 TWI (Two Wire Interface)라고도합니다.
- 시계 (SCL) 용.
- 데이터 용 기타 (SDA).
그것은 주인과 노예 그들은 클럭 신호를 생성하는 첫 번째 케이블에 의해 제어되는 동일한 케이블 또는 트랙을 통해 데이터를 보냅니다. 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는 I2C 버스 디지털 입력 및 출력 (I / O) 확장기. IC 및 모듈에서 사용할 수있을뿐만 아니라 다양한 제조업체에서 제조 할 수 있습니다. 어쨌든 Arduino 보드에 연결하고 마더 보드가 허용하는 것보다 더 많은 장치를 제어 할 수있는 용량을 갖는 것이 매우 실용적입니다.
El PCF8574 핀아웃 간단합니다. 8 소나무 준 지향성 (통신 할 칩이 연결된 P0-P7), 반면에 Arduino 보드에 연결해야하는 SDA 및 SCL은 물론 모듈에 전원을 공급하기위한 VCC 및 GND도 있습니다. 그리고 통신이 향하는 장치를 선택하기 위해 세 개의 주소 지정 핀 A0, A1, A2를 잊지 마십시오 ...
자신의 다른 특징들 알아야 할 사항 :
- 개방형 배수구 인 연결은 입력 및 출력으로 모두 사용.
- 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와의 연결은 매우 간단합니다. 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() { }