'compass'에 해당되는 글 2건

  1. 2009.06.09 [HMC6352] Compass센서 테스트 - MyUSB-Sensor Board
  2. 2009.06.08 [HMC6352] 지자기 센서 모듈 제작 (1)
[SENSOR]/기타센서2009. 6. 9. 12:41

[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;
}
Posted by nexp

댓글을 달아 주세요

[SENSOR]/기타센서2009. 6. 8. 12:49

[HMC6352] 지자기 센서 모듈 제작

[HMC6352] 지자기 센서 모듈 제작








테스트 동영상
")//]]> Cortex-M3 STM32 USB를 이용하여 각도값 표시

Posted by nexp

댓글을 달아 주세요

  1. lee

    안녕하세요 궁금한게 있어서 그런데 3축으로 지자기값을 측정해서 각도값을

    구하는 공식좀 알수 있을련지요..가르쳐주시면 감사하겠습니다

    2009.09.10 00:10 [ ADDR : EDIT/ DEL : REPLY ]