Программа - "Поиск датчиков температуры ds18b20, DS1820 и DS18S20 на СОМ портах"
Интересует продолжение публикаций на эту тему
- Да
53 - Нет
6 - У меня Ардуино
7
Всего голосов: 66
mr.ptec
Доктор наук
Петрозаводск
703 171
Отв.180 06 Нояб. 16, 18:02
sevpro, он имел право надеяться на CD диск в комплекте т.к. на сайте указано наличие библиотек и ещё чего то там для железки.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.181 06 Нояб. 16, 18:56, через 55 мин
как на 8-ми битах результата один из которых - знак (т.е. результат = 7бит, диапазон значений 0 - 127) рожается ещё три разряда после запятой?m16, 06 Нояб. 16, 14:21Ты знаешь как на однобитных АЦП получают 24бита разрешения?
Методом последовательных уточнений значения.
Дело в том что у ds1821 внутри фигова туча регистров.
Есть регистр в которм хранится 8битное значение, типа целое число.
И есть два регистра в которых хранится уточнение, типа дробь, которая уточняет исходное значение.
Исходный 8 битный регистр имеет дискретность постоянну, т.е. диапазон разбит на 256 равных отрезков.
А уточняющие регистры разбивают каждый из 256 отрезков на неравное число подотрезков.
Т.е. эквивалентная битность АЦП меняется в зависимости от температуры.
В результате при разных температурах разрешение получается разным 0.003-0.005°С.
briareus
Бакалавр
Москва
62 39
Отв.182 06 Нояб. 16, 20:55
сообщение удалено
m16
Модератор
Тамбов
1.9K 1K
Отв.183 06 Нояб. 16, 23:21
LM35LM35 - хороший середнячок
плюс средненький ацп
плюс софтигорь223, 06 Нояб. 16, 14:27
средненький ацп в 16 рарядов? не бывает таких. от AD они более чем хороши.
то что ВБ приличный софт написал - не сомневаюсь
Разрешение 0,001С, сам видел как это работает.игорь223, 06 Нояб. 16, 14:27
П.С. Для наших задач разрешение более чем 0,1Сигорь223, 06 Нояб. 16, 14:27а)в интересуещем нас диапазоне температур 30-100°С разрешение - величина относительная (эфимерная) ничего не говорящая о темпераруре реальной
б)точность измерений в указанном диапазоне - есть real time .
так что нам нужно, а) или б)?
******************************************************************************************
И есть два регистра в которых хранится уточнение, типа дробь, которая уточняет исходное значение.Kotische, 06 Нояб. 16, 18:56ты об этом?
DS1821:недокументированный протокол - ключевая фраза . т.е. производитель в лице далласа не гарантирует истину считываемых показаний при точности измерений
1. Issue Start Convert protocol (EEh).
2. When conversion is finished, read 8–bit temperature
value (AAh).
3. Convert value from 2’s complement to signed inte-
ger (named temp_read).
4. Read 9–bit counter value (A0h; named
count_remain).
5. Send undocumented Load Counter protocol (41h).
6. Read 9–bit counter value (A0h; named
count_per_degree).
7. Calculate high–resolution temperature using the
high resolution temperature equation given in the
previous section. Note that for the DS1821, 1/2LSB
= 0.5
Accuracy is ±1°C over 0°C to +85°C rangeпосему даллас сие безобразие в даташите не оговаривает (официальный документ же) а публикует апноту Application Note 105 о "закладках" за которые отвечать не прийдётся.
******************************************************************************************
ну это полбеды. вторая - протокол 1-wire который не реализован на аппаратном уровне ни в одном контроллере . реализация чисто софтовая с соблюдением всех таймингов по протоколу, отсюда запрет всех прерываний с вытекающим - not real time mashine. лично меня это не устраивает в совокупе с Accuracy is ±1°C и Converts temperature to a digital word in 1 second (max) .
******************************************************************************************
я по уши наковырялся с дс-ками, потратил куеву тучу времени (нервов) без приемлемого резльтата , плюнул, забросил . без проблем перешёл на pt1000 + 24bit аdc . уж третий год работает безотказно, чего и Вам желаю.
Mnz
Магистр
Город
254 86
Отв.184 06 Нояб. 16, 23:44, через 24 мин
протокол 1-wire который не реализован на аппаратном уровне ни в одном контроллере . реализация чисто софтоваяm16, 06 Нояб. 16, 23:21Почти во всех контроллерах есть USART, который вместе с DMA позволяет почти аппаратно реализовать 1-Wire протокол.
m16
Модератор
Тамбов
1.9K 1K
Отв.185 06 Нояб. 16, 23:50, через 6 мин
и это всё полезное что ты извлёк из моего опуса?
два раза почти - НЕЗАЧОТ.
два раза почти - НЕЗАЧОТ.
Отв.186 06 Нояб. 16, 23:52, через 3 мин
mr.ptec, с тех пор я заматерел и погрузился в Ардуину с головой. Могу тебе сваять из двух железок (плюс бп стабилизированный 5в релюхи и платку питать)
Железка 1:
http://www.aliexpress.com/item/32630652771/32630652771.html
Железка 2:
http://www.aliexpress.com/item/2042682698/2042682698.html
Купишь железки, подсоединишь одну к другой, все к бп, зальешь мой скетч - будет видеться как ком порт.
Протокол твой. Навскидку могу выдумать шлешь ему R11\n типа включить первое реле, он тебе R11 первое реле включено. R1?\n Ему шлешь типа как там первое реле? Он тебе R11 типа включено.ну и так со всеми реле.
Ну и цена в несколько раз меньше.
По поводу градусников: точно было бы здорово знать т в кубе, чтобы посчитать текущую навалку, время до конца процесса и т.д. Точно знать т в других узлах необходимо в очень узкоспециализированных задачах, до которых нужно дорасти. Для расчета навалки еще будет нужен датчик атм давления, ну и внести поправочный коэффициент в показания градусника. Ума не приложу как ты его будешь прикручивать оставаясь в парадигме комп-датчики. Если таки допустить промежуточное звено в виде микроконтроллера - датчик прикручивается за час максимум к Ардуине (все библиотеки есть) и так же будет тебе в ком-порт докладывать текущее давление, еще и градусники может опрашивать...
Железка 1:
http://www.aliexpress.com/item/32630652771/32630652771.html
Железка 2:
http://www.aliexpress.com/item/2042682698/2042682698.html
Купишь железки, подсоединишь одну к другой, все к бп, зальешь мой скетч - будет видеться как ком порт.
Протокол твой. Навскидку могу выдумать шлешь ему R11\n типа включить первое реле, он тебе R11 первое реле включено. R1?\n Ему шлешь типа как там первое реле? Он тебе R11 типа включено.ну и так со всеми реле.
Ну и цена в несколько раз меньше.
По поводу градусников: точно было бы здорово знать т в кубе, чтобы посчитать текущую навалку, время до конца процесса и т.д. Точно знать т в других узлах необходимо в очень узкоспециализированных задачах, до которых нужно дорасти. Для расчета навалки еще будет нужен датчик атм давления, ну и внести поправочный коэффициент в показания градусника. Ума не приложу как ты его будешь прикручивать оставаясь в парадигме комп-датчики. Если таки допустить промежуточное звено в виде микроконтроллера - датчик прикручивается за час максимум к Ардуине (все библиотеки есть) и так же будет тебе в ком-порт докладывать текущее давление, еще и градусники может опрашивать...
Mnz
Магистр
Город
254 86
Отв.187 07 Нояб. 16, 00:02, через 10 мин
и это всё полезное что ты извлёк из моего опуса?m16, 06 Нояб. 16, 23:50Я дополнил твой ответ, ведь не обязательно программно формировать временные слоты протокола 1-Wire. Эту задачу можно переложить на USART и тогда прерывания не помешают работе с датчиками.
Отв.188 07 Нояб. 16, 00:08, через 7 мин
Коллеги, подождите. Далласы да не очень точны (хотя изменение т отслеживают до сотых) но работают асинхронно, хоть и медленно. Запустил преобразование и завел секундомер. Потом как время прошло - считал и опять преобразование запустил.
m16
Модератор
Тамбов
1.9K 1K
Отв.189 07 Нояб. 16, 00:13, через 6 мин
Mnz, нее. USART мне нужен для более важных дел. теперь мне можно рассказать о расширителе USART-а либо о камне с восемью USART-ми . простой вопрос - зачем?
Mnz
Магистр
Город
254 86
Отв.190 07 Нояб. 16, 00:23, через 10 мин
В многих микроконтроллерах больше одного USARTа. Например в STM32F103C8T6 их три штуки. А в STM32F098VCT6 их 8 штук.
Отв.191 07 Нояб. 16, 00:24, через 2 мин
Mnz, m16, коллеги мы про самогон говорим или про управление ядерным реактором? Жалко что ли пару регистров раз в секунду записать?
mr.ptec
Доктор наук
Петрозаводск
703 171
Отв.192 07 Нояб. 16, 00:35, через 11 мин
capsolo, Спасибо за предложение! Насчёт твоих железок скажу что платка что на ATmege в ту же цену что и stm32. Платка с релюхами зачётна недорога и видимо заточена под атмегу-ардуино.
Но зачем мне столько релюх, я триаки хочу.:)))
В этой малышке - STM32F103C8T6, насколько я понимаю в микроконтроллерах, выводы есть. В планах прикурить к ним триаки.
Хочется своих граблей.
Но зачем мне столько релюх, я триаки хочу.:)))
В этой малышке - STM32F103C8T6, насколько я понимаю в микроконтроллерах, выводы есть. В планах прикурить к ним триаки.
Хочется своих граблей.
Mnz
Магистр
Город
254 86
Отв.193 07 Нояб. 16, 00:40, через 6 мин
На плате с двух сторон находятся по 20 выводов. Три симстора без проблем прикрутить можно.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.194 07 Нояб. 16, 00:51, через 11 мин
m16, не находишь свои аргументы слегка тухловатыми?
Я из твоего опуса понял только что ты НЕ СМОГ.
А у меня этот датчик прекрасно работал и меня его работа вполне устраивала.
Я из твоего опуса понял только что ты НЕ СМОГ.
А у меня этот датчик прекрасно работал и меня его работа вполне устраивала.
Отв.195 07 Нояб. 16, 01:18, через 27 мин
mr.ptec, если с мк до сих пор не дружил лучше бы с Атмеги начать. Ардуина дает "мягкий" вход в мир МК. Сначала на коленке прототип устройства за вечер за счет многообразия библиотек, потом либо памяти не хватает либо тормозит - начинаешь эти библиотеки ковырять, оптимизировать. Потом даташит на мк курить, ну а потом уезжаешь с Ардуины и пишешь напрямую для мк. Я правда пошел наоборот. А то, о чем я написал будет меньше 100 строчек кода и делается на Ардуине за пару часов.
А так то стм более модная. Просто супер более модная, но чтобы получить доступ ко всем ее роскошествам надо прокачаться до определенного уровня. Это как с горными лыжами.
А так то стм более модная. Просто супер более модная, но чтобы получить доступ ко всем ее роскошествам надо прокачаться до определенного уровня. Это как с горными лыжами.
mr.ptec
Доктор наук
Петрозаводск
703 171
Отв.196 07 Нояб. 16, 02:07, через 50 мин
На плате с двух сторон находятся по 20 выводов. Три симстора без проблем прикрутить можноMnz, 07 Нояб. 16, 00:40ТОлько три? А не больше?
Сижу читаю-думаю, а не сильно я замахнулся заказав STM32F103C8T6 ? Может с чего то попроще начать?
Мне надо то всего то - USB свисток который определиться на HID устройство. На устройство можно будет повесить штук 6-8 симисторов...
sevpro
Доктор наук
Worldwide
769 281
Отв.197 07 Нояб. 16, 07:23
в совокупе с Accuracy is ±1°Cm16, 06 Нояб. 16, 23:21И не нормированном Error того же порядка.
реализация чисто софтовая с соблюдением всех таймингов по протоколуm16, 06 Нояб. 16, 23:21нужно признать, что тайминги весьма гибкие и в большинстве случаев не сильно мешающие если не сидеть полжизни в прерываниях, рассчитывая в них баллистику полета на марс.
Отв.198 07 Нояб. 16, 08:39
mr.ptec, на 8 симисторов и пару градусников хватит наны за глаза.
Mnz
Магистр
Город
254 86
Отв.199 07 Нояб. 16, 13:20
если с мк до сих пор не дружил лучше бы с Атмеги начать. Ардуина дает "мягкий" вход в мир МК.capsolo, 07 Нояб. 16, 01:18Минус ардуины в том что нет отладки, и если появится непонятка то посмотреть в железе как выполняется код и что в регистрах не получится.
ТОлько три? А не больше?mr.ptec, 07 Нояб. 16, 02:07Можно и больше. Выводов хватает.
Мне надо то всего то - USB свисток который определиться на HID устройство.mr.ptec, 07 Нояб. 16, 02:07Простой пример HID на бейсике в соседней теме [сообщение #12806507]
Если предпочитаешь Си, смотри пример в прикрепленном файле. Прием из компа производится в функции CUSTOM_HID_OutEvent_FS файла usbd_custom_hid_if.c
static int8_t CUSTOM_HID_OutEvent_FS (uint8_t event_idx, uint8_t state)
{
/* USER CODE BEGIN 6 */
if (event_idx == 0xAA) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
else if (event_idx == 0x55) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
return (0);
/* USER CODE END 6 */
}
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) != 0) // Кнопка не нажата
{
if (SendBuff != 40)
{
SendBuff = 40;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &SendBuff, 1); // Передача данных компьютеру.
}
}
else
{
if (SendBuff != 20)
{
SendBuff = 20;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &SendBuff, 1); // Передача данных компьютеру.
}
}