DS3231 - вывод темпертуры

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Пн окт 07, 2013 12:11:46

Сообщение djeki7 »

собираю устройство на ds3231 - как работать с часами разобрался сразу - там все почти как в ds1307, а вот с температурой завис....
регистры температуры 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 градусов, а при отрицательной температуре вообще бред получается ...... прошу помощи мудрейших!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

У датчика температуры точность +/- 3С. Отрицательные температуры в нем представляются в 2-дополнительном коде. Для отрицательных чисел в таком представлении алгоритм обработки несколько другой, см. Википедию.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Интересно, для чего такое бешеное разрешение (0.25), если температуры варьируется в пределах 6-ти градусов :)

По сабжу. Заведите знаковую 2-х байтовую переменную и заносите в неё считанные байты. Потом делите переменную на обратное значение разрешения и получите желаемый результат. Всё просто :)
Ответить

Вернуться в «Периферия»