roboforum.ru

Технический форум по робототехнике.

ds1821 подключение и опрос

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

ds1821 подключение и опрос

Сообщение Myp » 06 мар 2013, 13:10

с помощью Семёнова Михаила приобрёл я вот такие козюльки.
для использования по назначению, то есть в качестве термостата.
даташит: http://datasheets.maximintegrated.com/en/ds/DS1821.pdf
Изображение

на радостях воткнул в ардуину, минус на минус, плюс на плюс, подцепил резистор для подтяжки (по даташиту 4k7 но нашел только на 5к) и сигнальную ногу на пин 10, загрузил скетч с форума ардуины, в ардуину.
Код: Выделить всёРазвернуть
#include <OneWire.h>
#include <Wire.h>

OneWire  ds(10);  // on pin 10

void setup(void) {
  Serial.begin(9600);
  ds.reset();

}

unsigned int readBytes(int count)
{
    unsigned int val = 0;
    for (int i = 0; i < count; i++)
    {
        val |= (unsigned int)(ds.read() << i * 8);
    }
    return val;
}

void loop(void) {
  byte temp_read = 0;
  unsigned int count_remain = 0;
  unsigned int count_per_c = 0;
  byte configuration_register = 0;

  ds.reset();
  ds.write(0xEE); //Start Converting the temperatures 
 
   do {
        delay(1);
        configuration_register = 0;
        ds.reset();
        ds.write(0xAC);

        // Read the configuration Register from the DS1821
        configuration_register = readBytes(1);
    } while ((configuration_register & (1 << 7)) == 0); // If Bit #8 is 1 then we are finished converting the temp

 
    // Get Temp
    ds.reset();
    ds.write(0xAA);
    temp_read = readBytes(1); ;

    // Get Count Remaining
    ds.reset();
    ds.write(0xA0);
    count_remain = readBytes(2);

    // Load The Counter to populate the slope accumulator
    ds.reset();
    ds.write(0x41);

    // Read Count Per Deg
    ds.reset();
    ds.write(0xA0);
    count_per_c = readBytes(2);

    // If we are reading above the 200 mark then we are below 0 and need to compensate the calculation
    if (temp_read >= 200) temp_read -= 256;

    float highResTemp = (float)temp_read - .5 + (((float)count_per_c - (float)count_remain) / (float)count_per_c);

    highResTemp = (float)((1.80 * highResTemp) + 32.00);
    Serial.print(highResTemp);
    Serial.println(" Fahrenheit");

   delay(1000);
}

и...
ничего :(
Код: Выделить всёРазвернуть
configuration_register = readBytes(1);

регистр не читается (постоянно ноль) и мне кажется что датчик не отвечает вобще.
попробовал второй, тоже самое, ноль реакции.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение galex1981 » 06 мар 2013, 13:14

Резистор подтяжки притянул к + или земле?
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: ds1821 подключение и опрос

Сообщение Myp » 06 мар 2013, 16:05

к плюсу

Добавлено спустя 2 часа 40 минут 14 секунд:
вот тута http://blog.jgc.org/2011/02/gaga-1-temp ... ement.html
чел говорит
There is an Arduino project for this called OneWire but I had trouble getting it going and it was late so I wrote my own code. (Also, this is the sort of thing I love).

в том смысле что "какая гадость эта ваша заливная рыба!"

и написал всё сам по даташиту, тобишь просто дергал ногу и читал ответ.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение Myp » 06 мар 2013, 20:56

попробовал

градусник возвращает всегда 80h
тобишь 10000000
если запрашивать температуру, если заправшивать состояние конфигурации.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение Radist » 06 мар 2013, 22:26

Вообще микросхемы эти хорошие, работал с ними. На 99% уверен, что косяк в программе. Таймслоты должны быть правильными, а увидеть это поможет осциллограф. У меня тоже не сразу заработало.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: ds1821 подключение и опрос

Сообщение Myp » 06 мар 2013, 23:24

у всех работает у меня не работает.
попробую в 023 ардуине скомпилиться. может дело в этом.

Добавлено спустя 28 минут 20 секунд:
в 023 тоже чото непонятно
всё время статус 01010010 выдаёт
восьмой бит типа 0, значит процесс вычисления температуры идёт
но в даташите написано что "0 at POR"

а что аткое POR не напсиано....

Добавлено спустя 3 минуты 37 секунд:
блиииин
температура не считается потому что бит окончания вычисления температуры не ставится в 1
а не ставится он в единицу потому что он ноль
DONE = 0 — Temperature conversion is in progress.
DONE = 1 — Temperature conversion is complete.
NOTE: DONE = 0 at POR.

ну и как эту ахинею расшифровать?

Добавлено спустя 5 минут 35 секунд:
в другом даташите более старом такой припсики вобще нету...
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение dccharacter » 07 мар 2013, 03:59

Por - это power on reset кажись. Т.е. После после подключения питания

Добавлено спустя 42 секунды:
Этот бит, скорее всего, не пишется, а ридонли
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ds1821 подключение и опрос

Сообщение Myp » 07 мар 2013, 10:21

ну да, ридонли, и я его должен считывать периодически
как только он станет единицей значит температура посчиталась и можно считать её.
а он единицей никогда не становится...

там алгоритм работы такой, я посылаю запрос на вычисление температуры, потом жду пока этот бит станет единицей и потом считываю готовую температуру
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение Myp » 08 мар 2013, 15:25

вощим так
если не ждать этот бит готовности то получается вот что

19.79
22.56
22.20
20.59
20.83
23.14
21.62
20.74
9.35
20.47
18.85
22.87
21.18
19.53
22.28
21.71
19.92
22.60

Добавлено спустя 1 минуту 48 секунд:
а вот тут я его грею зажигалкой :)

19.11
17.14
22.10
15.32
24.79
38.82
52.50
61.08
69.83
73.61
83.26
98.16
105.37
125.25
124.69
123.14
122.90
120.43
123.07
123.54
110.33
94.26
89.39
80.69
78.43
63.38
55.44
58.39
54.31
53.24
48.84
29.00

Добавлено спустя 1 минуту 18 секунд:
тоесть он работает... но выдаёт чтото +- километр

Добавлено спустя 21 минуту 53 секунды:
не работает чтение статусных битов
и по формуле из даташита не вычисляется точная температура.
если брать просто температуру то работает

highResTemp - 13.03, Temp - 23.00
highResTemp - 8.79, Temp - 23.00
highResTemp - -0.00, Temp - 24.00
highResTemp - 20.41, Temp - 24.00
highResTemp - 15.15, Temp - 24.00
highResTemp - 24.44, Temp - 24.00
highResTemp - 27.54, Temp - 28.00
highResTemp - 31.61, Temp - 36.00
highResTemp - 34.50, Temp - 37.00
highResTemp - 34.25, Temp - 41.00
highResTemp - 43.41, Temp - 46.00
highResTemp - 34.70, Temp - 45.00
highResTemp - 40.10, Temp - 45.00
highResTemp - 36.87, Temp - 44.00
highResTemp - 40.61, Temp - 43.00
highResTemp - 39.58, Temp - 43.00
highResTemp - 52.12, Temp - 55.00
highResTemp - 67.34, Temp - 74.00
highResTemp - 82.50, Temp - 92.00
highResTemp - 99.74, Temp - 109.00
highResTemp - 122.92, Temp - 125.00
highResTemp - 123.12, Temp - 125.00
highResTemp - 119.26, Temp - 125.00
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение elmot » 10 мар 2013, 13:17

мур, у тебя как запитан датчик? может он пытается питаться по сигнальному проводу, как классический 1-wire, а ты ему чегой-то недодаешь, он и пересбрасывается все время, с недожору.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: ds1821 подключение и опрос

Сообщение Myp » 10 мар 2013, 14:43

плюс датчика на плюс ардуины, минус на минус ардуины, сигнальная линия чере 5к притянута к питанию.

температуру он выдаёт, даже правильную
но вот эта фигня почему-то не работает

HIGH-RESOLUTION TEMPERATURE READINGS
The user can calculate temperature values with higher than 8-bit resolution using the data remaining in
the counter and slope accumulator when the temperature conversion is complete. To do this the user must
first read the temperature from the 8-bit temperature register. This value is called TEMP_READ in the
high-resolution equation (see Eq. 1). The 9-bit counter value must then be obtained by issuing the Read
Counter [A0h] command. This value is the count remaining in the counter at the end of the gate period
and is called COUNT_REMAIN in Eq. 1. Next the Load Counter [41h] command must be issued, which
loads the 9-bit slope accumulator value into the counter register. The slope accumulator value (called
COUNT_PER_C in Eq. 1) can then be read from the counter by again issuing the Read Counter [A0h]
command. The slope accumulator value is called “COUNT_PER_C” because it represents the number of
counts needed for an accurate measurement at a given temperature (i.e., the counts per degree C). The
high-resolution temperature can then be calculated using Eq. 1:
Eq. 1) "формула"
High-resolution temperature readings cannot be used while in continuous conversion mode. Also, the
Read Counter [A0h] and Load Counter [41h] commands must not be used while in continuous conversion
mod
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение rig » 10 мар 2013, 20:21

для кодевижена у меня было так:
Код: Выделить всёРазвернуть
 void wait(void)
{char x;
w1_init();                           // инициализация датчика
w1_write(0xEE);                      // WRITE COMMAND START CONVERT EEh
do
{
w1_init();                           // инициализация датчика
w1_write(0xAC);                      // WRITE COMMAND READ STATUS ACh
x=w1_read();
}
while(!(0b10000000&x));      // READ STATUS
}

void main(void)
{
// Declare your local variables here

init_tiny2313(); // инициализация МК

// Global enable interrupts
#asm("sei")

lcd_init(16);

{
lcd_clear();
lcd_gotoxy(0,0);
}

while (1)
{
// Place your code here
wait();                              // ждем готовности
w1_init();                           // инициализация датчика
w1_write(0xAA);                      // WRITE COMMAND READ TEMPERATURE 0AAh
TEMP_READ=w1_read();                 // READ

w1_init();                           // инициализация датчика
w1_write(0xA0);                      // WRITE COMMAND READ COUNTER A0h
COUNT_REMAIN=w1_read();              // READ

w1_init();                           // инициализация датчика
w1_write(0x41);                      // WRITE COMMAND LOAD COUNTER 41h
w1_write(0xA0);                      // WRITE COMMAND READ COUNTER A0h
COUNT_PER_C=w1_read();               // READ

if (!COUNT_PER_C) COUNT_PER_C++;

temp_x_100=((short int)TEMP_READ)*100-50+100*(COUNT_PER_C-COUNT_REMAIN)/COUNT_PER_C;

//temp_x_100=2740; // для отладки отображения температуры
//if (temp_x_100>TEMPERATURA_MAX)TEMPERATURA_MAX=temp_x_100;
// if (temp_x_100<TEMPERATURA_MIN)TEMPERATURA_MIN=temp_x_100;
// if (time_count>400*20) out_min_max();
//    else
   out_displei();



};// END While

}// END MAIN


задействованы:
Код: Выделить всёРазвернуть
#include <tiny2313.h>
#include <1wire.h>
#include <delay.h>
#include <Hardware.h>
#include <7seg.h>


пробуй.

Добавлено спустя 1 минуту 30 секунд:
Chip type : ATtiny2313
Clock frequency : 8.000000 MHz
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: ds1821 подключение и опрос

Сообщение Myp » 24 мар 2013, 15:20

всё, работат
с какого-то перепугу проблема была в том что был снят бит 1SHOT тоесть там был 0 — Continuous conversion mode
и конечно точность была недоступна.
rig, спасибо, взял твой код с ним как-то красивее.
тока странно
целая часть правильная, а вот дробная часть от .00 до .50, на .50 перещёлкивается целая часть.
Код: Выделить всёРазвернуть
 temp_read-27.00 status_read-11010001 highResTemp - 27.10
temp_read-27.00 status_read-11010001 highResTemp - 27.10
temp_read-27.00 status_read-11010001 highResTemp - 27.09
temp_read-27.00 status_read-11010001 highResTemp - 27.07
temp_read-27.00 status_read-11010001 highResTemp - 27.05 
temp_read-26.00 status_read-11010001 highResTemp - 26.49 вот тут перещёлкнулось с 27 на 26 и дробная часть стала уменьшаться.
temp_read-26.00 status_read-11010001 highResTemp - 26.43
temp_read-26.00 status_read-11010001 highResTemp - 26.39
temp_read-26.00 status_read-11010001 highResTemp - 26.34


Добавлено спустя 1 минуту 8 секунд:
формула вот такая, из даташита
Код: Выделить всёРазвернуть
float highResTemp = (float)temp_read - 0.5 + (((float)count_per_c - (float)count_remain) / (float)count_per_c);


я бы ещё понял если бы там после .49 значения зависали, но выглядит какбудто дробную часть забыли умножить на 2

Добавлено спустя 55 минут 22 секунды:
вот вобщем скет последний который работает.

а вот фиг, запрещены вложения ардуиновские
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение Myp » 26 мар 2013, 15:40

ладно, мне это не надо, ограничусь умножением на 2 и буду брать только десятые доли градуса, точность в 0.1 градуса уже много :)
а термостат там и подавно только на целые градусы реагирует.

осталось самое страшное, сконфигурить термостат и отключить 1wire )))
после этого датчик можно перепрограмировать тока с помощью хитрой инициализации.
так что лучше как следует подумать прежде чем отключать 1wire
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: ds1821 подключение и опрос

Сообщение rig » 27 мар 2013, 13:02

Myp писал(а):тока странно
целая часть правильная, а вот дробная часть от .00 до .50, на .50 перещёлкивается целая часть.

я так дотошно не разбирался, но вроде небыло подозрительных бросков.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18