Например TDA7294

Форум РадиоКот • Просмотр темы - Нужна помощь по DS1820
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт мар 10, 2026 22:52:30

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Нужна помощь по DS1820
СообщениеДобавлено: Ср фев 18, 2009 06:56:12 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
Здравствуйте Все.
Надоело пользоваться сторонними драйверами для работы с 1-wire девайсами. Написал собственные и уперся в проблемку. Мозг порвал на пересчете температуры по формуле из даташа на DS1820. Ни чего не получается. Может кто делал такую обработку САМ на Си под WinAVR (хотя адаптировать не проблема) и может поделиться? Главное только не астму... Мозг не выдержит :)

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 08:31:28 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2122
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18490
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
а в чем проблема? там все просто, как колумбово яйцо...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 09:01:41 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
А вот у меня мозг не переваривает. t = temper - 0.25 + ([7]-[6])/[7]
Причем temper = [1]+([0]+1) Методом научного тыканья в небо получилось, что значение [0] надо потом на 16 делить (а написано на 2). Считает до положительную температуру более или менее нормально, а с отрицательными значениями лажа полная. Где то косяк...

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 09:22:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2122
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18490
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
я так понимаю, [7] - это вы так обозначили 7-й принятый байт буффера? так вот, во-первых, [7] = 16 всегда, во-вторых, temper (в ваших обозначениях) нужно округлить до целых, отбросив младший бит.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 10:02:08 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
Давайте так:
SCARTCHPAD[0..7]+1(CRC)
[0]- показания температуры 0xFA-0-0x92 (+0-)
[1]- преамбула знак температуры
..
..
..
[6]- REMINE
[7]- PER
[8]-CRC

Как будет формула выглядеть? Если есть - дай глянуть.

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 11:10:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2122
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18490
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
мда... плохо дело...
формула в даташите есть, словесное описание я дал - этого не достаточно?! вот вам код:
Код:
 temperature = ((int)SCRATCHPAD[0]>>1) - 0.25 + (SCRATCHPAD[7]-SCRATCHPAD[6])/SCRATCHPAD[7];
не забывайте, что температура передается не одним байтом, а двумя - тип int!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 17:47:39 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
Тут-то и вся свистопляска начинается. Делал так:

volatile float temperature;
volatile int TempH, TempL;

int _Temp=0x0000;
...
...
..
if (SCRATCHPAD[1] != 0x00)
_Temp=0xFF00+SCRATCHPAD[0];
else
_Temp+=SCRATCHPAD[0];

temperature = (float)((_Temp>>1) - 0.25) + (float)((SCRATCHPAD[7]-SCRATCHPAD[6])/SCRATCHPAD[7]);

TempH = (int)temperature/2;
TempL = abs((int)(temperature/2-TempH)*10);


И хочу заметить, дело не так плохо как кажется. Все драйвера для работы с переферией написаны вручную и работают на 5. Ну не выехал. Бывает. Ну коробит меня от кодвижн. Не могу пользовать его библиотеки по некоторым причинам, в следствии чего делаю сам.

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 18, 2009 19:03:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2122
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18490
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
MOHOXPOM писал(а):
Тут-то и вся свистопляска начинается. Делал так:
я ничего не имею против самостоятельности, сам не пользую кодвижные либы, сам пишу. но то, что вы творите - это меня удивляет... вроде я вам написал формулу правильную, вы float-ы поприлепили... ничего не понимаю...
Код:
unsigned char SCRATCHPAD[8];
float temp;
int *t;
read_scratchpad(SCRATCHPAD); // считываем регистры термометра
// и вычисляем температуру
t = (int*)SCRATCHPAD;
temp = (*t >> 1) - 0.25 + (SCRATCHPAD[7]-SCRATCHPAD[6])/SCRATCHPAD[7];
я извиняюсь, конечно - раньше поторопился с советом... надо через указатель первых 2 байта обрабатывать...
по-моему, никакой свистопляски! никаких иных манипуляций...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 00:30:11 
Мудрый кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 21
Зарегистрирован: Чт авг 21, 2008 22:03:30
Сообщений: 1733
Откуда: Одесса(Украина)
Рейтинг сообщения: 0
у меня на сях реализовано так(наверное коряво, но работает!):
перед всем этим в переменную t записываем данные с датчика. minus индикатор знака (0=+,1=-)

//ув модераторы-ничего не понимаю-вставляю в свое сообщение кусок кода(см файл), а само сообщение после добавления вместо этого кода содержит какуюто кашу, на него не похожую... :oops:


Вложения:
cod.txt [159 байт]
Скачиваний: 371

_________________
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 05:32:07 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
Подвела математика… Привык, что при делении в 50 % случаев получаются значения с запятой. Теперь догнал и усвоил. Вроде работает. Код(т) работает :)
СПАСИБО за помощь.

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 07:07:01 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
Еще вопросик. Маленький такой. Как определить устройство DS1820(18B20) или DS19S20? У них классификатор одинаковый ведь 10h, а работают маленько по разному.

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 07:18:25 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
РадиоЛоматель писал(а):
у меня на сях реализовано так(наверное коряво, но работает!):
перед всем этим в переменную t записываем данные с датчика. minus индикатор знака (0=+,1=-)


Так я делал, но меня интересовала сама формула из даташа.

Можно и так
Код:
int zhak = 1, temperature = 0x0000;
int TempL, TempH;

if (SCRATCHPAD[1]!=0x00){
          SCRATCHPAD[0]=0xFF-(SCRATCHPAD[0]-0x01);
          znak = (-1);
}

temperature = (zhak)*(SCRATCHPAD[0]);
TempH = (int)temperature / 2;
TempL = abs((int)(temperature / 2-TempH)*10);

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 19, 2009 08:05:55 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2122
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18490
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
MOHOXPOM писал(а):
Еще вопросик. Маленький такой. Как определить устройство DS1820(18B20) или DS19S20? У них классификатор одинаковый ведь 10h, а работают маленько по разному.
отличить можно довольно легко: если внимательно прочитать даташит, то можно заметить, что SCRATCHPAD[4] у DS1820 всегда считывается как 0xFF (это зарезервированный байт), а у DS18B20 - это конфигурационный регистр, в котором старший бит всегда 0.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 25, 2009 12:51:54 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт мар 18, 2008 08:25:31
Сообщений: 108
Откуда: Красноярск
Рейтинг сообщения: 0
А вот кто скажет что на самих датчиках лазером написано? Что название (модель) понятно, а что дальше? На считанный адрес устройства не похоже. Может кто знает? Просто интересно. :)

_________________
Как зачем мне голова?! Я ей ем!!!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y