LINUX.ORG.RU

История изменений

Исправление Eddy_Em, (текущая версия) :

Все легко и просто:

int32_t getMCUtemp(){
    int32_t ADval = getADCval(4);
    int32_t temperature = (int32_t) *TEMP30_CAL_ADDR - ADval;
    temperature *= (int32_t)(1100 - 300);
    temperature /= (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
    temperature += 300;
    return(temperature);
}

Накалякал эту функцию исключительно по данным из даташита. А функция getADCval выполняет медианное усреднение по девяти последним измерениям для уменьшения шумов (АЦП молотит через ПДП непрерывно).

Флоаты в МК без их поддержки стараюсь использовать только в крайних случаях. Обхожусь числами с фиксированной запятой.

Исправление Eddy_Em, :

Все легко и просто:

int32_t getMCUtemp(){
    int32_t ADval = getADCval(4);
    int32_t temperature = (int32_t) *TEMP30_CAL_ADDR - ADval;
    temperature *= (int32_t)(1100 - 300);
    temperature /= (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
    temperature += 300;
    return(temperature);
}

Накалякал эту функцию исключительно по данным из даташита. А функция getADCval выполняет медианное усреднение по девяти последним измерениям для уменьшения шумов (АЦП молотит через ПДП непрерывно).

Исходная версия Eddy_Em, :

Все легко и просто:

int32_t getMCUtemp(){
    int32_t ADval = getADCval(4);
    int32_t temperature = (int32_t) *TEMP30_CAL_ADDR - ADval;
    temperature *= (int32_t)(1100 - 300);
    temperature /= (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
    temperature += 300;
    return(temperature);
}