BASIC4MCU | 질문게시판 | avr에서 Am2322 i2c address 설정 문의입니다.
페이지 정보
작성자 공부중 작성일2021-07-15 09:08 조회10,978회 댓글4건첨부파일
본문
안녕하세요.
i2c를 처음으로 공부하는 중에
atmega128와 온습도 센서인 AM2322와 I2c 통신을 하고 있습니다.
AM2322의 I2c Address 주소를 Datasheet에서 확인하고 주소 값을 지정했는데 Datasheet에 있는 주소와 실제 출력되는 주소가
달라서 어떻게 처리해야 하는지 알려 주셨으면 합니다.
우선
AM2322 Write Address: 0xB8
AM2322 Read Address: 0xB9
실제 파형에서의 Address는 위의 Address를 1 Bit 시킨 0x5C
입니다.
그런데 0x5c로 지정했을 경우에는 위의 값이 Write 상태인지 Read 상태인지를 알 수가 없어서 정상적인 값을 받아들이지 못하고 있습니다.
이 부분을 어떻게 처리해야 하는지 도움을 주셨으면 합니다.
감사합니다.
댓글 4
조회수 10,978master님의 댓글
master 작성일
SLAVE ADD는 0x5C
Write Address: 0xB8
Read Address: 0xB9
SLAVE ADD를 0x5C로 선언하거나 함수에 인수로 넣어서 호출하게 되면
read 함수 안에서는 슬레이브 어드레스를 1비트 좌로 시프트 하고 read/write 비트를 1로 해서 0xB9를 만든 후에 I2C 전송하게 되고
write 함수 안에서는 슬레이브 어드레스를 1비트 좌로 시프트 하고 read/write 비트를 0으로 해서 0xB8을 만든 후에 I2C 전송하게 됩니다.
master님의 댓글
master 작성일
read/write 함수 안에서의 처리에 따라서 다르지만 좌시프트 같은 것 없이 0xB9, 0xB8로 직접 I2C 전송하기도 합니다.
이미 자신이 read 함수인지 write 함수인지 알고 있기 때문에 가능하죠
공부중님의 댓글
공부중
그러면 Read와 Write의 Address를 별도로 지정하지 않고 0x5C로 지정으로 지정을 하게 되면 자동으로 변경이 된다는 거네요??
답변 정말 감사합니다.
master님의 댓글
master
함수를 포함한 코드에서 어떻게 처리하고 있는지를 살펴보세요