Зарегистрирован: Чт мар 22, 2012 20:28:49 Сообщений: 82
Рейтинг сообщения:0
Всем привет! Столкнулся с проблемой, сижу туплю, ничего не понимаю. Делал я как-то давно устройство для считывания температуры с нескольких датчиков 1-Wire DS18B20. Изначально оно было сделано на ATmega8. На одной шине сидело несколько датчиков и я по персональному ID стучался к каждому датчику и читал с него температуру. Сначала ID каждого датчика жестко прописывал в прошивку, потом, когда датчики начали выходить из строя, чтобы каждый раз контроллер не перепрошивать прикрутил считывание из ROM датчика его ID и сохранение в EEPROM контроллера. Все работало как часы (только время не показывало ). Но вот решил я пересесть с AVR-ок на STM-ки. Попробовал сначала с одним датчиком через команду игнора адреса датчика (0xCC). Работает. Потом жестко прописал адреса нескольких датчиков в прошивке и посадил их на одну шину. РАБОТАЕТ. Начал прикручивать считывание ID из ROM датчика и .... уперся. ОНО НЕ СЧИТЫВАЕТСЯ. Вернее считывается правильно только первый байт, потом полная ахинея. Я просто в ногдауне. Если все остально еработает - следовательно с протоколом все в порядке, код портирован правильно. Именно считывание адреса из ROM не работает и именно на STM32 (кстати не толко на F103, но и на F303). Не могу понять в чем прикол.
Я намеренно не выкладываю свой код, т.к. имею достаточно опыта, чтобы понять, что криминала там нет и забивать вам голову не обязательно.
Заголовок сообщения: Re: DS18B20 в паре с STM32F103C8
Добавлено: Пт май 29, 2020 17:53:05
Встал на лапы
Зарегистрирован: Чт мар 22, 2012 20:28:49 Сообщений: 82
Рейтинг сообщения:0
Вопрос решился, хотя яснее не стало. Читать 64-байтный ROM из датчика нужно не в массив из 8-байт, в 64 байтную переменную. В чем разница - не понятно, по факту абсолютно теже операции.... В AVR работало
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
long long one_wire_read_rom(void) { long long bit=0; long long a=0; for (int i=0; i<64; i++) { one_wire_low(); delay_us(5); one_wire_hight(); delay_us(15); bit = one_wire_level(); a |= bit<<i; delay_us(90); } return a; }
первый вариант работает на AVR, на STM32 не работает. Второй вариант работает на STM32, на AVR не пробовал.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
VladislavS, так ведь и подход абсолютно разный: на аврке нет DMA, там реализовать 1-wire можно только двумя способами: таймер+прерывание или UART. А на STM32 можно таймер с DMA, можно USART с DMA… // вообще, мегадебильнейший протокол: аппаратно МК не поддерживает, значит, оно нафиг никому не нужно! Я так считаю. И ту древнюю реализацию, код которой скинул, уже давно не поддерживаю, т.к. выкинул из головы эту блажь — использовать идиотские DS18B20, когда есть нормальные датчики, работающие на I2C или SPI!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Заголовок сообщения: Re: DS18B20 в паре с STM32F103C8
Добавлено: Пн июн 01, 2020 13:25:08
Встал на лапы
Зарегистрирован: Чт мар 22, 2012 20:28:49 Сообщений: 82
Рейтинг сообщения:0
Цитата:
Да чего вы кинулись код то кидать? ТС всего лишь разницу между 8 и 32 битным процом не видит.
"Разрядность" - ну ни фига себе. Надо в словарик записать....
Чем отличаются русский, американский и еврейский форумы? - на американском форуме вы задаете вопрос и вам дают ответ - на еврейском форуме вы задаете вопрос и вам задают встречный вопрос - на русском форуме вы задаете вопрос и вам долго объясняют почему вы такой мудак.
ddimochka, я первым же сообщением под вашим кодом дал информацию для размышления. Это куда полезней, чем просто пережёванное в ротик положить. Я на 95% уверен, что дело в "индейцах".
240265, очень даже идиотский, т.к. в низшей ценовой категории нет ни одного микроконтроллера, аппаратно поддерживающего 1-wire. И приходится городить велосипед-квадратные-колеса, абы этот говнопротокол реализовать!
В итоге теряем 1 канал DMA + USART или таймер! А был бы датчик на I2C или SPI, ничего терять не пришлось бы... Ну или хотя бы взять 5-рублевый терморезистор и повесить его на свободный канал АЦП! Всяко более удачное решение (да и врать будет ничуть не хуже DS18).
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Допустим нужно подключить 100 датчиков на значительном (десятки метров) расстоянии от МК. У I2C или SPI будет преимущество?
Конечно: городим по узлу на гроздь датчиков, узлы соединяем по CAN-шине — вуаля! Вот — работает, 5 узлов, CAN-шина, 80 термодатчиков (но я тоже через одно место сделал: по-человечески, надо было брать аналоговые платиновые калиброванные термодатчики и городить на каждой "грозди" АЦП с мультиплексорами по трехпроводной схеме, тогда можно было бы действительно достигнуть точности в 0.01°C в заданном диапазоне). А 1-wire вам в этом случае вообще никак не поможет, потому что 100 датчиков на десятках метров удаления вы на одну шину не посадите! В случае же с CAN-шиной по витухе пускается и 12..36В напруги, в итоге и связь есть, и питание. А датчики подключаем к узлам кабелями не длинней 2..3м.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Конечно: городим по узлу на гроздь датчиков, узлы соединяем по CAN-шине — вуаля!
Что конечно? Вы считаете преимуществом кучу дополнительных электронных компонентов?
Eddy_Em писал(а):
А 1-wire вам в этом случае вообще никак не поможет, потому что 100 датчиков на десятках метров удаления вы на одну шину не посадите!
Почему же можно.
Eddy_Em писал(а):
А датчики подключаем к узлам кабелями не длинней 2..3м.
Доп. компоненты, доп. расходы. Они должны быть обоснованными. В таком случае на 100 датчиков понадобится 100 преобразователей CAN<->интерфейс датчика. Получится слишком дорого и громоздко.
Заголовок сообщения: Re: DS18B20 в паре с STM32F103C8
Добавлено: Вт июн 02, 2020 14:32:51
Встал на лапы
Зарегистрирован: Чт мар 22, 2012 20:28:49 Сообщений: 82
Рейтинг сообщения:0
Цитата:
ddimochka, я первым же сообщением под вашим кодом дал информацию для размышления. Это куда полезней, чем просто пережёванное в ротик положить. Я на 95% уверен, что дело в "индейцах".
Ды я понял. И так уж размышляю в этом направлении. Но пока в принципе все получается, я не буду лезть в дебри - не до того, хотя на досуге нужно бы плотно разобраться.
Цитата:
Мурик писал(а): Почему не USART? Ещё один Вопрос не в этом был!!!
USART занят под другие нужды. Ну и да, вопрос не об этом.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения