Суть проблемы. Девайс с термометром на DS1621. В процессе работы (при постоянном преобразовании), микра греется и начинает врать +4/+5 градусов. Да, знаю, что так не должно быть, но так есть. Сразу после включения, в холодном состоянии, показания корректны, затем начинает прогреваться в среднем на градус за минуту работы и так до описанной погрешности. Подозреваю, что погрешность будет нелинейна, а поскольку диапазон работы устройства будет от -5 до +40, нет желания строить таблицу поправок. Тем более, места в памяти уже не особо осталось, а переходить на больший камень из-за погрешности термометра как-то моветон.
Пытаюсь реализовать измерение один раз в минуту, мне этого достаточно. Т.е. запускаю преобразование, жду результата, читаю его, отключаю преобразование. И так раз в минуту. Но! Столкнулся с тем, что не могу отловить окончание преобразования
Код: Выделить всё
uint8_t ds1621_get_status(void)
{
temp = 0x00;
i2c_start();
i2c_send_byte(DS1621_ADR_W);
i2c_send_byte(DS1621_ACCES_CONFIG);
i2c_restart();
i2c_send_byte(DS1621_ADR_R);
temp = i2c_read_byte(NACK);
i2c_stop();
return temp;
}
uint8_t getTemperatura(void)
{
i2c_start();
i2c_send_byte(DS1621_ADR_W);
i2c_send_byte(DS1621_START_CONVERT);
[b]while[/b](ds1621_get_status() != 0x51) ds1621_get_status();
temp = 0x00;
i2c_start();
i2c_send_byte(DS1621_ADR_W);
i2c_send_byte(DS1621_READ_TEMPR);
i2c_restart();
i2c_send_byte(DS1621_ADR_R);
temperatura = i2c_read_byte(NACK);
i2c_restart();
i2c_send_byte(DS1621_ADR_W);
i2c_send_byte(DS1621_STOP_CONVERT);
i2c_stop();
return temperatura;
}

