안녕하세요. I2C 2편입니다.
I2C통신 아두이노와 오실로스코프로 확인해보기 1편
https://wowon.tistory.com/224?category=615512
I2C통신 아두이노와 오실로스코프로 확인해보기 3편
https://wowon.tistory.com/226?category=615512
아두이노와 오실로스코프를 이용해서 데이터 주소를 슬레이브에게 보내는 것을 해보겠습니다.
- Wire.begin() : I2C를 사용할 수 있게 초기화합니다.
- Wire.beginTransmission(address) : 슬레이브 주소전달 함수입니다. (주소는 7bit)
- Wire.write(value) : 슬레이브에게 보낼 데이터입니다.
- Wrie.endTransmission() : write()에 의해 대기중이였던 데이터를 전송하고, 통신을 종료합니다. 이 함수의 리턴값에 따라서 슬레이브가 데이터를 수신했는지 알 수 있습니다.
0: 성공
1: 데이터가 너무 길어 전송 버퍼에 맞지 않음
2: 주소 전송 시 NACK 수신
3: 데이터 전송 시 NACK 수신
4: 기타 오류
- 아두이노(UNO) 코드. I2C모듈은 JMOD-TEMP-1 (LM75A)을 사용했습니다. UNO는 A4가 SDA라인, A5가 SCL라인입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
int i;
Wire.beginTransmission(0x00);
i = Wire.endTransmission();
if(i ==0)
Serial.println("success");
else
{
Serial.print("Error : ");
Serial.println(i);
}
delay(1000);
}
|
cs |
11번에서 주소를 보내고 있는데, 주소는 0x00을 보내고 있습니다.
위의 포맷으로 파형이 찍혀야 합니다.
연결한 I2C 모듈의 주소는 0x48이므로, NACK입니다.
Wire.beginTransmission의 리턴값이 2이므로 "주소 전송 시 NACK 수신" 입니다.
그럼 이제 주소로 0x01, 0x02, 0x03을 보내보겠습니다.
*0x01
*0x02
*0x03
지금까지 NACK가 오는건 슬레이브의 주솟값이 잘못되었기 때문입니다.
제가 사용한 JMOD-TEMP-1 (LM75A)을 소개해보자면 디지털 온도센서 모듈입니다. JMOD-TEMP-1은 제이씨넷 회사가 LM75A IC를 이용하여 보드를 만든 것 입니다. JMOD-TEMP-1은 보드에 풀업저항이 연결되어 있으므로 SCL,SDA에 따로 풀업저항을 연결안해줘도 됩니다.
실제로 핀배치를 보면 SDA,SCL가 있는 것을 확인할 수 있습니다.
이제 LM75A데이터를 보면 이 모듈의 주솟값이 적혀있습니다.
0b1001A2A1A0이고 A2,A1,A0을 연결안하면 0이고 연결하면 1입니다. 그래서 A0~A2을 연결 안하면 주솟값이 0x48이 됩니다.( 7비트) 그럼 이제 이 모듈의 주솟값인 0x48을 보내보겠습니다.
ACK의값이 0이고, Wire.beginTransmission의 리턴값이 0이므로 성공입니다.
3편에서는 실제로 데이터를 WRITE , READ 해보겠습니다.
'아두이노 > 이론' 카테고리의 다른 글
SPI통신 아두이노와 오실로스코프로 확인해보기 1편 (0) | 2021.11.21 |
---|---|
I2C통신 아두이노와 오실로스코프로 확인해보기 3편 (0) | 2021.10.04 |
I2C통신 아두이노와 오실로스코프로 확인해보기 1편 (6) | 2021.10.03 |
아두이노 정전식 터치센서 사용하기 TTP223B (0) | 2018.12.19 |
2강. 아두이노 analogWrite, PWM 알아보기입니다.(LED키기) (0) | 2018.10.20 |