i2c를 사용하는 PIC 마이크로 컨트롤러 (dsPIC33)의 ADXL345 가속도계에서 성공적으로 읽기를 완료했습니다. 지금까지 내가 달성 한 것은 장치 ID를 올바르게 읽는 것인데, 이것은 1 바이트입니다.다중 레지스터/디바이스의 i2c
ADXL345를 사용했던 사람은 X 축, Y 축 또는 Z 축에서 데이터를 읽는 것이 예를 들어 'DATAX0'및 'DATAX1'의 두 바이트로 분리된다는 것을 알 수 있습니다. 데이터 시트에는 또한 '데이터 일관성 보장을 위해 멀티 바이트 읽기를 사용하여 ADXL345에서 데이터를 검색하는 것이 권장됩니다. 따라서 축당 2 바이트를 함께 수집해야합니다.
제 질문은 축마다 2 바이트가 두 개의 다른 레지스터로 표시 될 때 어떻게합니까?
상기 이미지는 I2C 전송에 필요한 프로세스를 나타낸다. 가속도계에서 읽으려면 하단 두 그래프를보고 데이터 시트 인용 부호는 위에서 아래에 그래프 (multiple-Byte)를 사용하는 것을 제안했지만 두 바이트는 서로 다른 두 개의 레지스터 값 (각각 DATAX0 및 DATAX1에 대해 0x32 및 0x33).
하나의 축에서 한 번에 데이터를 가져 오는 방법은 무엇입니까? 이 작업을 수행하는 유일한 방법은 하나의 레지스터 주소가있는 단일 바이트 읽기입니다. 그런 다음 두 번째 레지스터 주소를 사용하여 다시 한 번 수행 한 다음이 둘을 연결하여 하나의 축 데이터를 얻습니다.
이 질문은 동일한 i2c 버스에있는 다양한 장치의 데이터를 수집하는 데에도 적용됩니다.이 장치에는 레지스터도 달라집니다.
건배!
답장을 보내 주셔서 감사합니다. 따라서 레지스터 주소에 0x32 (DATA0X)의 값을 넣은 다음 i2c를 다시 시작하고 슬레이브 읽기와 6 바이트를 가져 오면 0x32, 33, 34, 35, 36의 바이트를 가져옵니다. , 37 (즉, 3 축 모두에 대한 모든 바이트?). 나는 0x0 레지스터를 사용하여 다중 바이트 읽기를 수행함으로써 DATA0X 바이트를 두 번 잡을 것이라는 가정하에있었습니다. – ritchie888
올바른 경우 순차적으로 읽습니다. 싱글 바이트 읽기와 멀티 바이트 읽기를하는 테스트 드라이버를 쉽게 작성하여 자신이 동일하다는 것을 확신 할 수 있습니다. – TJD
좋습니다. 대단히 고마워요, 지금 시험 중입니다. – ritchie888