Перейти к содержанию
    

Xenia

Модератор FTP
  • Постов

    4 838
  • Зарегистрирован

  • Победитель дней

    2

Весь контент Xenia


  1. Прошла весна, настало лето, близится осень, но мои злоключения с шиной I2C на контроллере STM32F103C8T6 не только продолжились, но и приняли парадоксальный оборот. Начну с того, что моя "горелая" плата с контроллером снова заработала нормально с шиной I2C после того, как ... полежала 10 дней в ящике моего стола. После этого она нормально трудилась (с использованием I2C) где-то 3 месяца, а потом I2C у нее снова сдох. Никаких импульсов по линиям SDA и SCL не выдает (логическим анализатором смотрела), а драйвер STM32CubeMX после 10 миллисекундного ожидания выдает ошибку "BUSY", считая шину занятой (что обычно бывает, когда хотя бы на одной из этих линий нет подтяжки к питанию). Однако с потенциалом на линиях был полный порядок - на обеих стоял высокий уровень. Тогда из опасений, что порт сгорел, я взялась проверять у контроллера пины SDA и SCL, переключив их из режима I2C в режим обычного вывода (GPIO_MODE_OUTPUT_PP). Выставила высокий уровень, затем низкий - вольтметр показал, что пины правильно слушаются команд. Затем переключила в режим Open-Drain (GPIO_MODE_OUTPUT_OD), предварительно подтянув их к питанию парой резисторов , которые мне здесь посоветовали (4.7К). Проверила снова - напряжения на выходе снова послушались команд. После всего этого вернула режим I2C, и о чудо - I2C заработала! Но не долго - до первого же ресета или отключения питания. Стала разбираться тем, в какой момент шина I2C оживает. Выяснила, что для того, чтобы I2C-шина ожила необходимой войти в режим Open-Drain и на 100 микросекунд закоротить обе линии на землю (командой установки на линиях низкого уровня), чтобы пропустить по ним ток через резисторы подтяжки. Сразу же после этого I2C-шина начинала работать нормально, более не выдавая состояния BUSY. При этом повторную инициализацию I2C мне делать не пришлось - дело ограничилось манипуляцией с этими двумя линиями порта. Конечно это не навсегда, а только до первого обесточивания, но я поставила эту процедуру оживления в начало программы, после чего плата стала работать нормально. Прошу прокомментировать мой рассказ, а если можно, то предложить разгадку случившегося.
  2. У меня точно такое впечатление - все функции, которые не используются (т.е. нигде не вызываются), компилируются, но к результирующей прошивке не линкуются. Просьба к топикстартру - могли бы вы выложить этот проект целиком? А то архив rs.zip я скачала, то там для IAR'а нечего нет.
  3. Компилятор ругается на implicitly (Pe223), когда функция вызвана без прототипа. То бишь функцию сперва требуется объявить (чтобы компилятор понял какого типа у нее аргументы) и уж только потом ее вызывать. А на identifier ругается (Pe020), когда используете переменную и массив, которые прежде не были созданы. Это разные ошибки, а потому и коды у них разные - Pe223 и Pe020.
  4. USB stm32f103 vs gd32f103

    Выяснила, что у STM32F103 нет резистора, подтягивающего линию USB_DP к питанию. А у GD32F103 он есть?
  5. USB stm32f103 vs gd32f103

    Да вроде никакого. М.б. ноги растут от 10 кОм вместо штатных 1,5 кОм в "синих таблетках", но то к самому МК не имеет ни малейшего отношения. Моя таблетка не синяя 🙂 - она под RS232 заточена (драйвер повышающий стоит и разъем DB9 на плате). А USB кабель я сама присоединила к свободным штырям PA11 и PA12. Никакого подтягивающего резистора там не было, т.к. под USB эта плата не позиционировалась, но мне захотелось проверить, заработает ли она под USB, как CDC-девайс. 5-вольтовое питание тоже взяла от USB, а к внешнему источнику питания не присоединяла. Вот она у меня какая: https://aliexpress.ru/item/32858126641.html
  6. USB stm32f103 vs gd32f103

    А на stm32f103 он у вас поднялся? А то у меня сейчас проблема - на STM32F103RCT6 USB-CDC работает нормально, а на STM32F103С8T6 даже не определяется, как СОМ-порт. Никак не пойму, в чем может быть причина, т.к. программный код там и там одинаковый (но прошивки разные из-за того, что памяти разное количество), и оба они 103-и.
  7. HСD-функции относятся к хосту (HСD = Host Controller Driver). Со стороны хоста нет проблем определить, что он подцепил девайса. В своем вопросе я даже пример с компьютером привела, когда обнаружение компьютером присоединения внешнего девайса легко диагностируется. И даже жирным шрифтом подчеркнула "как узнать об этом со стороны контроллера?", чтобы не нарваться на ответ, который вы мне дали. И, тем не менее, нарвалась. P.S. Кажется нашла средство, вот оно: if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) { // устройство подключено } else { // устройство отключено }
  8. Мой вопрос к пользователям STM32Cube по части реализации USB/CDC-device (код из Middlewares): Как со стороны контроллера (STM32) узнать, что его к персональному компьютеру подключили? При подключении USB-девайса персональный компьютер формирует виртуальный COM-порт, появление которого пользователь может увидеть в Диспетчере устройств (Device manager), но как узнать об этом со стороны контроллера? Знаю, что в процессе инициализации USB-устройства компьютер обменивается с ним какой-то информацией, а потому USB-устройство, по-видимому, должно знать, что его "инициализировали". Пыталась у hpcd_USB_FS статус звать, вот так: USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; printf( "\r\nUSB State = %d\r\n", hcdc->TxState); Но статус показывает, что всё в порядке, хотя к компьютеру подключения не было. Что еще можно попробовать?
  9. Отличие отличию рознь. Покупатели благосклонно относятся к отличиям, когда базовые функции совпадают, а отличие касается каких-то улучшений типа увеличенной тактовой частоты, большего числа таймеров и прочей периферии. Например, китайцы "клонировали" АЦП AD7705, создав его функциональный аналог под именем TM7705. Как видите, та же самая практика, какую я выше описала, - одинаковая цоколевка и схожее наименование. Однако, китайцы у своего изделия вдвое увеличили тактовую частоту (а точнее, допустив применение вместо частоты 2.4576 MHz вдвое большей). Тогда как у АЦП этого типа от частоты зависит точность измерений (почти вдвое увеличилось "resolution"). А огорчительно, когда замена оригинала на клон приводит к тому, что тот не работает, например, из-за того того, что в регистре, управляющим множителем частоты, биты местами переставили. Но когда биты переставляет сама самая компания-производитель, то всегда выпускает документ "Migration", где перечисляет всё то, что изменилось. А вот когда другая (и обычно конкурирующая) компания производит клон, то им западло такой документ выпустить, т.к. уж больно сильно не хочется признаться в клонировании чужой разработки. По тому же поводу вспоминается отечественный 1887ВЕ4У (от НИИЭТ) с претензией создать аналог Atmega8535. Помню, как на форуме почти пол года выясняли, чем они отличаются.
  10. Лично я предпочитаю сравнивать не бренды между собой, а удачные их проекты. Например, бессмысленно обсуждать, хорош или плох бренд "Мосфильм" 🙂, т.к. выпускал он как хорошие, так и откровенно плохие фильмы. Просто крупная и богатая компания может позволить себе заквасить сразу множество стартапов, чтобы затем огромными тиражами тиражировать то, что показало успех (привлекло горячий спрос покупателей). Точно так же, как из под пера одного и того же писателя не всегда выходят бестселлеры, а песни одного и того же певца совершенно не всегда становятся шлягерами. Но широко расходятся именно удачные произведения, создавая их автору славу А вот серия STM32 от компании ST - несомненный хит! И именно поэтому до сих пор он является объектом для подражания тех же китайцев. Тому свидетельством - одинаковая цоколевка и схожие наименования. А поменяй китайцы в своем изделии назначение хотя бы пары пинов, то у них этот продукт никто не купит, убедившись, что STM32 на той же плате он заменить не может. Столь же удручают покупателя и те случаи, когда программатор ST-Link отказывается с ними работать.
  11. Несомненно вернусь, тем более что и не уходила :). Мое кредо - прежде всего качество и только потом доступность. Причем считаю этот принцип актуальным, вне зависимости от того, какой природы санкции - внешние (запрещено ввозить в Россию) или внутренние (запрещено покупать импорт). Когда-то в СССР тоже что-то было запрещено, например, слушать песни Галича и слушать радиостанцию Свобода (по этой причине ее глушили). Тем не менее, люди ухитрялась слушать то и другое, вопреки запретам и трудностям. Правда я того времени не застала - родилась позже, но если бы жила в те времена, то поступала бы точно так же - слушала то, что хотела слушать, а не то, что мне навязывала пропаганда. Вот и в наше время практически каждый человек с высшим образованием пользуется VPN ровно по тем же самым причинам - пытаясь обойти либо внешние санкции (сайты не отдают контекст на российские IP), либо внутренние санкции (Роспотребнадзор заблокировал доступ к иностранным сайтам). С товарами ситуация приблизительно та же самая, с тем лишь исключением, что санкции обоих типов невыгодны не только покупателю, но и продавцу. В этом смысле обе стороны сделки заинтересованы в том, чтобы нарушить санкции. Однако при переправке товара через границу таможенным службам гораздо проще проводить цензуру "материальных ценностей". У нас еще на памяти, когда запрещали турецкие помидоры и грузинские вина под предлогом, что в них якобы были обнаружены вредные для здоровья вещества. А польские яблоки давили бульдозерами без всяких объяснений. Тем не менее, заметим, что обход таких санкций обычно производится по тому же принципу, что и VPN, - через третью/нейтральную страну. Причем в качестве этой третьей страны всё чаще выступает Китай. Причем контроллеры пресловутого STM нынче ст'оят у китайцев зачастую даже дешевле, чем их китайские аналоги, тогда как российские дилеры (типа "Чип и Дип"а) нагло греют руки на дефиците, который чаще всего сами же создают.
  12. Если для шагового двигателя, то проще всего купить управляющею плату от 3D-принтера. Могу рекомендовать "MKS Gen М1.4" или "MKS Gen-L" (последняя чуть дешевле). Цены на Aliexpress приблизительно 1800 руб за первую и 1400 руб за вторую. Я же себе вообще на Авито с рук покупала за 1000 руб, например, здесь: https://www.avito.ru/moskva/orgtehnika_i_rashodniki/mks_gen_v1.4_3197159280 В этом случае разбираться с микроконтроллерами и программировать вообще можно не уметь 🙂 - плата управляется текстовыми командами - задается координата для каждого из 4-х моторов. Родные драйвера обычно на ток до 2А, но можно при желании подключить и внешние на любой ток.
  13. А чем этот стм лучше того же esp32, у которого два раза по 240МГц - те же яйца, но в профиль, а если сравнивать гемор по разводке того же стма со всеми его питаниями и еспшки - то тут еспшка за день даже студентом разводится и на коленках припаивается. Ну а цена (в мойсере за 4 бакса) против двадцатки за стм, как-то тоже любовь к стму сильно притупляет. Да, я понимаю, что АЦПшка у СТМа наверное лучше, но они все встроенные в процессор - поганые. Если АЦП нужно - лучше все-таки внешнее. Дело в том, что топикстартер сам признался "Это будет первая работа с микроконтроллером (если с ним) и программированием", а в этом случае приходится рассчитывать либо на Arduino с ее библиотеками, либо на STM32 с его STM32CubeMX. Иначе при недостатке опыта такую работу он не потянет, и результат получится прямо противоположный ожидаемому - к программированию микроконтроллеров возникнет стойкое отвращение. А чтобы избежать "разводки того же стма со всеми его питаниями" я как раз и рекомендовала готовые платы китайского производства (они недорогие), где базовая обвязка микроконтроллера уже сделана. Они на Aliexpess даже маркируются как "совет по развитию", "минимальная плата", "макетная базовая плата ARM", "обучающая плата" и т.п, поскольку предназначены для начинающих. Тем не менее, даже продвинутые разработчики порой используют такие платы в своих конструкциях. Например, мой знакомый из Новосибирска хорошо отозвался о модуле TI Sitara AM3354 (всё собрано на одном модуле: Cortex-A8 600 МГц, 128 МБ DDR3, 1 ГБ NandFlash), который одно время довольно дешево продавался у китайцев для кассовых аппаратов (видимо потому и дешево, что выпускался большим тиражом).
  14. На мой взгляд, прежде чем выбирать контроллер для управления чем-либо, следует сперва заняться ... самоанализом 🙂. Здесь главное определиться с тем, готовы ли вы слиться с контроллером в одно целое 🙂, превратив его с продолжение своих рук и мыслей, или рассчитываете на то, что поставите на контроллер или процессор Linux, и она всё сделает за вас. От этого выбора напрямую зависит, покупать ли вам плату с контроллером с развитой периферией (или по меньшей мере с пинами контроллера выведенными на "гребенку") или же покупать мини/микро-компьютер в "запаянном" корпусе. Лично для меня этот выбор был очевиден, т.к. возиться с живым железом люблю (и с этого когда-то начинала), а Linux воспринимаю, как мультиплатформенное продолжение DOS 🙂. Причем я вполне уверена, что из-под операционной системы (RTOS не в счет) ничем серьезно управлять невозможно, либо такие попытки выльются в бесконечную борьбу с операционной системой, пока не превратится в жгучую к ней ненависть 🙂. Если выбор сделан пользу контроллера, то рекомендую китайские платы на STM32. И хотя репутация STM32 в последнее время была подорвана, но не по своей вине, а по вине мирового дефицита полупроводников и/или внешней политики России 🙂 . В частности из числа "продвинутых" мне нравится контроллер STM32H743VIT6, работающий на частоте 480 МГц (что значительно быстрее, чем Arduino), который даже сейчас можно купить за 2000 руб (я когда-то покупала за 1600 руб): https://aliexpress.ru/item/4000235276780.html А плата на чуть менее совершенном STM32H750VBT6 доступна даже за 1300 руб (по той же ссылке). Усилия на освоение контроллера (любого!) не считаю напрасными, т.к. они "исправляют карму". Тогда как в наше время люди почти поголовно приучены к тому, чтобы не только жить на всем готовом (т.е. сделанном чужими руками), но и свои программы собирать из готовых модулей/библиотек. Жизнь такова. Однако в области микроконтроллеров осталась незатоптанная поляна, где всё еще можно что-то сделать целиком своими руками. И этой возможностью, на мой взгляд, стоит воспользоваться, пока она еще есть.
  15. На ftp есть стандарты с тем же номером, только они Британские: ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-1-2012.pdf ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-2-2013.pdf ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-3-2012.pdf ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-4-2012.pdf ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-5-2013.pdf ./DOC/STANDARDS/British standards/BS EN/BS EN 62037-6-2013.pdf Passive RF and microwave devices, intermodulation level measurement.
  16. Я хочу датчик СО2 за приемлемую цену, работающий в диапазоне концентраций 1%-5%. Термостат не герметичен, т.к. создавался не для таких целей, а для сушки лабораторной посуды :). Хотя и бывают термостаты для выращивания бактериальных сред, имеющие нужные характеристики, но они слишком уж дороги. Поэтому расход СО2 происходит не из-за поглощения живностью, а из-за рассеивания в атмосфере следствии негерметичности термостата. Однако требуемая точность поддержания концентрации СО2 невелика - даже ошибка на 0.5% вполне допустима. Тем более что непонятно отчего, казалось бы в одинаковых условиях, одну неделю живность растет бурно, а в другую почти не растет :).
  17. Несомненно автоматизацию поддержания концентрации СО2 в термостате было бы несложно организовать, т.к. достать клапан для регулировки подачи газа нет проблем - таких в продаже очень много. А потому у меня острая проблема именно в сенсоре/датчике, т.к. без него определить концентрацию СО2 на глазок невозможно. Раньше я думала, что высокие концентрации измерять легче, чем малые, но в действительности всё оказалось иначе - при высокой концентрации СО2 УФ-датчик слепнет, т.к. все высокие концентрации кажутся ему на просвет одинаково черными. Кстати, именно по этой причине на Венере так жарко - углекислота очень сильно поглощает инфракрасные/тепловые лучи, тогда как в атмосфере Венеры очень много СО2 (96.5%). Тогда как именно по УФ-поглощению СО2 в ультрафиолете его концентрация надежнее всего определяется в любой газовой смеси.
  18. Вам хорошо 🙂 - почва не так уж и много углекислого газа выделяет. А вот у меня тоже научный проект (ИБХ РАН), но задача противоположная - требуется в термостате поддерживать концентрацию CO2 в интервале 1-5%. Ну, а в том термостате кроме нужной температуры еще и лампочка горит и растет какая-то живность, которая на свету эту углекислоту усваивает. Причем автоматизация процесса не требуется - достаточно вручную с помощью редуктора установить нужный поток СО2 из баллона. А проблема у меня как раз в датчике/сенсоре, т.к. на такую высокую концентрацию CO2 добыть датчик чрезвычайно трудно, ибо широким спросом они не пользуются, поскольку такая концентрация СО2 находится далеко за пределами возможностей человека дышать таким воздухом. Поэтому даже сенсоры СО2 для теплиц имеют верхним пределом измерения 5000 ppm, тогда как мне нужно в 10 раз больше. Лично я видела только один такой датчик (B-530) - здесь: https://aliexpress.ru/item/1005002080536560.html но он уже распродан, не смотря на высокую цену. Да и в Россию его не продают. Поэтому хотела спросить вас, как специалиста, (а также остальных участников этой темы), не встречали ли вы датчиков СО2 на высокие концентрации?
  19. Высокоразрядными (сигма-дельта) АЦП я интересуюсь давно, но с ассортиментом отечественных производителей совершенно не знакома. Прежде думала, что 16-разрядных АЦП отечественная промышленность вообще не выпускает. Но и этот АЦП меня не порадовал, т.к. под мои цели он не подходит, тогда как мне нужна частота преобразования 50 Гц (на этой частоте сетевые наводки/шумы низкие). А потом корпус жуткий - с усами 🙂 .
  20. Назовите пожалуйста название этой микросхемы, т.к. ваших слов недостаточно для того, чтобы об этом догадаться.
  21. Я бы не хотела, чтобы кто-то вместо меня стал заниматься разборкой даташита и руководства к блоку, который я купила, однако ссылки на них дам, если любопытные все-таки найдутся: https://wiki.iarduino.ru/page/power-key-4p-i2c-datasheet/ https://wiki.iarduino.ru/page/power-key-4p-i2c/ Однако сведений об электрической схеме в них нет, а программирование заточено под Arduino - придают готовую библиотеку и объясняют, как ее функциями пользоваться. Тогда как я в системе Arduino не работаю (и хотя Arduino-платы иногда покупаю, но использую их не по назначению - прошиваю их своей прошивкой, затирая Arduino-загрузчик). Тем не менее, мне удалось кое-какую полезную информацию извлечь путем осмотра этого изделия снаружи. Во-первых, примечательно, что на нем тоже установлен контроллер из семейства STM32 - на этот раз STM32F030F4P6. Очевидно, что именно он поддерживает I2C со стороны этого устройства. Тем не менее, мне непонятно, как он работает, когда пользователь выбирает вариант с 5-вольтовой подтяжкой шины (этот вариант установлен по умолчанию в заводской поставке, а для перехода на 3.3-вольтовую подтяжкку приходится перепаивать перемычку, которая для такого перехода там предусмотрена). Конечно, эту перемычку я сразу же перепаяла и убедилась вольтметром, что напряжение на линиях I2C снизилось до 3.23V. Именно поэтому мне было странно, как как может "сгорать" I2C-интервейс у моей платы. Во-вторых, на этом изделии тоже стоит LDO, понижающий 5-вольтовое напряжение питания до 3.3V, необходимого для питания микросхемы контроллера. Таким образом ситуация симметричная - оба устройства, соединяемые шиной I2C, питаются от одного и того же источника питания в 5V (по существу это линия питания USB-кабеля), оба имеют в своем составе понижающий напряжение LDO, и оба используют контролеры STM32 (разные, но 5-вольтовая толерантность у них одинаковая). Подтяжка осуществляется со стороны Slave-устройства неизвестным мне образом, хотя среди команд Arduino-библиотеки есть и такая, чтобы отключить эту подтяжку. Т.е. встроенный в это устройство контроллер (STM32F030F4P6) как-то ухитряется не только работать на 5-вольтовой подтяжке, то и включать и выключать эту подтяжку, несмотря на то, что он сам 3.3-вольтовый. Тем не менее, сгорает у меня моя плата, а этому устройству ничего не делается. Пока же я склоняюсь к банальному объяснению моей проблемы - плохая земля, т.е. ненадежное соединение обоих устройств по общему проводу. При этом внешнее устройство, лишенное общего провода (земли), оказывается подвешенным к потенциалу 5V, который "натекает" практически на все его контакты, в том числе и на шину I2C. Причем не только через резистор подтяжки, но и "снизу", т.к. земляная шина устройства, лишенная связи с землей источника питания, тоже получит потенциал 5V. А затем этот потенциал и пережигает мою плату, у которой земля всегда есть. Т.е. суть в том, что моя плата всегда надёжно получает питание и землю, поскольку USB-разъем втыкается прямо в нее, тогда как внешнее устройство было присоединено к ней на "ардуиновых" проводках, которые могли оказаться не столь надежными.
  22. А я не поняла из вашей выдержки, какая же это толерантность к 5V, если уже при 4V наступает конец.
  23. Мои I2C-пины (PB8 и PB9), согласно даташита, толерантны к 5V (FT):
  24. Так у меня подтяжка шины I2C как раз 3-вольтовая. И я про это уже писала: Тем не менее, подтяжку на шине создаю не я (т.к. мой STM32 этого не умеет), а Save-устройство, питаемое от 5V, а его схема мне неизвестна. Но перемычку с 5V на 3V3 на Slave я перепаяла сразу (это фото из его описания еще до перепайки): Однако все равно боюсь того, что Slave может на короткое время установить на шине напряжение 5V и лишь позднее снизить его до 3.3V.
  25. Дело в том, что у меня есть несколько штук одинаковых плат (покупала их у китайцев одним лотом - 5 штук). У двух из них I2C "сгорел", на двух других I2C нормально работает, 5-ю пока никуда не подключала - берегу. Причем прошивка была на всех 4-х платах совершенно одинаковая. Я пишу "сгорел" потому, что на первых невезучих платах I2C сначала тоже работал, но потом перестал работать (пропали испускаемые из платы сигналы). В этой ситуации мне сложно пенять как на свою прошивку, так и на возможную неисправность плат с самого начала. Тем более, что на плате микроконтроллера пины (PB8 и PB9), ответственные за работу I2C, попросту выведены на разъем ("гребенка" по краям платы), и никаких других электронных компонентов по пути не содержит. Slave-устройство использовалось одно и то же, т.к. я его всего в одном экземпляре покупала. Те две платы, которые до сих пор еще работают с I2C, держатся на плаву благодаря вот такому методу: сперва подаю питание на Master и Slave при разорванной между ними шине I2C, а после тогда как они светодиодиками начали моргать, I2C-шину между ними соединяю. Тогда всё работает каждый раз устойчиво. Тогда как первая плата "сгорела" в момент подачи питания при соединенной шине, а вторая сгорела после того, так я сделала STM32 ресет (кнопочку такую на плате нажала).
×
×
  • Создать...