STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
[uquote="a5021",url="/forum/viewtopic.php?p=4726223#p4726223"]с ds18b20, чтобы по максимуму в железе и без софтовых ожиданий/прерываний/ногодрыгов?[/uquote]
Возьмите и не мучайтесь:
https://aliexpress.ru/item/100500748286 ... 97b2n9PHf1
И параметры импульсов правильные, и фронты правильные, и работает всё через DMA, и даже гальваническая развязка очень просто реализуется.
Возьмите и не мучайтесь:
https://aliexpress.ru/item/100500748286 ... 97b2n9PHf1
И параметры импульсов правильные, и фронты правильные, и работает всё через DMA, и даже гальваническая развязка очень просто реализуется.
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="veso74",url="/forum/viewtopic.php?p=4726254#p4726254"]Вариант: использование UART (Single Wire, Half-Duplex) на 9600 и 115200 bps.
Идея: STM32 1-Wire (One Wire) Protocol + DS18B20 Code Example[/uquote]
Это довольно подозрительная статья. В коде после старта преобразования сразу же считывается результат, хотя известно, что 12-битное преобразование занимает до 750 миллисекунд. Да и побитовое считывание с активным использованием ядра такая себе автоматика. Ногодрыг, только в профиль. Это уж не говоря, что HAL_UART_Transmit -- блокирующая функция, где процессор тупо молотит циклы, ожидая флага от юсарта. Я немного другим интересуюсь: мне нужно получать данные с ds18b20 минимально отвлекая ядро.
Идея: STM32 1-Wire (One Wire) Protocol + DS18B20 Code Example[/uquote]
Это довольно подозрительная статья. В коде после старта преобразования сразу же считывается результат, хотя известно, что 12-битное преобразование занимает до 750 миллисекунд. Да и побитовое считывание с активным использованием ядра такая себе автоматика. Ногодрыг, только в профиль. Это уж не говоря, что HAL_UART_Transmit -- блокирующая функция, где процессор тупо молотит циклы, ожидая флага от юсарта. Я немного другим интересуюсь: мне нужно получать данные с ds18b20 минимально отвлекая ядро.
Ой, нет. Мою задачу это не упрощает, а усложняет.tonyk писал(а):https://aliexpress.ru/item/1005007482869799.html?sku_id=12000044505946600&spm=a2g2w.productlist.search_results.0.224597b2n9PHf1
И параметры импульсов правильные, и фронты правильные, и работает всё через DMA, и даже гальваническая развязка очень просто реализуется.
Re: STM32 новичку в ARM что к чему
[uquote="veso74",url="/forum/viewtopic.php?p=4726322#p4726322"]Подозрительно или нет для вас, работает.[/uquote]
Это работает неправильно. Неправильно работающий алгоритм меня не интересует.
Это работает неправильно. Неправильно работающий алгоритм меня не интересует.
Так все целиком надо менять. Решение не соответствует поставленной задаче.И это не мешает менять то, что вам не нравится.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1906
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Не зная подробностей вашего запроса, просто предложил способ.
Если вы так хорошо знакомы с методом, то предложите свой.
Если вы так хорошо знакомы с методом, то предложите свой.
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="veso74",url="/forum/viewtopic.php?p=4726340#p4726340"]Не зная подробностей вашего запроса, просто предложил способ.[/uquote]
все подробности исчерпывающим образом я изложил здесь. как-то неожиданно услышать про "незнание подробностей".
все подробности исчерпывающим образом я изложил здесь. как-то неожиданно услышать про "незнание подробностей".
я в полной мере представляю, что должно быть сделано, но пока еще не задумывался, как это может быть сделано. есть понимание, что возбуждение шины 1-wire микроконтроллером полностью детерминировано. моменты, когда мк должен переключать ногу вниз, а когда отпускать, известны для всего цикла измерения. раз так, то нужен, по сути, незамысловатый секвенсор, который бы проигрывал всю последовательность целиком.Если вы так хорошо знакомы с методом, то предложите свой.
Re: STM32 новичку в ARM что к чему
Да ну. В Далласе ведь работают люди, любящие усложнять жизнь других. Вы хоть мурзилку на эту микруху полистали? Примеры программ посмотрели?a5021 писал(а):Ой, нет. Мою задачу это не упрощает, а усложняет.
Re: STM32 новичку в ARM что к чему
вы правы. надо было покрупнее:

- Вложения
-
- enlarged.jpg
- (11.98 КБ) 416 скачиваний
Re: STM32 новичку в ARM что к чему
Согласен. Вам следует читать внимательней.a5021 писал(а):вы правы. надо было покрупнее:a5021,
P. S. Для тех кто читает не внимательно. В даташите на DS2489B приведены примеры на С работы устройствами на шине I2C. Для тех кто в танке могу добавить, что работа через конвертер UART-I2C никак не связана с девайсом, который выполняет в данном случае функцию мастера шины, лишь бы у него были функции приёма-передачи блоков данных через UART.tonyk писал(а):Примеры программ посмотрели?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1906
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: STM32 новичку в ARM что к чему
tonyk, внутри напр. STM32G4xx есть 5 x USART, для чего нужна внешняя ИС, по цене почти как МК? USART аппаратный, с буфером, "на строке" - данные выводятся по мере наступления времени, плюс DMA все работает (почти) незаметно для центрального ядра. Конечно, для всего есть свои решения. DS2480 к 1-wire - ето еще одно решение.
Re: STM32 новичку в ARM что к чему
Вы даташит читали? Видимо, нет, коли задаёте такой вопрос.veso74 писал(а):tonyk, внутри напр. STM32G4xx есть 5 x USART, для чего нужна внешняя ИС, по цене почти как МК?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1906
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Да. Даже заказал DS2480B и жду, после вашего сообщения. Интересная ИС.
Просто в МК (STM32) есть много ресурсов, которые можно использовать без включения внешних компонентов.
Просто в МК (STM32) есть много ресурсов, которые можно использовать без включения внешних компонентов.
Re: STM32 новичку в ARM что к чему
[uquote="a5021",url="/forum/viewtopic.php?p=4726223#p4726223"]никому не попадался код работы с ds18b20, чтобы по максимуму в железе и без софтовых ожиданий/прерываний/ногодрыгов?[/uquote]
в теории это выглядит так - аппаратный слот модулем сравненія таймера, чтение модулем захвата другого таймера. гдето даже пример попадался.
в теории это выглядит так - аппаратный слот модулем сравненія таймера, чтение модулем захвата другого таймера. гдето даже пример попадался.
глаза баяца, руки из жопы, но я не здаюсь
Re: STM32 новичку в ARM что к чему
В STM32 нет схем формирования импульсов для OW, поэтому что вы там собрались использовать- не понятно. Рассчитывать на заявленные для OW 150м с банальным резистором, ИМХО, наивно. Ну и реализации шины OW с гальванической развязкой на DS2480B решается тривиально в отличие от огорода на внешних дискретных компонентах, которые в итоге займут на плате места больше, чем одна DS2480B.veso74 писал(а):Просто в МК (STM32) есть много ресурсов, которые можно использовать без включения внешних компонентов.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1906
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Ничего толком не предлагал: нашел решение на первой странице поисковика, попробовал на STM32 на бредборде на столе за 5 минут, получил результа: комнатная температура, работа понравилась, и поделил ссылкой на использование DS18B20 с ресурсами UART в STM32. Если не нужно: 1-wire -> UART в STM32, не используйте, и всё.
Re: STM32 новичку в ARM что к чему
[uquote="sc0rpy",url="/forum/viewtopic.php?p=4726548#p4726548"][uquote="a5021",url="/forum/viewtopic.php?p=4726223#p4726223"]никому не попадался код работы с ds18b20, чтобы по максимуму в железе и без софтовых ожиданий/прерываний/ногодрыгов?[/uquote]
в теории это выглядит так - аппаратный слот модулем сравненія таймера, чтение модулем захвата другого таймера. гдето даже пример попадался.[/uquote]
а почему другого? в таймере может быть несколько каналов и для каждого можно выбирать режим независимо от других. одним каналом семплы нарезаем, другим захват делаем. на такой код я и хотел поглядеть.
Добавлено after 3 hours 7 minutes 43 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4726625#p4726625"]В STM32 нет схем формирования импульсов для OW, поэтому что вы там собрались использовать- не понятно.[/uquote]
Собрались использовать схему с открытым стоком и подтягивающий резистор, аккурат, как написано в наставлении о караульной службе. В общем, пока суд да дело, я набросал секвенсор из одного таймера и одного канала дма.
логика работы: таймер стартует, выход канала в ноль. так начинается reset pulse. регистр ccr содержит значение 480. совпадение перещелкивает выход и дергает канал дма, который грузит в регистр сравнения время следующего переключения и т.д.
вот такая последовательность полностью формирует всю циклограмму для старта преобразования:
а вот такое наблюдается на выходе канала:

в теории это выглядит так - аппаратный слот модулем сравненія таймера, чтение модулем захвата другого таймера. гдето даже пример попадался.[/uquote]
а почему другого? в таймере может быть несколько каналов и для каждого можно выбирать режим независимо от других. одним каналом семплы нарезаем, другим захват делаем. на такой код я и хотел поглядеть.
Добавлено after 3 hours 7 minutes 43 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4726625#p4726625"]В STM32 нет схем формирования импульсов для OW, поэтому что вы там собрались использовать- не понятно.[/uquote]
Собрались использовать схему с открытым стоком и подтягивающий резистор, аккурат, как написано в наставлении о караульной службе. В общем, пока суд да дело, я набросал секвенсор из одного таймера и одного канала дма.
логика работы: таймер стартует, выход канала в ноль. так начинается reset pulse. регистр ccr содержит значение 480. совпадение перещелкивает выход и дергает канал дма, который грузит в регистр сравнения время следующего переключения и т.д.
вот такая последовательность полностью формирует всю циклограмму для старта преобразования:
Код: Выделить всё
const uint16_t ccr_seq[] = {
// Timer starts LOW (line pulled low)
480, // [0] Release line (HIGH) at 480 µs — presence pulse start
980, // [1] Pull line LOW at 980 µs — presence pulse duration 500 µs
// 0xCC (11001100, LSB first: 0,0,1,1,0,0,1,1)
1040, // [2] Release (HIGH) after 60 µs LOW (bit 0)
1041, // [3] Pull LOW after 1 µs HIGH
1101, // [4] Release (HIGH) after 60 µs LOW (bit 1)
1102, // [5] Pull LOW after 1 µs HIGH
1103, // [6] Release (HIGH) after 1 µs LOW (bit 2, '1')
1163, // [7] Pull LOW after 60 µs HIGH
1164, // [8] Release (HIGH) after 1 µs LOW (bit 3, '1')
1224, // [9] Pull LOW after 60 µs HIGH
1284, // [10] Release (HIGH) after 60 µs LOW (bit 4)
1285, // [11] Pull LOW after 1 µs HIGH
1345, // [12] Release (HIGH) after 60 µs LOW (bit 5)
1346, // [13] Pull LOW after 1 µs HIGH
1347, // [14] Release (HIGH) after 1 µs LOW (bit 6, '1')
1407, // [15] Pull LOW after 60 µs HIGH
1408, // [16] Release (HIGH) after 1 µs LOW (bit 7, '1')
1468, // [17] Pull LOW after 60 µs HIGH
// 0x44 (01000100, LSB first: 0,0,1,0,0,0,1,0)
1528, // [18] Release (HIGH) after 60 µs LOW (bit 0)
1529, // [19] Pull LOW after 1 µs HIGH
1589, // [20] Release (HIGH) after 60 µs LOW (bit 1)
1590, // [21] Pull LOW after 1 µs HIGH
1591, // [22] Release (HIGH) after 1 µs LOW (bit 2, '1')
1651, // [23] Pull LOW after 60 µs HIGH
1711, // [24] Release (HIGH) after 60 µs LOW (bit 3)
1712, // [25] Pull LOW after 1 µs HIGH
1772, // [26] Release (HIGH) after 60 µs LOW (bit 4)
1773, // [27] Pull LOW after 1 µs HIGH
1833, // [28] Release (HIGH) after 60 µs LOW (bit 5)
1834, // [29] Pull LOW after 1 µs HIGH
1835, // [30] Release (HIGH) after 1 µs LOW (bit 6, '1')
1895, // [31] Pull LOW after 60 µs HIGH
1955 // [32] Release (HIGH) after 60 µs LOW (bit 7)
};
- Вложения
-
- CropImage.jpg
- (20.67 КБ) 313 скачиваний
Re: STM32 новичку в ARM что к чему
В наставлении по караульной службе нарисована другая схема, и именно для неё приведены характеристики по количеству узлов и длине линии связи.a5021 писал(а):схему с открытым стоком и подтягивающий резистор, аккурат, как написано в наставлении о караульной службе
Re: STM32 новичку в ARM что к чему
на столе будет работать, а в реальных условиях я подожду 100мкс между стартами слотовafter 1 µs
глаза баяца, руки из жопы, но я не здаюсь
Re: STM32 новичку в ARM что к чему
[uquote="sc0rpy",url="/forum/viewtopic.php?p=4726934#p4726934"]на столе будет работать, а в реальных условиях я подожду 100мкс между стартами слотов[/uquote]
да понятно, что мегагерцовые частоты в проводах не уйдут далеко. но паузы можно делать, хоть по десять часов:
"If for any reason a transaction needs to be suspended, the bus MUST be left in the idle state if . Infinite recovery time can occur between bits so long as the 1-Wire bus is in the inactive (high) state during the recovery period."
предложенная схема легко настраивается под различные тайминги. ограничение -- разрядность таймера.
да понятно, что мегагерцовые частоты в проводах не уйдут далеко. но паузы можно делать, хоть по десять часов:
"If for any reason a transaction needs to be suspended, the bus MUST be left in the idle state if . Infinite recovery time can occur between bits so long as the 1-Wire bus is in the inactive (high) state during the recovery period."
предложенная схема легко настраивается под различные тайминги. ограничение -- разрядность таймера.
Re: STM32 новичку в ARM что к чему
[uquote="a5021",url="/forum/viewtopic.php?p=4726757#p4726757"]одним каналом семплы нарезаем, другим захват делаем.[/uquote]
дергать прерывание для приема каждого бита вместо того, чтобы забрать готовый байт в USARTx_DR?
дергать прерывание для приема каждого бита вместо того, чтобы забрать готовый байт в USARTx_DR?


