0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 12
1

DS3231. Вывод темпертуры

09.11.2013, 12:31. Показов 7675. Ответов 9
Метки нет (Все метки)

собираю устройство на AVR в качестве часов использую DS3231 - по работе с регистрами часов и календаря вопросов нет все работает нормально - а вот с температурой немогу понять где натупил при отображении плюсовых температур брешет, к примеру провереный термометр на 18в20 показывает 21.25 градуса а DS3231 - 25.25 градусов. а с отрицательными температурами вообще не адекватно отображает.
если я правильно перевел датасшит то в регистре 0х11 хранится целая часть температуры и знак (8 байт знак температуры, остальные семь целая часть температуры), в регистре 0х12 в 7 и 8 байте хранится дробная часть температуры с разрешением 0.25.

к примеру

0х11 = 0b00011001
0x12 = 0b0100000

в итоге имеем знак температуры 0 т.е. +
температура 0b 0011001 01 (0b0011001=25)(0b01=1; 1*0,25=0,25)
в итоге температура +25.25 градусов

про отрицательную температуру в даташите нислова

может ктото уже работал с этой DS3231 и поправит меня может я в чемто ошибаюсь и неправильно понял датасшит?

привожу кусок кода вывода температуры


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ds3231_temperature(void)
{
unsigned char temp;
 
temp=rtc_read(0x11);
LCD_Goto(13,2);
     if (temp & 0b10000000)
            {
             LCD_WriteData('-');
            }
        else 
            {
             LCD_WriteData('+');
            };
lcd_out(temp&0b01111111);
LCD_WriteData('.');
temp=rtc_read(0x12);
lcd_out(((temp&0b11000000)>>6)*25);
 
    
}
вот датасшит
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вложения
Тип файла: pdf DS3231-DS3231S.pdf (363.4 Кб, 32 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2013, 12:31
Ответы с готовыми решениями:

Работа с DS3231 вопросы
подключил DS3231 к железному TWI попробовал сначала библиотеку от DS1307 - заработало но у меня...

ATtiny2313a +I2C + DS3231
Здравствуйте. Перелистал весь интернет и никак не могу решить поставленую задачу. А именно...

Проблема с DS3231
Потихоньку в перерывах между учебой и курсачем делаю часы, в процессе обдумывания конструкции решил...

Подключение RTC DS3231 к AVR
Уважаемые, форумчане! Хочу подключить RTC DS3231 к МК AVR. Есть некоторые сомнения по поводу того,...

9
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
09.11.2013, 12:47 2
...поройтесь в сорцах http://www.radiokot.ru/circuit/digital/home/123, там тоже аналогичный использован.
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 12
09.11.2013, 13:04  [ТС] 3
Цитата Сообщение от raxp Посмотреть сообщение
...поройтесь в сорцах http://www.radiokot.ru/circuit/digital/home/123, там тоже аналогичный использован.
код из этого проэкта
C#
1
2
3
4
5
6
S16 ds3231_temperature(void) {
    U16 t = (((U16)(ds3231_buf[DS3231_TEMP_MSB] & ~0x80)) << 2) | (((U16)ds3231_buf[DS3231_TEMP_LSB]) >> 6);
    t = (t * 5) >> 1;
    if (ds3231_buf[DS3231_TEMP_MSB] & 0x80) t = -t;
    return (S16)t;
}
немогу понять назначение этой конструкции t = (t * 5) >> 1;
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
09.11.2013, 16:58 4
t = t*5/2
0
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 12
09.11.2013, 17:40  [ТС] 5
Цитата Сообщение от korsaj Посмотреть сообщение
t = t*5/2
спасибо за ответ но я немного неправильно задал вопрос , я имел ввиду зачем выполняется эта строчка?
0
Тутошний я
2079 / 1145 / 211
Регистрация: 03.11.2009
Сообщений: 4,043
Записей в блоге: 2
09.11.2013, 18:32 6
Цитата Сообщение от djeki7 Посмотреть сообщение
спасибо за ответ но я немного неправильно задал вопрос , я имел ввиду зачем выполняется эта строчка?
Если правильно понял, то это умножение t на 2,5.
В микроконтроллерах с дробями сложно работать. Они так код упростили.
1
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 12
09.11.2013, 21:47  [ТС] 7
Цитата Сообщение от Grey Посмотреть сообщение
Если правильно понял, то это умножение t на 2,5.
В микроконтроллерах с дробями сложно работать. Они так код упростили.

точно!!!!! как я сам не догадался t=t*5/2 ......5/2=2,5...... t=t*2.5

разбирая их код дальше я нашел строчку где перед выводом на индикацию значение t/10

в итоге получается t=t*0,25 - а 0.25 это как раз и есть минимальное разрешение термометра

осталось только разобраться с выводом отрицательной температуры...

Добавлено через 7 минут
if (ds3231_buf[DS3231_TEMP_MSB] & 0x80) t = -t;
здесь если знак температуры -
значение преобразуется в отрицательное
в итоге на выходе имеется двухбайтовое число со знаком
может у когото есть идеи как преобразовать его в строку для вывода на ЖК
p.s. я только недавно начал осваивать си - и с числами со знаком еще не работал...

Добавлено через 26 минут
кажется я сам разобрался чтобы представить отрицательное число в виде положительного нужно выполнить поразрядную инверсию числа и прибавить к результату 1 . к примеру 28=0b00011100, -28=0b11100100
~0b11100100=0b00011011 0b00011011+1=0b00011100=28;
википедия рулит

также разобрался с разницей показаний ds18b20 и ds3231
все дело в разной теплопроводности корпусов, мой ds18b20 выполнен в виде металического сенсора - и очень сильно улавливает малейшие сквозняки в комнате.. поместил оба термометра в геметичную емкость ввиде бутылки и показания температур стали одинковыми.... вот теперь только осталось понять какому датчику верить металическому или пласмасовому
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
09.11.2013, 21:59 8
- про дополнительный код рулит литература по цифровой технике ...но это не значит, что все контроллеры ИЖК обязаны его понимать
- верить и тому и тому, с учетом тепловой инерции
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
10.11.2013, 10:26 9
Еще датчик температуры нужно опрашивать как можно реже, так как при обмене данными он разогривается и начинает врать. А всякие там теплоотводы немного сглаживают колебания внутренней температуры датчика.

Добавлено через 8 минут
Цитата Сообщение от djeki7 Посмотреть сообщение
точно!!!!! как я сам не догадался t=t*5/2 ......5/2=2,5...... t=t*2.5

разбирая их код дальше я нашел строчку где перед выводом на индикацию значение t/10

в итоге получается t=t*0,25 - а 0.25 это как раз и есть минимальное разрешение термометра
Только такие действия очень неоправданы. Загружать мк двумя алгоритмами деления и одним алгоритмом умножения - это расточительно. t = ((t*5)/2)/10 = t/4, где t = t/4 = t>>2, последнюю операцию мк делает за один такт (в си за два такта).
2
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 12
10.11.2013, 12:27  [ТС] 10
Цитата Сообщение от korsaj Посмотреть сообщение
Еще датчик температуры нужно опрашивать как можно реже, так как при обмене данными он разогривается и начинает врать. А всякие там теплоотводы немного сглаживают колебания внутренней температуры датчика.

Добавлено через 8 минут

Только такие действия очень неоправданы. Загружать мк двумя алгоритмами деления и одним алгоритмом умножения - это расточительно. t = ((t*5)/2)/10 = t/4, где t = t/4 = t>>2, последнюю операцию мк делает за один такт (в си за два такта).
спасибо учту это при написании кода...
приклеил небольшой радиатор к микросхеме стала более адекватно отображать температуру.... но все же я склоняюсь к использованию 18В20 его можно вынести наружу - а 3231 будет улавливать нагрев от других деталей внутри корпуса устройства и соответственно врать производители помоему немного погарячились всунув термометр в часы реального времени..... но для общего развития всеже интерестно с ней поработать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2013, 12:27

RTC часы реального времени DS3231
Ребята подскажите, код универсальный и простой,запускаю все нормально работает, когда отключаю...

Модуль часов DS3231, преобразование UNIX TimeStamp uint32_t в uint64_t
Доброго времени суток! Имеется модуль часов DS3231, пользуюсь либой отсюда ...

Осуществить вывод значений аргумента и функции, сопровождая вывод наименованиями переменных
Вычислить значение функции, заданной в таблице. Осуществить вывод значений аргумента и функции,...

Осуществить вывод значений аргумента и функции, сопровождая вывод наименованиями переменных
Вычислить значение функции, заданной в таблице. Осуществить вывод значений аргумента и функции,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.