atmega2560을 사용하여 온도 센서 tmp36에서 온도를 읽습니다. 온도 센서 디지털 값을 읽고 두 개의 atmega2560 마이크로 컨트롤러에서 판독 가능한 형태로 변환 한 후에 나는 다른 해답을 얻습니다. 왜 이런 종류의 대답을 얻습니까? ? 코드의 조각은 현재 다음과 같습니다 : 내가 가진 하나 개 ATMEGA2560의 답변에부동 소수점 연산 이상
float temp; // global variable
{
unsigned long temp_volt;
unsigned char temp_h, temp_l;
unsigned int temp_buf;
temp_l=ADCL;
temp_h=ADCH;
temp_buf=((int)temp_h<<8)|temp_l;
temp_volt =(((unsigned long)temp_buf*256*10)/1023) - 993; // subtract offset gain
temp = ((float)temp_volt*1000/1014*100/196)/10; // adjust the gain
printf("temp_buf: %d, temp_volt: %d, temp: %0.2f\r\n", temp_buf, temp_volt, temp);
}
은 다음과 같습니다
temp_buf : 55, temp_volt : 447, 온도 : 나는이 뭐가 다른 ATMEGA2560에 22.4
:
temp_buf : 53, temp_volt : -861, 온도 :이 때문에 0.00
나는이 조정을
temp_volt =(((unsigned long)temp_buf*256*100)/1023) - 904;
왜 동일한 코드를 사용할 때 두 개의 마이크로 컨트롤러가 다르게 동작합니까?
나는 그 코드가 다른 이유에서 온다고 말하고 싶습니다. 그것을 다운로드하고 비교하십시오. 그러나 두 번째 평가에서는 float 상수 * 1000.0/1014.0 * 100.0/196.0 *을 사용해야합니다. 또한 선언 된 방법 * temp_buf, temp_volt *, 그들은 * unsigned int *입니까? 이상적으로는 디버거를 실행하고 런타임에 검사하십시오. 그렇지 않으면 컴파일 된 asm 코드를 확인하십시오. 구형 gcc 4.3.2는 때때로 버그입니다. – TMa