собираю устройство на ds3231 - как работать с часами разобрался сразу - там все почти как в ds1307, а вот с температурой завис....
регистры температуры 0х11 и 0х12 считываю- а вот дальше с преобразованием немного запутался:
опишу свой агоритм:
сравниваю показания термометров ds18b20 показывает +24.5 градуса ds3231 - +26.25 градусов, а при отрицательной температуре вообще бред получается ...... прошу помощи мудрейших!
регистры температуры 0х11 и 0х12 считываю- а вот дальше с преобразованием немного запутался:
опишу свой агоритм:
Код: Выделить всё
unsigned char temp;
temp=ds3231_read(0x11); //читаю регистр 0х11
if (temp & 0x80) //старший бит отвечает за знак темературы 1 минус, 0 плюс
{
LCD_WriteData('-');
}
else {
LCD_WriteData('+');
};
temp&=0x7F; //накладываю маску на значение регистра чтобы получить целое значение температуры
LCD_Out(temp); //вывожу на ЖК целое значение температуры
temp=ds3231_read(0x12); //читаю регистр 0х12
temp&=0xC0; //накладываю маску на значение регистра чтобы получить дробное значение температуры
temp>>=6; //нам нужны только 7 и 8 бит в них хранится дробная часть температуры
temp*=25; //разрешение термометра по датасшиту 0.25
//т.е. дробная часть температуры может быть 0, 0.25, 0.50, 0.75
LCD_WriteData('.'); //вывожу точку
LCD_Out(temp); //вывожу на ЖК дробное значение температуры
сравниваю показания термометров ds18b20 показывает +24.5 градуса ds3231 - +26.25 градусов, а при отрицательной температуре вообще бред получается ...... прошу помощи мудрейших!
