MSP430은 임베디드 프로젝트를 위해 Texas Instruments에서 제공하는 강력한 플랫폼으로, 다재다능한 특성으로 인해 많은 응용 프로그램에서 방법을 찾을 수 있으며 단계는 계속 진행 중입니다. MSP430 튜토리얼을 따랐다면이 마이크로 컨트롤러에 대한 광범위한 튜토리얼을 이미 기초부터 다뤘다는 것을 알 수있을 것입니다. 지금부터 우리는 커뮤니케이션 포털과 같은 더 흥미로운 것에 들어갈 수있는 기본 사항을 다루었습니다.
방대한 임베디드 애플리케이션 시스템에서 어떤 마이크로 컨트롤러도 자체적으로 모든 활동을 수행 할 수 없습니다. 어떤 단계에서는 정보를 공유하기 위해 다른 장치 와 통신해야합니다. 이러한 정보를 공유하기위한 다양한 유형의 통신 프로토콜 이 있지만 가장 많이 사용되는 프로토콜 은 USART, IIC, SPI 및 CAN 입니다. 각 통신 프로토콜에는 고유 한 장점과 단점이 있습니다. 이 튜토리얼에서 배울 것이므로 지금 은 I2C 부분 에 집중하겠습니다.
I2C 통신 프로토콜이란?
IIC라는 용어는“ Inter Integrated Circuits ”를 의미합니다. 일반적으로 I2C 또는 I 제곱 C로 표시되거나 일부 장소에서는 2 선 인터페이스 프로토콜 (TWI)로 표시되지만 모두 동일한 의미입니다. I2C는 동기식 통신 프로토콜입니다. 즉, 정보를 공유하는 두 장치 모두 공통 클럭 신호를 공유해야합니다. 정보를 공유하기위한 전선이 두 개 뿐이며 그중 하나는 콕 신호에 사용되고 다른 하나는 데이터 송수신에 사용됩니다.
I2C 통신은 어떻게 작동합니까?
I2C 통신은 Phillips에 의해 처음 도입되었습니다. 앞서 말했듯이 두 개의 와이어가 있으며이 두 개의 와이어는 두 장치에 연결됩니다. 여기서 한 장치를 마스터 라고 하고 다른 장치를 슬레이브 라고합니다. 통신은 마스터와 슬레이브 사이에서 항상 발생해야합니다. I2C 통신의 장점은 하나 이상의 슬레이브를 마스터에 연결할 수 있다는 것입니다.
완전한 통신은 직렬 클럭 (SCL)과 직렬 데이터 (SDA)라는 두 개의 와이어를 통해 이루어집니다.
직렬 클럭 (SCL): 마스터에서 생성 된 클럭 신호를 슬레이브와 공유합니다 .
직렬 데이터 (SDA): 마스터와 슬레이브간에 데이터를 전송합니다.
주어진 시간에 마스터 만 통신을 시작할 수 있습니다. 버스에는 하나 이상의 슬레이브가 있으므로 마스터는 다른 주소를 사용하여 각 슬레이브를 참조해야합니다. 주소가 지정되면 해당 특정 주소를 가진 슬레이브 만 정보로 응답하고 나머지는 종료합니다. 이렇게하면 동일한 버스를 사용하여 여러 장치와 통신 할 수 있습니다.
I2C 의 전압 레벨은 미리 정의되어 있지 않습니다. I2C 통신은 유연합니다. 즉, 5v 볼트로 구동되는 장치는 I2C에 5v를 사용할 수 있으며 3.3v 장치는 I2C 통신에 3v를 사용할 수 있습니다. 그러나 서로 다른 전압에서 실행되는 두 장치가 I2C를 사용하여 통신해야하는 경우 어떻게해야합니까? 5V I2C 버스는 3.3V 디바이스에 접속 될 수 없다. 이 경우 전압 시프터는 두 I2C 버스 사이의 전압 레벨을 일치시키는 데 사용됩니다.
거래를 구성하는 몇 가지 조건이 있습니다. 전송 초기화는 SDA의 하강 에지로 시작되며, 이는 마스터가 SDA를 로우로 설정하는 동안 SCL을 하이로 남겨 두는 아래 다이어그램에서 '시작'조건으로 정의됩니다.
아래 그림과 같이
SDA의 하강 에지는 START 조건에 대한 하드웨어 트리거입니다. 그런 다음 동일한 버스의 모든 장치가 청취 모드로 들어갑니다.
같은 방식으로 SDA의 상승 에지는 위의 다이어그램에서 'STOP'상태로 표시된 전송을 중지합니다. 여기서 마스터는 SCL을 high로 남겨두고 SDA를 해제하여 HIGH로 이동합니다. 따라서 SDA의 상승 에지는 전송을 중지합니다.
R / W 비트는 다음 바이트의 전송 방향을 나타내며 HIGH이면 슬레이브가 전송하고 낮 으면 마스터가 전송 함을 의미합니다.
각 비트는 각 클록 사이클에서 전송되므로 바이트를 전송하는 데 8 클록 사이클이 걸립니다. 각 바이트가 전송되거나 수신 된 후 ACK / NACK (승인 / 승인되지 않음)에 대해 9 번째 클럭 사이클이 유지됩니다. 이 ACK 비트는 상황에 따라 슬레이브 또는 마스터에 의해 생성됩니다. ACK 비트의 경우 SDA는 9 번째 클럭주기 에서 마스터 또는 슬레이브에 의해 로우로 설정됩니다. 따라서 ACK로 간주되고 그렇지 않으면 NACK로 간주됩니다.
I2C 통신은 어디에서 사용합니까?
I2C 통신은 근거리 통신 에만 사용됩니다. 그것은 스마트하게 만들기 위해 동기화 된 클럭 펄스를 가지고 있기 때문에 확실히 어느 정도 신뢰할 수 있습니다. 이 프로토콜은 주로 마스터에 정보를 전송해야하는 센서 또는 기타 장치와 통신하는 데 사용됩니다. 마이크로 컨트롤러가 최소한의 전선 만 사용하여 다른 많은 슬레이브 모듈과 통신해야 할 때 매우 편리합니다. 장거리 통신을 원하는 경우 RS232를 사용하고보다 안정적인 통신을 원하는 경우 SPI 프로토콜을 시도해야합니다.
MSP430의 I2C: AD5171 디지털 포텐쇼미터 제어
Energia IDE는 MSP430을 프로그래밍하는 가장 쉬운 소프트웨어 중 하나입니다. Arduino IDE와 동일합니다. 여기에서 Energia IDE를 사용하여 MSP430 시작에 대해 자세히 알아볼 수 있습니다.
따라서 Energia IDE에서 I2C를 사용하려면 wire.h 헤더 파일 만 포함 하면 됩니다. 핀 선언 (SDA 및 SCL)은 와이어 라이브러리 내부 에 있으므로 설정 기능 에서 선언 할 필요가 없습니다.
샘플 예제는 IDE의 예제 메뉴에서 찾을 수 있습니다. 예 중 하나가 아래에 설명되어 있습니다.
이 예는 I2C 동기 직렬 프로토콜을 통해 통신하는 Analog Devices AD5171 디지털 포텐쇼미터를 제어하는 방법을 보여줍니다. MSP의 I2C 와이어 라이브러리를 사용하여 디지털 포트는 64 레벨의 저항을 통과하여 LED를 페이드합니다.
먼저 i2c 통신을 담당하는 라이브러리, 즉 와이어 라이브러리를 포함합니다.
#포함
에서 설정 기능, 우리는에 의해 와이어 라이브러리 시작됩니다 .begin () 함수를.
void setup () { Wire.begin (); }
그런 다음 가변 값 을 초기화하여 전위차계 값을 저장하십시오.
바이트 val = 0;
에서는 루프 기능하겠습니다 는 I2C 슬레이브 디바이스에 전송 시작 IC의 시트에 부여되는 디바이스 어드레스를 지정하여 (이 경우, 디지털 전위차계 IC하여).
void loop () { Wire.beginTransmission (44); // 44 번 장치로 전송 (0x2c)
그 후, 바이트, 즉 write () 함수 로 전송하기 위해 IC로 전송하려는 데이터를 큐에 넣습니다.
Wire.write (byte (0x00)); // 명령어 바이트를 보냅니다. Wire.write (val); // 전위차계 값 바이트를 보냅니다.
그런 다음 endTransmission () 을 호출하여 전송합니다.
Wire.endTransmission (); // 전송 중지 val ++; // 값 증가 if (val == 64) {// 64 번째 위치에 도달하면 (최대) val = 0; // 가장 낮은 값에서 다시 시작 } delay (500); }