2013-03-14 4 views
2

i2c를 사용하는 PIC 마이크로 컨트롤러 (dsPIC33)의 ADXL345 가속도계에서 성공적으로 읽기를 완료했습니다. 지금까지 내가 달성 한 것은 장치 ID를 올바르게 읽는 것인데, 이것은 1 바이트입니다.다중 레지스터/디바이스의 i2c

ADXL345를 사용했던 사람은 X 축, Y 축 또는 Z 축에서 데이터를 읽는 것이 예를 들어 'DATAX0'및 'DATAX1'의 두 바이트로 분리된다는 것을 알 수 있습니다. 데이터 시트에는 또한 '데이터 일관성 보장을 위해 멀티 바이트 읽기를 사용하여 ADXL345에서 데이터를 검색하는 것이 권장됩니다. 따라서 축당 2 바이트를 함께 수집해야합니다.

제 질문은 축마다 2 바이트가 두 개의 다른 레지스터로 표시 될 때 어떻게합니까?

i2c process

상기 이미지는 I2C 전송에 필요한 프로세스를 나타낸다. 가속도계에서 읽으려면 하단 두 그래프를보고 데이터 시트 인용 부호는 위에서 아래에 그래프 (multiple-Byte)를 사용하는 것을 제안했지만 두 바이트는 서로 다른 두 개의 레지스터 값 (각각 DATAX0 및 DATAX1에 대해 0x32 및 0x33).

하나의 축에서 한 번에 데이터를 가져 오는 방법은 무엇입니까? 이 작업을 수행하는 유일한 방법은 하나의 레지스터 주소가있는 단일 바이트 읽기입니다. 그런 다음 두 번째 레지스터 주소를 사용하여 다시 한 번 수행 한 다음이 둘을 연결하여 하나의 축 데이터를 얻습니다.

이 질문은 동일한 i2c 버스에있는 다양한 장치의 데이터를 수집하는 데에도 적용됩니다.이 장치에는 레지스터도 달라집니다.

건배!

답변

4

0x32에서 2 바이트 읽기 만하면 0x32와 0x33의 값을 응답에 넣습니다.

+0

답장을 보내 주셔서 감사합니다. 따라서 레지스터 주소에 0x32 (DATA0X)의 값을 넣은 다음 i2c를 다시 시작하고 슬레이브 읽기와 6 바이트를 가져 오면 0x32, 33, 34, 35, 36의 바이트를 가져옵니다. , 37 (즉, 3 축 모두에 대한 모든 바이트?). 나는 0x0 레지스터를 사용하여 다중 바이트 읽기를 수행함으로써 DATA0X 바이트를 두 번 잡을 것이라는 가정하에있었습니다. – ritchie888

+0

올바른 경우 순차적으로 읽습니다. 싱글 바이트 읽기와 멀티 바이트 읽기를하는 테스트 드라이버를 쉽게 작성하여 자신이 동일하다는 것을 확신 할 수 있습니다. – TJD

+0

좋습니다. 대단히 고마워요, 지금 시험 중입니다. – ritchie888