posted by 샛별의꿈 2016. 1. 11. 17:38

MLX90614 붙이다보니 겪은 일들.


1. Slave Address 가 0x5A 가 기본값이다. 라고 데이터 시트에 나와 있다. MCU의 코드에 따라 어떻게 될지 모르겠지만, 
    결과적으로 전송되어야 하는 바이트 값은

0b1011010x (x는 0:Write, 1:Read)이다. 

STM32 keil 컴파일러용 Periphiral Driver 에서 제공하는 

I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction)

이 녀석은 Address 에 8bit 데이터를 줘야 하므로, 0x5A가 아니라 0xB4를 줘야 된다. Direction 가지고 마지막 비트를 0이든 1로 바꿔주는 녀석이라..


2. 어드레스도 맞고 해서 전송하는 데 오류는 하나도 안 나는데, 수신된 값이 죄다 0xFF 가 뜨는 경우가 있다.

이건, I2C 버스 프로토콜을 보면 Repeated Start 를 어떻게 실제로 구동하느냐의 문제인데, 

어떤 소자는 이 Repeated Start 를 Stop+Start 로 요구하는 경우가 있기도 한데, MLX90614 의 경우에는 그냥 다시 Start 만 해주면 된다. Stop 하고나서 Start 하면 죄다 0xFF 뜬다. 아오 이거 찾느라 삽질한거 생각하면 ㅡ.ㅡ;

(막상 데이터시트 프로토콜 그림 보면 딱 1비트로 표현되어있으니 사실 Start만 다시 해주는게 맞다는 것은 나의 불찰로 하고...)


3. 데이터가 들어오는 데 표현되는 값이 막 섭씨 수백도 이상 왔다갔다 한다.

보....통은 MSB First 인데, 이건 LSB First(.........). 데이터시트에 있으니 할말은 없다만 아 쫌..ㅠㅠ


4. crc 값이 안맞는다.

이것도 보....통은 전송되는 데이터만 가지고 CRC 계산해서 붙여보내는데,
MLX90614는 무려 

SlaveAddress[tx] byte + Command byte + SlaveAddress[rx] byte + Data(LSB) byte + Data(MSB) byte

이만큼 갖고 만들어서 붙여보내고 있다. 뭐, 고....고맙다ㅠㅠ귀찮게 해 주셔서....


1,2번 항목이 동시에 불확실한 상태로 삽질하니까 뭐가 맞는 줄 몰라서 온갖 삽질을...



뭐 여튼 그래서 잘 동작은 하는데, 문제는 이놈의 것이 거리가 어느정도 떨어진 것까지 잘 재는건지 대충 봐서 모르겠다;;

얼음 갖다 찍어봤더니 -10도 뜨는데, 이것도 맞는건지 당최...접촉식 센서하고 같이 놓고 평가해야 하나;