본문 바로가기

[SENSOR]/기타센서

[HMC6352] Compass센서 테스트 - MyUSB-Sensor Board

[HMC6352] Compass센서 테스트 - MyUSB-Sensor Board

myCompass 가 myMCU-EXP보드에서는 잘 동작하지만 myUSB에서 정상동작하지 않는 현상이 발생
상당히 오래동안 고생했는데 알고 보니 myUSB의 확장보드쪽 전원 3.3V가 회로적으로 잘못 기입하여 공급이 않되고 있었다.
myUSB의 3.3V를 Main보드와 연결해서 전원해결.
동작은 잘한다.
 
하지만 이상하게 반응속도가 너무 느리다. 값이 변하지 않는것은 아닌데... 업데이트 속도가 상당히 느린 현상 발생
Read시 2개의 데이터를 가져오는데 처음에는 ACK를 보내야 하고 두번째 바이트는 ACK를 보내지 않아야 하한다.




보통 I2C메모리의 Read 타이밍 - ACK는 DATA Low이다.




myCompass.c 의 함수 수정
unsigned int myCompassRead(unsigned char reg)
{
    :
 
 //data = i2c_readNak()<<8;                 // i2c Data Read
 //data |= i2c_readNak();                      // i2c Data Read 
 data = i2c_readAck()<<8;
 data |= i2c_readNak();
 
}
 
 
STM32에서는 ACK를 보내기 위해 아래와 같이 수정
unsigned char i2c_readAck(void)
{
 unsigned char data = 0;
 
    I2C_AcknowledgeConfig(I2C_ID, ENABLE);
    while(1) 
    {
        //Test on EV7 and clear it
        if(I2C_CheckEvent(I2C_ID, I2C_EVENT_MASTER_BYTE_RECEIVED)) 
        {     
            data = I2C_ReceiveData(I2C_ID);
            break;
        }  
    }
    I2C_AcknowledgeConfig(I2C_ID, DISABLE);  
   
    return data;
}
 
unsigned char i2c_readNak(void)
{
 unsigned char data = 0;
    while(1) 
    {
        //Test on EV7 and clear it
        if(I2C_CheckEvent(I2C_ID, I2C_EVENT_MASTER_BYTE_RECEIVED)) 
        {     
            data = I2C_ReceiveData(I2C_ID);
            break;
        }  
    }
  
    return data;
}
반응형