Например TDA7294

Форум РадиоКот • Просмотр темы - DS18B20 не определяется первый датчик в массиве
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 12, 2025 19:52:34

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


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



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вс сен 19, 2021 17:03:34 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Доброго дня всем.

На днях столкнулся с не приятностью. Подключил датчики DS18B20 параллельно (3 шт.) и прописал поиск w1_search. Поиск показывает 3 устройства. Начинаю читать и тут прикол... Первый датчик выдает белеберду а остальные текущую температуру. Убрал датчик косячный, остались нормальные. Включаю и находится 2 шт. отлично но читается с первого датчика тоже самое. Но он то целый!!! (((

Вопрос что я делаю не так?
Код стандартный!

поиск:
devices=w1_search(DS18B20_SEARCH_ROM_CMD,rom_code);
чтение:
temp=ds18b20_temperature(&rom_code[i][0]);

через devices=w1_init(); каждый датчик работает нормально...

И главное что и в протеусе тоже самое!!! :oops:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вс сен 19, 2021 18:59:07 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Так вам ни кто не поможет.
У каждого свой "стандартный код".

Полный код, и протеус в месте с проектом, в архив zip, rar не все скачивают.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вс сен 19, 2021 19:13:45 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Файл добавил.


Вложения:
test.7z [694.44 KiB]
Скачиваний: 125
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вс сен 19, 2021 21:39:15 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Ух сколько много скачали.
В общем это цена за бесплатный компилятор. Проблема в функции w1_read(), которая, к сожалению, куда-то уходит в cvavr_Final_Crack.exe.

Вот проект, собранный в версии 2.05.0, только не вздумайте пересобрать
Вложение:
test3.zip [104.35 KiB]
Скачиваний: 119


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вс сен 19, 2021 21:40:48 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
Стопудово проблема в функции w1_search.
Как вообще 1-wire реализовано? На таймере с прерываниями или на UART с прерываниями?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 06:08:31 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
WTF?!!

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 06:43:36 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
slav0n, что ты егозишь.

cvavr не бесплатный.
Единственно что я из него использую, это генератор начального кода.

Пусть от сюда скачает 1-Wire. Работа с DS18B20. Часть 3 там и для cvavr есть проектик.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 08:11:20 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
просто снял гипс, кайфую
винавр давно отучил от пользования сторонних кривых лаиб

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 08:33:22 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Это не кривая либа виновата, ардуиноиде туда же.
slav0n писал(а):
винавр
расскажи по подробнее, что установлено и чем пользуешься?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 09:15:36 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
чисто винавр, даже без студии


Вложения:
винавр.png [39.36 KiB]
Скачиваний: 93

_________________
ohmycode!
primuss3.com
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 09:17:45 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Я Вас понял! Спасибо за проверку. Буду ковырять библиотеки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 22:00:29 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Не поверите!!! Нашел косяк и он в компиляторе.
Поменяйте две строчки местами и о чудо, заработало!!!! Но пропадает вторая строка LCD :dont_know:
unsigned char lcd_buf[16], lcd_buf1[16];
unsigned char rom_code[MAX_DEVICES][9];

Перенос переменной из глобал в локал (unsigned char rom_code[MAX_DEVICES][9];) Соблюдается очередность и вторая строка появляется на LCD....
Разработчики прикольнулись :)))

И не важно это 3,12 или 2,05 везде одинаково!!! Убил весь вечер на поиски истины :write:
Миссия выполнена :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 23:30:36 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 4
Мораль сей басни такова: пиши код сам!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Пн сен 20, 2021 23:32:40 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 4
Скорее стэк затирает что-то.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 06:55:26 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Карбофос писал(а):
Скорее стэк затирает что-то.
И ни кто на это не обратил внимание.
Было
Код:
unsigned char lcd_buf[16], lcd_buf1[16];
unsigned char rom_code[MAX_DEVICES][9];
вот в этом коде
Код:
sprintf(lcd_buf,"%u DS1820\nDevice detected",devices);
больше 16 символов, в строку то lcd_buf не влазит.

ТС lcd_buf1 у тебя в коде не используется, его можно убрать.

Вот здесь
Код:
unsigned char lcd_buf[16]
поставь не 16, а 36 символов (с запасом), а так нужно 25 символов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 09:00:15 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Скорее стэк затирает что-то.

Да совершенно верно. Две переменные были объединены и получили один массив регистров. А у контроллера видимо нет проверки соблюдения распределения регистров. Поэтому он наезжал на следущий регистр при записи текста в регистр lcd_buf.
Я программист промышленных плк. И у промышленных плк такое возможно когда используешь память косвенно на заранее распределенную память или меркеры памяти которые уже представлены в виде готового набора регистров.

Перенос на локалку, сожрало следующие регистры, поэтому и появилась вторая строка.

Добавлено after 23 minutes 27 seconds:
Скорее всего это касается настроек компелятора. Будет время поковыряю его.

Добавлено after 48 minutes 44 seconds:
Если не мучаться то расширить массив lcd_buf до 32 символов ну или сидеть и считать динамические данные чтоб не прыгнуть на соседний регистр)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 09:43:19 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
AleksFD писал(а):
до 32 символов
мало, может не хватить.
\n то же символ, а так же 0 символ конца строки.
Так что лучше сидеть и считать.

Вот вам еще одна фишка: задайте переменную
Код:
unsigned char count;
а потом
Код:
count = sprintf(lcd_buf,"%u DS1820\nDevice detected",devices);
так вы будете знать сколько символов было преобразовано в строку, +1 символ конца строки.

Кроме всего прочего перед u поставьте 1,
Код:
%1u
что гарантирует 1 символ для переменной devices.


Последний раз редактировалось Dimon456 Вт сен 21, 2021 09:53:58, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 09:51:43 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Вот вам еще одна фишка: задайте переменную
Код:
unsigned char count;
а потом
Код:
count = sprintf(lcd_buf,"%u DS1820\nDevice detected",devices);
так вы будете знать сколько символов было преобразовано в строку.

Уже будет поздно :roll: Мы только узнаем сколько лишнего затели.

Лучше поставить в глобал последней и будет автоматически отрезаться хвост :wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 09:56:43 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
AleksFD писал(а):
Лучше поставить в глобал последней и будет автоматически отрезаться хвост
не вариант, не всегда это возможно, а вдруг там стек будет расположен, кто знает куда его компилятор помещает.
И вам что, оперативки жалко?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18B20 не определяется первый датчик в массиве
СообщениеДобавлено: Вт сен 21, 2021 10:04:20 
Родился

Зарегистрирован: Вс сен 19, 2021 16:50:36
Сообщений: 7
Рейтинг сообщения: 0
Оперативки вообще не жалко! Главное избежать такой мины.

Добавлено after 3 minutes 5 seconds:
А лучше написать функцию по проверке длины текста до склейки.


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

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


Кто сейчас на форуме

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


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

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


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