TWI(Two Wire Inctertace)는 우리가 흔이 알고 있는 I2C(Inter_Integrated Circuit)와 같은 통신 방식으로 Mega128에서는 TWI라고 부릅니다. I2C는 필립스에서 개발한 직렬 컴퓨터 버스 이며 주변기기들과 저속의 통신을 위해 개발되었습니다. 통신을 위해 필요한 단자는 단 2개의 (SCL, SDA) 이며 다수의 장치를 한번에 연결하여 통신할 수 있습니다.
아래 그림은 다수의 장치가 연결된 형태입니다.
I2C 통신 라인을 통하여 Master (MCU)에 여러 장치들(Slave)이 연결되어 있는 형태입니다. 각각의 장치들은 자신들만의 고유한 주소를 가지고 있어 Master는 주소를 지정하여 장치를 선택하고 선택된 장치와 통신을 할 수 있습니다. 만약 중복되는 주소를 갖는 장치가 있다면 Master로 부터 명령이 제대로 전달되지 않고 통신을 할 수 없는 상태가 되기 때문에 각 장치들은 중복되지 않는 주소를 갖고 있어야 합니다. 따라서 각 장치들은 별도의 Address select 기능을 갖고 있어 주소가 중복되지 않도록 설정할 수 있습니다. ATmega128의 경우 최대 128개 까지 연결 할 수 있도록 설계되어 있습니다.
아래 회로도는 20x4 LCD를 연결한 회로도 입니다.
PCF8574T의 ADDRESS SELECT는 0x40으로 선택되어 있습니다. 따라서 TWI(I2C)통신을 할때 명령을 읽고 쓰기 위해서 주소를 0x40을 사용해야 합니다.
I2C 통신에서 빠지지 말아야할 것은 SCL과 SDA는 항상 VDD와 저항을 통해 Pull-up 상태를 유지해야 합니다. 만약 그렇지 않는 경우 아래와 같이 SDA, SCL Signal이 정확한 구형파형을 만들지 못하여 통신 오류가 발생하게 됩니다.
ATmega128에 최대 TWI통신 속도는 400㎑ 입니다. 따라서 400㎑ 이하의 장치는 모두 호환되며 각 장치마다 통신속도가 다르더라도 1:1 통신이기 때문에 그 속도를 가변하여 통신할 수 도 있습니다. 우리가 사용할 20x4 LCD Module에 장착된 PCF8574 I2C I/O Expander IC의 최대 통신속도는 100㎑ 이므로 통신속도를 100㎑ 이하로 설정해야만 정확한 통신이 가능합니다.