Интерфейс I2C на процессоре STM32. Создание библиотеки расширителя портов ввода-вывода TCA9535

  Рет қаралды 12,313

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Пікірлер: 88
@ДмитрийВсемогущий-я2и
@ДмитрийВсемогущий-я2и Жыл бұрын
Спасибо огромное за труды и потраченное время!!!
@Артёмфомин-ш1ы
@Артёмфомин-ш1ы 2 жыл бұрын
Огромное спасибо. Искал уроки по I2C что бы разобраться с расширителем портов и тут как раз кстати пришёлся ваш урок
@SibMan54
@SibMan54 5 жыл бұрын
Огромное вам спасибо за вашу работу!
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Добро пожаловать.
@MrMultiwas
@MrMultiwas 2 жыл бұрын
Спасибо за Ваши видео! Очень приятная подача, все предельно ясно. Жалко не преподаете, к такому мастеру бы да в подмастерье) 👍
@serjkp
@serjkp 5 жыл бұрын
Все ждал рассказа как нужно бороться с зависаниями шины. Жаль, что не упомянули. Важный аспект.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Это как-нибудь на будущее. Кстати, как показывает практика, наиболее надежный способ избавиться от боев на шине - прокладывать ее подальше от помех и не превышать допустимую емкость шины.
@CoBaldr
@CoBaldr 5 жыл бұрын
Если вы про 103й камень то прочитайте errata
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Нет, я не только про 103й (эту серию я в принципе не использую). Просто пару лет назад мы ради интереса устраивали тест I2C на помехи и подвисания. И вот самое критичное для шины были именно помехи, а во вторую очередь емкость линии и как ее следствие заваливание фронтов, что часто служит причиной подвисания.
@alexandrsemenkoff6935
@alexandrsemenkoff6935 5 жыл бұрын
На физическом уровне по совету от Владимира, по программной части в критических решениях - либо watchdog, либо отказаться от i2c и перейти на обмен данных по дифференциальной паре
@xbevice
@xbevice 5 жыл бұрын
@@alexandrsemenkoff6935 зачем watchdog, когда можно не использовать блокирующие вызовы?
@МихаилАаа-д3ю
@МихаилАаа-д3ю 5 жыл бұрын
Спасибо, что на адресации заострили внимание. Я тоже на это нарвался. Пришлось даже применять сканер I2C для определения адреса. К сожалению, о комментарии разработчиков я не догадался.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Их желательно читать т.к. очень часто встречается расхождение со здравым смыслом и официальной документацией. Есть примеры когда от версии к версии HAL изменения настолько глобальные, что хоть заново пиши.
@ArthurIslamRU
@ArthurIslamRU 5 жыл бұрын
Дай Бог вам Здоровья и Понимания! Очень нравятся Ваши ролики!
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Большое спасибо.
@НикитаЧернов-р1ц
@НикитаЧернов-р1ц 4 жыл бұрын
Полезный материал, спасибо!
@namename2031
@namename2031 Жыл бұрын
>Рассказывается об одном из самых популярных интерфейсов подключения периферийных устройств к процессорам. 2:36 Я димаю что вы знакомы с адрессацией I2C. Как же мне "нравятся" такие "уроки".
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Рад что вам понравилось. А где сказано что это урок?
@namename2031
@namename2031 Жыл бұрын
9:31 Это величина p Data буфера в байтах. Величина Mem Add r e s s в байтах (Mem Add Size) была указана ранее. Зачем эти параметры совмещать. А так как вы описали делается в функции HAL_I2C_Master_Transmit
@Insideus2786
@Insideus2786 5 жыл бұрын
Хороший ролик! На мой взгляд I2C- один из самых неудачных интерфейсов. Особенно веселят I2C датчики с одним выводом для выбора адреса, в результате чего нужно городить огород, чтобы повесить на шину больше 3 штук.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Категорически СОГЛАСЕН!
@НиколайПр-з3в
@НиколайПр-з3в 5 жыл бұрын
Отличный интерфейс - я на нем собрался домашнюю сигнализацию делать - сеть до 100 метров и датчиков 20 различных. CAN в топку хоть и микроконтроллеры купил для CAN.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Face palm...
@eugenevetrov5069
@eugenevetrov5069 5 жыл бұрын
Интересно, Вы конкретное ограничение датчика за копейки приравняли к убогости интерфейса? Владимиру - от Вас такого комментария не ожидал. Вот это действительно фейспалм!
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
@@eugenevetrov5069 Вы не ожидали что я соглашусь с фразой "На мой взгляд I2C- один из самых неудачных интерфейсов"? А почему с ней не согласится? Интерфейс 1992 года. Да у него были модификации и последняя датируется аж 2014-м годом, но основных косяков это не исправило. Интерфейс жутко боится помех ну и всего прочего. Я пару лет назад потратил кучу времени гоняя его в лаборатории на переносимость сбоев. Так вот ее просто нет. Более того, в словах Insideus2786 смысла достаточно много, дело не в кривизне реализации интерфейса в датчике. Зачем тратить драгоценное время передавая столько бит адреса если больше 3-х ну ладно 4-х устройств на шину не повесить из-за ограничений по максимальной подключаемой емкости? Т.е. скорость и так низкая, но нет мы 30-50% времени потратим на обмен ничего не значащими адресами. Потеря времени. А с датчиком Insideus2786 просто привел наболевший пример.
@АндрейИ-ф3л
@АндрейИ-ф3л 5 жыл бұрын
Спасибо! Классный у вас анализатор. Я пользуюсь Saleae Logic, там интерфейс не такой нарядный, приходится всматриваться в серые буквы, цифры, меандры.
@isorport32
@isorport32 4 жыл бұрын
Все операции с константами выполняет препроцессор, что мешает в обращении к функции записать правильный_адрес
@solderman5878
@solderman5878 5 жыл бұрын
Спасибо.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Очень долго рассказывать все функции. В двух словах контролирует состояние входов и умеет реагировать на изменение состояния замыкая и размыкая реле. При этом отправляет СМС на заданные телефоны. Может быть использован в умных домах а также в любых устройствах автоматизации. Полная документация по ссылке - yadi.sk/i/988poqgMQoTWHw
@zateeman
@zateeman 5 жыл бұрын
Спасибо огромное за ваш труд, материал фантастический! Учусь работать с STM32, перевариваю кучу информации из сети, но ваши ролики оказываются максимально полезными. Продолжайте это дело! С интерфейсом I2C ковыряюсь уже неделю, никак не получается адекватно считать данные из регистров датчика приближения apds9930: запрашиваю Mem_Read-ом данные из регистра 0х18, в переменную записывается тоже 0х18, при том, что должно быть значение приближённости, не подскажете куда копать? Заранее спасибо. Ещё, хотелось бы урок по функциям I2C_Master_Receive/Transmit, подробнее разобрать способ формирования буфера для данных и алгоритм работ самих функций, ибо чс этим возникают трудности...
@ukrfoil
@ukrfoil 3 жыл бұрын
Как данный расширитель портов на i2c показал себя в работе по прошествии столько времени, были зависания и т.п. от щелкающих рядом реле или контакторов в распред.щитке? Мои исследования с mcp23017 показали что иногда он способен подвесить i2c линию. приходилось его сбрасывать ..что не есть хорошо для ответственных устройств, а мог неделями работать без зависания... опторазвязки ,кондеры по питанию, короткие i2c линии и т.п присутствуют и не использование портов A7,B7 на ввод согласно errata..
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
К данному расширителю есть только два вопроса: его странная доступность и цена. По мне он чудовищно дорогой. Линия i2c не длиннее 13 см и не влияет. Питание стабильное. Сам прибор стоит обособленно от больших пускателей. Но при партии и 2.5 года жалоб пока не было. Но что-то видимо я параноить сейчас начну после вашего сообщения... Проверку сделаю.
@sergeyvlasov207
@sergeyvlasov207 3 жыл бұрын
почему постоянно нужно помнить? можно например так: #define Addr (0x20
@sergeyvlasov207
@sergeyvlasov207 3 жыл бұрын
ну или так #define I2C_ADDR(x) (x
@gordonfreeman1894
@gordonfreeman1894 3 жыл бұрын
Скажите пожалуйста, а HAL обрабатывает все эвенты как в "Transfer sequence diagram" таблицах из RM0008 (стр. 756, 757, 760 и 761)? Я лично пробовал на LL в своё время, так там приличная функция получалась...
@CoBaldr
@CoBaldr 5 жыл бұрын
За это нужно не i2c не любить а hal ;)
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Ох, если бы все проблемы заканчивались только на HAL, то уже свой написал бы давно.
@CoBaldr
@CoBaldr 5 жыл бұрын
@@VladimirMedintsev ну не все конечно, куда же без этого, но с адресами более прозрачно
@КонстантинГордецкий
@КонстантинГордецкий 3 жыл бұрын
TCA9535 имеет стоимость как у МК с Cortex-M0 и даже дороже
@Владимир-т2ж
@Владимир-т2ж 3 жыл бұрын
Добрый вечер! Подскажите Владимир, с чего начать разбираться, если есть интерес к программированию микроконтройлеров и радиотехники. Но не знаю с чего начать изучение? Это для меня как большой снежный ком.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
На самом деле на канале есть целый ряд роликов рассказывающих о том, с чего начинать. Вот один - kzbin.info/www/bejne/lYrJkqyGeLJ_g7M Вот другой - kzbin.info/www/bejne/rIu5qKljesp7oas в них все детально расписано.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Подскажите, а зачем в контроллере (за иcключением серии Cortex-m0) более одного порта i2c. Зачем в реальной жизни может понадобиться, если не подключать более 255 устройств сразу? По SPI та же картина.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Про i2c ваши вопросы отпадут когда вы захотите подключить несколько однотипных устройств. Ну к примеру датчики температуры. У вас возникнет проблема с адресацией. Кроме того есть проблема с емкостью имеется ввиду емкость электрическая и при 300 пф шина начинает сбоить... А вот ваша фраза - "по SPI та же картина" пугает. Там что адресная шина? Нет там адресации. Там выбор идет при помощи линии CS. Ну и надо понимать что и I2C и SPI это последовательные шины. Они бывают заняты. Например на дисплей вы одну шину SPI используете , а для памяти - другой. К интерфейсу I2C это тоже относится
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
В предложении "По SPI та же картина" я хотел сказать, что в том же 103м контроллере (а тем более в старших моделях) можно сделать два и более портов SPI. И я не смог представить ситуации, в которой мне будет недостаточно одного порта.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Правильно ли я понял Вашу мысль, что теоретически, может возникнуть потребность одновременно выводить информацию на дисплей и "общаться" с памятью
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Такая потребность возникает не теоретически а постоянно.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Владимир, спасибо за разъяснение. В этом случае, какое с Вашей точки зрения максимальное количество устройств целесообразно вешать на одну I2c- шину? Например, в своем проекте я хотел бы выстроить по цепочке на одной шине 5-6 внешних модулей: пара входных модулей, пара выходных + LCD. Есть ли вариант, что такая схема будет работать? Все модули спроектированы на PCF 8574 либо аналогах
@ЮрийМаланчук-е4к
@ЮрийМаланчук-е4к 2 жыл бұрын
Спасибо за урок - хорошо объясняете !!))По вашему уроку надеюсь сделать библиатеку на INA3221 (нет в наличии). К стате в while запускал функции (прочитать байт) и в дебаге считываю переменную как инвертировано(принял 16 бит переменую ид устройство- должно по даташиту hex5449 а мне считывается dec18772 в hex 4954) как нормальную переменную получить ? Может кто то подскажет -а может это не важно.. логический анализатором прочел как нужно. спасибо)
@petrsidorov3489
@petrsidorov3489 5 жыл бұрын
Спасибо! Я пока только учусь - за сим простите за может быть глупые или не по теме вопросы. Скажите при помощи чего Вы смотрите тайминг шины?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Это просто замечательно что учитесь. То устройство, что вас заинтересовало это самый примитивный и дешевый логический анализатор от www.dreamsourcelab.com
@petrsidorov3489
@petrsidorov3489 5 жыл бұрын
Владимир, спасибо!
@Dmitrne
@Dmitrne 5 жыл бұрын
интересное видео, а платку вы сами разводили под это дело?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Разумеется.
@Dmitrne
@Dmitrne 5 жыл бұрын
@@VladimirMedintsev хорошо получилось
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Все платы и электронные устройства показываемые на этом канале изготовлены самостоятельно.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Владимир, а что заставило Вас использовать в проекте расширитель портов? На сколько я понимаю, в 303м контроллере, который Вы применяете достаточно входов/выходов? Или же Вы количество проводов между платами минимизировали?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Да, это сделано только для оптимизации соединений между платами. Это позволило сэкономить 10 проводников, которые надо изготовить припаять, уложить. Кроме того мы стараемся делать модули универсальными. Т.е. при желании эту плату можно заменить.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Владимир, спасибо за ответ. Еще вопрос: В одном из комментариев Вы согласились, что у I2c есть неустранимые проблемы с надежностью (наводки, зависания и т.д.). Наблюдались ли какие либо сбои в работе данного устройства? Или я не правильно Вас понял пол надежность?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Нет, вы поняли абсолютно не правильно. Шина i2c очень хорошо работает в пределах устройства. Но если попытаться использовать эту шину (как предлагал кто-то из комментаторов) для умного дома т.е. на большие дистанции, то возникает проблема. В данном устройстве шина работает идеально и проблем не наблюдается.
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Ага... Теперь все стало ясно. Еще вопрос....В одном из видео (не помню точно, где) Вы упоминали некий "любимый" магазин на Али, где покупаете разные детали. Если не ошибаюсь, в этом видео речь шла о кнопках. Не поделитесь ссылкой на магазин?
@MrLedball
@MrLedball 4 жыл бұрын
Вот только цена этого расширителя великовата. есть же решения из логических микросхем. 74165 - для входов, например. Дешево и сердито.
@Βιτάλης-χ1π
@Βιτάλης-χ1π 4 жыл бұрын
Посоветуйте пожалуйста на многих устройствах где необходимо i2c соединить кабелем и где рядом мощные коммутационные помехи временами зависает микроконтроллер точно Иза i2c. сталкивались вы с зависанием i2c ? аналоговый фильтр на максимум ,пользуюсь watch dog ,но это временно решение думал раз в секунду делать переинициализацию i2c ,в моем проекте опасно зависание микроконтроллера связанно с транспортом
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Интерфейс I2C не предназначен для соединения нескольких устройств. А уж тем более в транспорте. Если вы используете феритовое колечко на линии, то это немного улучшит ситуацию. А вообще правильнее использовать более подходящие интерфейсы. Например, CAN.
@Βιτάλης-χ1π
@Βιτάλης-χ1π 4 жыл бұрын
Vladimir Medintsev там линия 40 см, с can и madbas сложнее и дороже схема ,я всё-таки грешу на hal,на avr линии по 20 метров были и ничего ну потерялись данные следующие пришли контроллер не зацыклился, в hal_i2c.c в функции hal_i2c_mem_read есть цыкл do while может там зацыкливание ?
@Βιτάλης-χ1π
@Βιτάλης-χ1π 4 жыл бұрын
В общем решил эти проблемы ,добавил в мейне переинициализацию постоянно i2c и в функциях hal где есть цыклы do while добавил выход по количеству проходов , теперь. Как бы не замыкал наводил помехи i2c востанавливатся , по хорошему надо делать обработчик ошибок ,но это для меня ещё темный лес , может будет у вас ролик про обработки ошибок это не только i2c но также другие интерфейсы?
@dazzershell
@dazzershell 3 жыл бұрын
@@Βιτάλης-χ1π может зависнуть не только контроллер и2с, бывает что какое-то слейв устройство на шине после обрыва приема держит линию. От этого помогает передача 9 старт-команд, тогда все кто держал шину занятой ее освободят. Для этого ногами МК управлять приходится напрямую, а потом опять вернуть их под контроль модуля. У F103 модуль I2C сам по себе очень сырой, чтобы нормально работал, обработчик прерываний должен быть с максимальным приоритетом, с кучей неочевидных условий. Такой же модуль стоит на более мощном F407. У более новых моделей все нормально сделано, но тоже приходится разбираться.
@Βιτάλης-χ1π
@Βιτάλης-χ1π 3 жыл бұрын
@@dazzershell спасибо за информацию ,я сейчас использую расширитель портов i2c 6 микросхем, развёл питание уже с ключем по питанию, а оказывается что можно было не так извращаться я правда smsis драйвер не hal ,на работе секта smsis ,но по опыту hal нормально работает если не скоростные задачи и нет времени на возню с тем как написать свой драйвер переферии,
@zhmenyaBSD
@zhmenyaBSD 4 жыл бұрын
Владимир, добрый день. Подскажите был ли у Вас опыт работы с ds2482?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
А вы с какой целью интересуетесь?
@zhmenyaBSD
@zhmenyaBSD 4 жыл бұрын
@@VladimirMedintsev Ни как не выходит "заставит" её работать, из документации не понятно как правильно обращаться с её регистрами. Вдруг у Вас будет интерес с её "освоением".
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
@@zhmenyaBSD Да посмотрел я ее. Нет там ничего сложного. Вроде все в документации описано. Она единственное это перебирает регистры друг за другом. А так ничего необычного. Видео по этой микросхеме точно не будет. Она старая, кроме вас уж точно никому не интересная. Ее можно заменить одним транзистором и 3-мя резисторами и прекрасно в схеме обойтись без нее.
@zhmenyaBSD
@zhmenyaBSD 4 жыл бұрын
@@VladimirMedintsev Даже с сотней датчиков температуры? А хватит ли ресурсов МК (103c8t6) для обработки такого количества датчиков?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Т.е. вот с микросхемой этой у вас ресурсов микроконтроллера хватит, а без нее вы сомневаетесь? Ну а если серьезно, то простое гугление дает массу библиотек на эту микросхему, возьмите ардуиновскую, прочитайте и перепишите ее под stm. Есть и куча обсуждений касательно stm. Так что ничего необычного и сложного там нету.
@romaVeber
@romaVeber 5 жыл бұрын
есть протокол чуть интереснее i2c, есть интерфейс 1-wire (даже некоторые устройства заточены так что-бы брать питание от шины данных)
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
А чем он интереснее? Мне уже несколько лет кажется что 1wire относится к вымирающим интерфейсам которые никто не использует. Домофоны не в счет.
@romaVeber
@romaVeber 5 жыл бұрын
@@VladimirMedintsev , единственный годный пример это ds18b20
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Стоп, вы же говорили что он интереснее...
@romaVeber
@romaVeber 5 жыл бұрын
@@VladimirMedintsev, интересный что некоторые расширители портов запитываются шины, тоесть нужна только нога данных и земля (но увы из-за малой популярности очень дорогие)
STM32. Урок 21. I2C. Inter Integrated Circuit. part 1
27:24
NR.electronics
Рет қаралды 5 М.
УДИВИЛ ВСЕХ СВОИМ УХОДОМ!😳 #shorts
00:49
How Many Balloons To Make A Store Fly?
00:22
MrBeast
Рет қаралды 190 МЛН
小路飞和小丑也太帅了#家庭#搞笑 #funny #小丑 #cosplay
00:13
家庭搞笑日记
Рет қаралды 17 МЛН
Лекция 308.  Шина I2C
19:54
Электротехника и электроника для программистов
Рет қаралды 105 М.
GPIO STM32 Схемотехника портов ввода-вывода
13:06
STM32 Обзор портов ввода вывода
21:19
Шина I2C.
14:53
Andrey Frolov
Рет қаралды 12 М.
Review.  Библиотеки для всего STM32 (HAL, LL, CMSIS)
16:29
УДИВИЛ ВСЕХ СВОИМ УХОДОМ!😳 #shorts
00:49