Это видео недоступно.
Сожалеем об этом.

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

Поделиться
HTML-код
  • Опубликовано: 17 мар 2019
  • Рассказывается об одном из самых популярных интерфейсов подключения периферийных устройств к процессорам. Интерфейс I2C на процессоре STM32 на примере создания библиотеки для расширителя портов ввода-вывода TCA9535.
    ------------------------------------------
    Поддержать автора канала можно перейдя по ссылке:
    yoomoney.ru/to...
    Или просто отправив перевод на Yandex.кошелек:
    4100116547550395
    А также переводом по номеру карты Сбер:
    4279-3000-1033-0561
    ------------------------------------------

Комментарии • 88

  • @user-rz3cl1qx8q
    @user-rz3cl1qx8q 2 года назад +1

    Огромное спасибо. Искал уроки по I2C что бы разобраться с расширителем портов и тут как раз кстати пришёлся ваш урок

  • @user-gb6ok4vn4k
    @user-gb6ok4vn4k Год назад +2

    Спасибо огромное за труды и потраченное время!!!

  • @MrMultiwas
    @MrMultiwas 2 года назад

    Спасибо за Ваши видео! Очень приятная подача, все предельно ясно. Жалко не преподаете, к такому мастеру бы да в подмастерье) 👍

  • @SibMan54
    @SibMan54 5 лет назад +2

    Огромное вам спасибо за вашу работу!

  • @ArthurIslamRU
    @ArthurIslamRU 5 лет назад

    Дай Бог вам Здоровья и Понимания! Очень нравятся Ваши ролики!

  • @user-pc9wg4jt8l
    @user-pc9wg4jt8l 5 лет назад

    Спасибо, что на адресации заострили внимание. Я тоже на это нарвался. Пришлось даже применять сканер I2C для определения адреса. К сожалению, о комментарии разработчиков я не догадался.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Их желательно читать т.к. очень часто встречается расхождение со здравым смыслом и официальной документацией.
      Есть примеры когда от версии к версии HAL изменения настолько глобальные, что хоть заново пиши.

  • @serjkp
    @serjkp 5 лет назад +1

    Все ждал рассказа как нужно бороться с зависаниями шины. Жаль, что не упомянули. Важный аспект.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Это как-нибудь на будущее. Кстати, как показывает практика, наиболее надежный способ избавиться от боев на шине - прокладывать ее подальше от помех и не превышать допустимую емкость шины.

    • @CoBaldr
      @CoBaldr 5 лет назад

      Если вы про 103й камень то прочитайте errata

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Нет, я не только про 103й (эту серию я в принципе не использую).
      Просто пару лет назад мы ради интереса устраивали тест I2C на помехи и подвисания. И вот самое критичное для шины были именно помехи, а во вторую очередь емкость линии и как ее следствие заваливание фронтов, что часто служит причиной подвисания.

    • @alexandrsemenkoff6935
      @alexandrsemenkoff6935 5 лет назад

      На физическом уровне по совету от Владимира, по программной части в критических решениях - либо watchdog, либо отказаться от i2c и перейти на обмен данных по дифференциальной паре

    • @xbevice
      @xbevice 5 лет назад +1

      @@alexandrsemenkoff6935 зачем watchdog, когда можно не использовать блокирующие вызовы?

  • @user-rq9ji8kb4w
    @user-rq9ji8kb4w 4 года назад

    Полезный материал, спасибо!

  • @Insideus2786
    @Insideus2786 5 лет назад +3

    Хороший ролик! На мой взгляд I2C- один из самых неудачных интерфейсов. Особенно веселят I2C датчики с одним выводом для выбора адреса, в результате чего нужно городить огород, чтобы повесить на шину больше 3 штук.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Категорически СОГЛАСЕН!

    • @user-rx4rp5yb5j
      @user-rx4rp5yb5j 5 лет назад +2

      Отличный интерфейс - я на нем собрался домашнюю сигнализацию делать - сеть до 100 метров и датчиков 20 различных. CAN в топку хоть и микроконтроллеры купил для CAN.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +2

      Face palm...

    • @eugenevetrov5069
      @eugenevetrov5069 5 лет назад

      Интересно, Вы конкретное ограничение датчика за копейки приравняли к убогости интерфейса? Владимиру - от Вас такого комментария не ожидал. Вот это действительно фейспалм!

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      @@eugenevetrov5069 Вы не ожидали что я соглашусь с фразой "На мой взгляд I2C- один из самых неудачных интерфейсов"? А почему с ней не согласится? Интерфейс 1992 года. Да у него были модификации и последняя датируется аж 2014-м годом, но основных косяков это не исправило. Интерфейс жутко боится помех ну и всего прочего. Я пару лет назад потратил кучу времени гоняя его в лаборатории на переносимость сбоев. Так вот ее просто нет.
      Более того, в словах Insideus2786 смысла достаточно много, дело не в кривизне реализации интерфейса в датчике. Зачем тратить драгоценное время передавая столько бит адреса если больше 3-х ну ладно 4-х устройств на шину не повесить из-за ограничений по максимальной подключаемой емкости? Т.е. скорость и так низкая, но нет мы 30-50% времени потратим на обмен ничего не значащими адресами. Потеря времени. А с датчиком
      Insideus2786 просто привел наболевший пример.

  • @zateeman
    @zateeman 5 лет назад +1

    Спасибо огромное за ваш труд, материал фантастический! Учусь работать с STM32, перевариваю кучу информации из сети, но ваши ролики оказываются максимально полезными. Продолжайте это дело!
    С интерфейсом I2C ковыряюсь уже неделю, никак не получается адекватно считать данные из регистров датчика приближения apds9930: запрашиваю Mem_Read-ом данные из регистра 0х18, в переменную записывается тоже 0х18, при том, что должно быть значение приближённости, не подскажете куда копать? Заранее спасибо.
    Ещё, хотелось бы урок по функциям I2C_Master_Receive/Transmit, подробнее разобрать способ формирования буфера для данных и алгоритм работ самих функций, ибо чс этим возникают трудности...

  • @user-zi1hf6xn2w
    @user-zi1hf6xn2w 5 лет назад

    Спасибо!
    Классный у вас анализатор. Я пользуюсь Saleae Logic, там интерфейс не такой нарядный, приходится всматриваться в серые буквы, цифры, меандры.

  • @isorport32
    @isorport32 3 года назад +1

    Все операции с константами выполняет препроцессор, что мешает в обращении к функции записать правильный_адрес

  • @namename2031
    @namename2031 Год назад

    9:31
    Это величина p Data буфера в байтах.
    Величина Mem Add r e s s в байтах (Mem Add Size) была указана ранее.
    Зачем эти параметры совмещать.
    А так как вы описали делается в функции HAL_I2C_Master_Transmit

  • @gordonfreeman1894
    @gordonfreeman1894 3 года назад

    Скажите пожалуйста, а HAL обрабатывает все эвенты как в "Transfer sequence diagram" таблицах из RM0008 (стр. 756, 757, 760 и 761)?
    Я лично пробовал на LL в своё время, так там приличная функция получалась...

  • @namename2031
    @namename2031 Год назад

    >Рассказывается об одном из самых популярных интерфейсов подключения периферийных устройств к процессорам.
    2:36 Я димаю что вы знакомы с адрессацией I2C.
    Как же мне "нравятся" такие "уроки".

    • @VladimirMedintsev
      @VladimirMedintsev  Год назад +1

      Рад что вам понравилось. А где сказано что это урок?

  • @solderman5878
    @solderman5878 5 лет назад

    Спасибо.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Очень долго рассказывать все функции. В двух словах контролирует состояние входов и умеет реагировать на изменение состояния замыкая и размыкая реле. При этом отправляет СМС на заданные телефоны.
      Может быть использован в умных домах а также в любых устройствах автоматизации.
      Полная документация по ссылке - yadi.sk/i/988poqgMQoTWHw

  • @sergeyvlasov207
    @sergeyvlasov207 3 года назад +1

    почему постоянно нужно помнить? можно например так:
    #define Addr (0x20

    • @sergeyvlasov207
      @sergeyvlasov207 3 года назад

      ну или так
      #define I2C_ADDR(x) (x

  • @ukrfoil
    @ukrfoil 3 года назад

    Как данный расширитель портов на i2c показал себя в работе по прошествии столько времени, были зависания и т.п. от щелкающих рядом реле или контакторов в распред.щитке?
    Мои исследования с mcp23017 показали что иногда он способен подвесить i2c линию. приходилось его сбрасывать ..что не есть хорошо для ответственных устройств, а мог неделями работать без зависания... опторазвязки ,кондеры по питанию, короткие i2c линии и т.п присутствуют и не использование портов A7,B7 на ввод согласно errata..

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      К данному расширителю есть только два вопроса: его странная доступность и цена. По мне он чудовищно дорогой. Линия i2c не длиннее 13 см и не влияет. Питание стабильное. Сам прибор стоит обособленно от больших пускателей. Но при партии и 2.5 года жалоб пока не было.
      Но что-то видимо я параноить сейчас начну после вашего сообщения... Проверку сделаю.

  • @user-wd6fj8xd1q
    @user-wd6fj8xd1q 3 года назад

    Добрый вечер! Подскажите Владимир, с чего начать разбираться, если есть интерес к программированию микроконтройлеров и радиотехники. Но не знаю с чего начать изучение? Это для меня как большой снежный ком.

    • @VladimirMedintsev
      @VladimirMedintsev  3 года назад

      На самом деле на канале есть целый ряд роликов рассказывающих о том, с чего начинать. Вот один - ruclips.net/video/_YfayPCMLMQ/видео.html
      Вот другой - ruclips.net/video/vZVwv-EeHkI/видео.html в них все детально расписано.

  • @alexanderurezchenko6446
    @alexanderurezchenko6446 5 лет назад +1

    Подскажите, а зачем в контроллере (за и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 либо аналогах

  • @CoBaldr
    @CoBaldr 5 лет назад

    За это нужно не i2c не любить а hal ;)

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Ох, если бы все проблемы заканчивались только на HAL, то уже свой написал бы давно.

    • @CoBaldr
      @CoBaldr 5 лет назад

      @@VladimirMedintsev ну не все конечно, куда же без этого, но с адресами более прозрачно

  • @petrsidorov3489
    @petrsidorov3489 5 лет назад

    Спасибо! Я пока только учусь - за сим простите за может быть глупые или не по теме вопросы. Скажите при помощи чего Вы смотрите тайминг шины?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Это просто замечательно что учитесь.
      То устройство, что вас заинтересовало это самый примитивный и дешевый логический анализатор от www.dreamsourcelab.com

    • @petrsidorov3489
      @petrsidorov3489 5 лет назад

      Владимир, спасибо!

  • @alexanderurezchenko6446
    @alexanderurezchenko6446 5 лет назад

    Владимир, а что заставило Вас использовать в проекте расширитель портов? На сколько я понимаю, в 303м контроллере, который Вы применяете достаточно входов/выходов? Или же Вы количество проводов между платами минимизировали?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Да, это сделано только для оптимизации соединений между платами. Это позволило сэкономить 10 проводников, которые надо изготовить припаять, уложить. Кроме того мы стараемся делать модули универсальными. Т.е. при желании эту плату можно заменить.

    • @alexanderurezchenko6446
      @alexanderurezchenko6446 5 лет назад

      Владимир, спасибо за ответ. Еще вопрос: В одном из комментариев Вы согласились, что у I2c есть неустранимые проблемы с надежностью (наводки, зависания и т.д.). Наблюдались ли какие либо сбои в работе данного устройства? Или я не правильно Вас понял пол надежность?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Нет, вы поняли абсолютно не правильно.
      Шина i2c очень хорошо работает в пределах устройства. Но если попытаться использовать эту шину (как предлагал кто-то из комментаторов) для умного дома т.е. на большие дистанции, то возникает проблема. В данном устройстве шина работает идеально и проблем не наблюдается.

    • @alexanderurezchenko6446
      @alexanderurezchenko6446 5 лет назад

      Ага... Теперь все стало ясно. Еще вопрос....В одном из видео (не помню точно, где) Вы упоминали некий "любимый" магазин на Али, где покупаете разные детали. Если не ошибаюсь, в этом видео речь шла о кнопках. Не поделитесь ссылкой на магазин?

    • @MrLedball
      @MrLedball 3 года назад +1

      Вот только цена этого расширителя великовата. есть же решения из логических микросхем. 74165 - для входов, например. Дешево и сердито.

  • @Dmitrne
    @Dmitrne 5 лет назад

    интересное видео, а платку вы сами разводили под это дело?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Разумеется.

    • @Dmitrne
      @Dmitrne 5 лет назад

      @@VladimirMedintsev хорошо получилось

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Все платы и электронные устройства показываемые на этом канале изготовлены самостоятельно.

  • @user-qm2gk8kn4f
    @user-qm2gk8kn4f 2 года назад

    Спасибо за урок - хорошо объясняете !!))По вашему уроку надеюсь сделать библиатеку на INA3221 (нет в наличии). К стате в while запускал функции (прочитать байт) и в дебаге считываю переменную как инвертировано(принял 16 бит переменую ид устройство- должно по даташиту hex5449 а мне считывается dec18772 в hex 4954) как нормальную переменную получить ? Может кто то подскажет -а может это не важно.. логический анализатором прочел как нужно. спасибо)

  • @user-bw4fs8zp3p
    @user-bw4fs8zp3p 2 года назад

    TCA9535 имеет стоимость как у МК с Cortex-M0 и даже дороже

  • @user-hg9dd4gb9i
    @user-hg9dd4gb9i 4 года назад

    Посоветуйте пожалуйста на многих устройствах где необходимо i2c соединить кабелем и где рядом мощные коммутационные помехи временами зависает микроконтроллер точно Иза i2c. сталкивались вы с зависанием i2c ? аналоговый фильтр на максимум ,пользуюсь watch dog ,но это временно решение думал раз в секунду делать переинициализацию i2c ,в моем проекте опасно зависание микроконтроллера связанно с транспортом

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      Интерфейс I2C не предназначен для соединения нескольких устройств. А уж тем более в транспорте. Если вы используете феритовое колечко на линии, то это немного улучшит ситуацию. А вообще правильнее использовать более подходящие интерфейсы. Например, CAN.

    • @user-hg9dd4gb9i
      @user-hg9dd4gb9i 4 года назад

      Vladimir Medintsev там линия 40 см, с can и madbas сложнее и дороже схема ,я всё-таки грешу на hal,на avr линии по 20 метров были и ничего ну потерялись данные следующие пришли контроллер не зацыклился, в hal_i2c.c в функции hal_i2c_mem_read есть цыкл do while может там зацыкливание ?

    • @user-hg9dd4gb9i
      @user-hg9dd4gb9i 4 года назад

      В общем решил эти проблемы ,добавил в мейне переинициализацию постоянно i2c и в функциях hal где есть цыклы do while добавил выход по количеству проходов , теперь. Как бы не замыкал наводил помехи i2c востанавливатся , по хорошему надо делать обработчик ошибок ,но это для меня ещё темный лес , может будет у вас ролик про обработки ошибок это не только i2c но также другие интерфейсы?

    • @dazzershell
      @dazzershell 3 года назад

      @@user-hg9dd4gb9i может зависнуть не только контроллер и2с, бывает что какое-то слейв устройство на шине после обрыва приема держит линию. От этого помогает передача 9 старт-команд, тогда все кто держал шину занятой ее освободят. Для этого ногами МК управлять приходится напрямую, а потом опять вернуть их под контроль модуля. У F103 модуль I2C сам по себе очень сырой, чтобы нормально работал, обработчик прерываний должен быть с максимальным приоритетом, с кучей неочевидных условий. Такой же модуль стоит на более мощном F407. У более новых моделей все нормально сделано, но тоже приходится разбираться.

    • @user-hg9dd4gb9i
      @user-hg9dd4gb9i 3 года назад

      @@dazzershell спасибо за информацию ,я сейчас использую расширитель портов i2c 6 микросхем, развёл питание уже с ключем по питанию, а оказывается что можно было не так извращаться я правда smsis драйвер не hal ,на работе секта smsis ,но по опыту hal нормально работает если не скоростные задачи и нет времени на возню с тем как написать свой драйвер переферии,

  • @zhmenyaBSD
    @zhmenyaBSD 4 года назад

    Владимир, добрый день. Подскажите был ли у Вас опыт работы с ds2482?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      А вы с какой целью интересуетесь?

    • @zhmenyaBSD
      @zhmenyaBSD 4 года назад

      @@VladimirMedintsev Ни как не выходит "заставит" её работать, из документации не понятно как правильно обращаться с её регистрами. Вдруг у Вас будет интерес с её "освоением".

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад +1

      @@zhmenyaBSD Да посмотрел я ее. Нет там ничего сложного. Вроде все в документации описано. Она единственное это перебирает регистры друг за другом. А так ничего необычного. Видео по этой микросхеме точно не будет. Она старая, кроме вас уж точно никому не интересная. Ее можно заменить одним транзистором и 3-мя резисторами и прекрасно в схеме обойтись без нее.

    • @zhmenyaBSD
      @zhmenyaBSD 4 года назад

      @@VladimirMedintsev Даже с сотней датчиков температуры? А хватит ли ресурсов МК (103c8t6) для обработки такого количества датчиков?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад +1

      Т.е. вот с микросхемой этой у вас ресурсов микроконтроллера хватит, а без нее вы сомневаетесь? Ну а если серьезно, то простое гугление дает массу библиотек на эту микросхему, возьмите ардуиновскую, прочитайте и перепишите ее под stm. Есть и куча обсуждений касательно stm. Так что ничего необычного и сложного там нету.

  • @romaVeber
    @romaVeber 5 лет назад

    есть протокол чуть интереснее i2c, есть интерфейс 1-wire (даже некоторые устройства заточены так что-бы брать питание от шины данных)

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      А чем он интереснее? Мне уже несколько лет кажется что 1wire относится к вымирающим интерфейсам которые никто не использует. Домофоны не в счет.

    • @romaVeber
      @romaVeber 5 лет назад

      @@VladimirMedintsev , единственный годный пример это ds18b20

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Стоп, вы же говорили что он интереснее...

    • @romaVeber
      @romaVeber 5 лет назад +1

      @@VladimirMedintsev, интересный что некоторые расширители портов запитываются шины, тоесть нужна только нога данных и земля (но увы из-за малой популярности очень дорогие)