Микроконтроллеры с шиной i2c

Опыт нашей предыдущей работы с микроконтроллерами AVR показал то, что мы уже многому научились, в том числе общаться с внешними устройствами типа ПК. Теперь, я думаю, все понимают, что этого недостаточно. Есть масса устройств и датчиков, которые нам хочется подключить к микроконтроллера и, мало того, ещё ими и поуправлять, забрать у них какие-то данные. Только данные девайзы подключаются к МК с помощью проводов и существует несколько видов подключений. Один из таких видов – шина I2C. Данный интерфейс является авторской разработкой компании Phillips и поэтому Atmel, чтобы не нарушать авторские права, немного изменила наименование данной шины и назвала её TWI (Two-wire Serial Interface).

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

Как мы уже поняли, данный интерфейс предаёт данные по проводам. Причем именно по двум проводам

Микроконтроллеры с шиной i2c

Как мы видим из данной блок-схемы, у нас есть два провода или контакта – SDA и SCL, подсоединённые к контроллеру к его соответствующим ножкам, а затем к этим проводам мы ещё подключаем какое-нибудь устройство или несколько устройств. Теоретически мы можем подключить до 127 устройств, впоследствии мы поймём, почему именно столько. Ножка SDA отвечает за передачу и приём данных по данной шине, а ножка SCL – это ножка тактирования, таким образом шина I2C является синхронной, что увеличивает стабильность и гарантированность передачи данных по ней. Также в данной блок-схеме мы наблюдаем то, что ещё к данным ножкам необходимо подтянуть резисторы на шину питания, причём как правило в каких-то модулях или устройствах данные резисторы уже подтянуты, и. если мы подключим их несколько, то у нас получится ряд параллельно подключенных подтягивающих резисторов, что будет очень нехорошо и придется оставить их в каком-то одном усторйстве, а в других выпаять. Всё это происходит потому, что есть ограничение на номинал данных резисторов в зависимости от определенных условия

Микроконтроллеры с шиной i2c

Как показала практика, данные резисторы не должны быть сопротивлением более 10 килоом и менее 4,7 килоом.

Также, само собой, сигналы должны быть толерантными к логическим уровням нашего МК, поэтому подключенные устройства должны быть соответствующим образом запитаны, а также общий провод устройств и контроллера также должен быть объединён.

Хочу подчеркнуть, что данный интерфейс в микроконтроллрах AVR реализован на аппаратном уровне. Можно также организовывать его и программным способом, путём включение в определённое время двух любых ножек портов в определенные логические состояния, но само собой, аппаратная организация всегда лучше по всем показателям. Программная реализация как правило используется, если не хватит одной шины, но как правило хватает, так как мы выше уже видели, что устройств можно к одной шине подключить несколько. Таким образом, мы будем рассматривать именно аппаратную реализацию – на уровне регистров контроллера.

В сдедующей блок-схеме мы видим следующие регистры интерфейса TWI в контроллере Atmega8

Микроконтроллеры с шиной i2c

Давайте с ними кратко ознакомимся.

Регистр TWBR – это регистр, в котором мы устанавливаем значения для обеспечения определённой скорости шины. Устройства, которые мы подключаем по I2C требуют определённой скорости ну или определённого диапазона скоростей. Расчитывается эта скорость или битрейт по следующей формуле

Микроконтроллеры с шиной i2c

Как мы видим, в данной формуле для расчета частоты шины участвует частота тактирования контроллера, значение регистра TWBR, а также значение TWPS, судя по формуле представляющий собой предделитель, то есть, чем он больше, тем больше будет коэффициент деления, так как в степерь значения данного регистра мы возводим цифру 4.

Причем TWPS – это не отдельный регистр, а совокупность всего лишь двух битов статусного регистра TWSR, в котором помимо этих битов есть ещё и другие, посредством которых мы будем отслеживать определенные состояния или ошибки обмена данными. Есть перечень кодов статуса, по которым мы и будем узнавать, удачно ли прошла команда или что-то не так.

Также само собой существует ещё и управляющий регистр TWCR, с помощью установки в соответствующее состояния битов которого мы будем определённым образом настраивать нашу шину.

Есть ещё адресный регистр TWAR, с помощью которого, если мы настраиваем контроллер ведущим устройством, мы передаем ведомому устройству 7-битный адрес (отсюда и 127 максимально устройств на шине), по которому-то как раз и будет обращение именно к определённому устройству из всех навешанных на наши два провода. А восьмой бит к адресу будет добавляться для того, чтобы передать, читаем мы данные или пишем. А если у нас контроллер будет настроен как ведомое устройство, то в данном регистре мы будем получать от ведущего адрес и сравнивать его с определённым, чтобы понять, обратился ведущий именно к нам или к кому-то другому.

Ну, само собой, есть и регистр данных, в который мы в случае ведущего устройства записываем данные для передачи по шине, а в случае ведомого считываем пришедшие по шине данные.

Вот, вообщем, вкратце о регистрах так.

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

Читайте также: Шины зимние шипованные мишлен x ice норд 4

Программатор и модуль RTC DS1307 с микросхемой памяти можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Видео:Урок №7. Подключаем шину I2C в микроконтроллере Atmega8.Скачать

Урок №7. Подключаем  шину I2C в микроконтроллере Atmega8.

Введение

В составе некоторых микроконтроллеров AVR есть модуль двухпроводного последовательного интерфейса (Two -wire Serial Interface или TWI). Модуль предназначен для организации обмена данными между микросхемами, подключенными к двухпроводной шине. Основное преимущество этого интерфейса перед SPI и UART`ом — это возможность организации сети из нескольких устройств.

Двухпроводный интерфейс является аналогом I2C интерфейса фирмы Philips, только в случае AVR, не поддерживает высокие скорости передачи данных (свыше 400 kbit/s). Соображения, по которым Atmel использует другое названия, видимо связано с нежеланием платить Philips за лицензию.

В этом материале мы разберемся с основами двухпроводного последовательного интерфейса, а в следующих перейдем к работе с TWI модулем AVR.

Далее я буду опираться на даташит atmega16 и спецификацию I2C.

Видео:Введение в шину I2CСкачать

Введение в шину I2C

Подключение устройств к I2C шине

I2C шина представляет собой две двунаправленные линии связи — SDA (Serial Data Line) и SCL (Serial Clock Line). По SDA передаются данные, по SCL тактовый сигнал. Обе линии подтянуты через резисторы к плюсу питания.

Устройства на шине подразделяются на ведущих (master) и ведомых (slave). Ведущие запускают и завершают передачу данных, ведомые — отвечают на запросы. Одни — начальники, другие — подчиненные. Микроконтроллеры могут совмещать в себе обе эти функции.

Микроконтроллеры с шиной i2c

Выходные каскады устройств, поддерживающих I2C, выполнены как структуры с открытым коллектором/стоком. При подключении к шине, они образуют схему монтажного «И». Это значит, что любое устройство, установившее низкий логический уровень на линии шины, «проваливает» высокий уровень остальных устройств.

Микроконтроллеры с шиной i2c

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

Существует механизм распределения приоритетов между ведущими, если они начинают передачу данных одновременно. Он заключается в том, что ведущие устанавливают на шине данные и проверяют результат. Если он отличается от ожидаемого, устройство теряет приоритет и останавливает передачу данных.

Видео:Лекция 308. Шина I2CСкачать

Лекция 308.  Шина I2C

Передача данных по I2C

Данные передаются поразрядно (спасибо кэп!), старшим разрядом вперед. Каждый разряд сопровождается тактовым сигналом.

Микроконтроллеры с шиной i2c

Начало и окончание передачи данных сопровождается специальными состояниями шины — СТАРТ и СТОП. Эти состояния формирует ведущее устройство. Также ведущий может сформировать состояние повторного старта до формирования состояния СТОП.

Микроконтроллеры с шиной i2c

Данные передаются по I2C шине со служебной информацией. Все вместе это называется пакетом. Существуют адресные пакеты и пакеты данных. Адресные пакеты состоят из 7-и разрядного адреса, управляющего бита R/W и бита квитирования (весь пакет — 9 бит). Адресный пакет нужен, чтобы обратиться к конкретному устройству.

Микроконтроллеры с шиной i2c

R/W — определяет последующее направление передачи данных. Бит квитирования — это ответ ведомого устройства на принятый адрес. Если адрес распознан, ведомый выдает на линию SDA низкий уровень. В противном случае на линии удерживается высокий уровень.

Под адрес отведено 7 разрядов, что как бы намекает на возможность адресации 128 устройств, но это не совсем так. Во-первых существует ряд служебных адресов, например, 0000000 — это адрес общего вызова (обращение ко всем ведомым устройствам). Во-вторых есть режим 10-и разрядной адресации, когда адрес передается двумя пакетами. Не буду углубляться в эту тему, только скажу, что адреса из диапазона 1111000. 1111111 не рекомендуется использовать в TWI модуле AVR (курим даташит).

Пакеты данных состоят из байта данных и бита квитирования, то есть тоже имеют длину 9 бит. После приема каждого байта данных, принимающее устройство (приемник) отвечает передающему устройству (передатчику), устанавливая на линии SDА низкий уровень (это и есть бит квитирования). Если принимающее устройство получило последний байт или больше не может продолжать прием данных, оно должно «оставить» на линии SDA высокий уровень.

Микроконтроллеры с шиной i2c

В общем случае, полный цикл обмена по I2C состоит из следующих шагов:

— формирование состояния СТАРТ,
— передача адресного пакета,
— передача пакетов данных,
— прием пакетов данных,
— формирование состояния СТОП.

Видео:Шина данных I2C и многозадачность микроконтроллераСкачать

Шина данных I2C и многозадачность микроконтроллера

Первые шаги с STM32 и компилятором mikroC для ARM архитектуры — Часть 4 — I2C, pcf8574 и подключение LCD на базе HD4478

Следующую статью я хочу посвятить работе с распространенным интерфейсом i2c, достаточно часто используемом в разнообразных микросхемах, подключаемых к микроконтроллеру.

I2C представляет собой шину работающую по двум физическим соединениям (помимо общего провода). Достаточно много о ней расписано в Интернете, неплохие статьи есть в Википедии. Кроме того алгоритм работы шины очень понятно описан здесь. В вкратце, шина представят собой двухпроводную синхронную шину. На шине может одновременно находится до 127 устройств (адрес устройства 7-битный, к этому вернемся далее). Ниже приведена типичная схема подключения устройств к i2c шине, с МК в качестве ведущего устройства.

Микроконтроллеры с шиной i2c

Для i2c все устройства (как мастер так и слейвы) используют open-drain выходы. Проще говоря они могут притягивать шину ТОЛЬКО К ЗЕМЛЕ. Высокий уровень ша шине обеспечивается подтягивающими резисторами. Номинал этих резисторов обычно выбирается в диапазоне от 4,7 до 10 кОм. i2c достаточна чувствительна к физическим линиям, соединяющим устройства, поэто если используется соединение с большой емкостью (например длинный тонкий или экранированный кабель), влияние этой емкости может «размыть» фронты сигналов и помешать нормальной работе шины. Чем меньше подтягивающий резистор, тем меньше влияет эта емкость на характеристику фронтов сигнала, но ТЕМ БОЛЬШЕ НАГРУЗКА на выходные транзисторы на интерфейсах i2c. Значение этих резисторов подбирается для каждой конкретной реализации, но они не должны быть меньше 2,2 кОмов, иначе можно просто спалить выходные транзисторы в устройствах, работающих с шиной.

Читайте также: Прайс лист для шин в самаре

Шина состоит из двух линий: SDA (линии данных) и SCL (тактирующего сигнала). Тактирует шину Мастер устройство, обычно наш МК. Когда на SCL высокий уровень информация считывается с шины данных. Изменять состояние SDA можно только при низком уровне тактирующего сигнала. При высоком уровне SCL сигнал на SDAизменяется при формировании сигналов START (при высоком уровне SCL сигнал на SDA изменяется высокого на низкий) и STOP — при высоком уровне SCL сигнал на SDA изменяется с низкого на высокий).

Отдельно следует сказать, что в i2c адрес задается 7-битным числом. 8 — младший бит указывает направление передачи данных 0 — означает что слейв будет передавать данные, 1 — принимать.. Вкратце алгоритм работы с i2c такой:

  • Высокий уроень на SDA и SCL — шина свободна, можно начинать работу
  • Мастер поднимает SCL в 1, и изменяет состояние SDA c 1 на 0 — притягивает его к земле — формируется сигнал START
  • Мастер передает 7-битный адрес слейва с битом направления (данные на SDA выставляются когда SCL притянут к земле, и читаются слейвом когда он отпущен). Если слейв не успевает «схавать» предыдущий бит, он притягивает SCL к земле, давая понять мастеру что состаяние шинны данных не нужно менять: «еще читаю предыдущий». После того как мастер отпустил шину он проверяет, отпустил ли ее слейв.
  • После передачи 8 бит адреса мастер генерирует 9-й такт и отпускает шину данных. Если слейв услышал и свой адрес и принял его то он прижмет SDA к земле. Так формируется сигнал ASK — принял, все ОК. Если слейв ничего не понял, или его просто там нет то некому будет прижать шину. мастер подождет таймаут и поймет что его не поняли.
  • После передачи адреса, если у нас выставлено направление от мастера к слейву (8 бит адреса равен 1), то мастер передает данные в слейв, не забывая после передачи каждого байта проверять наличие ASK от слейва, ожидая обработки поступившей информации ведомым устройством.
  • При приеме мастером данных от слейва, мастер сам формирует сигнал ASK после приема каждого байта, а слейв контролирует его наличие. Мастер может специально не послать ASK перед отправкой команды STOP, обычно, так давая понять ведомому, что больше предавать данные не нужно.
  • Если после отправки данных мастером (режим записи) необходимо прочитать данные со слейва, то мастер формирует снова сигнал START, отправляя адрес слейва с флагом чтения. (еcли перед командой START не был передан STOP то формируется команда RESTART). Это используется для смены направления общения мастре-слейв. Например мы передаем слейву адрес регистра, а потом читаем из него данные.)
  • По окончанию работы со слейвом мастер формирует сигнал STOP — при высоком уровне тактирующего сигнала формирует переход шины данных с 0 в 1.

В STM 32 есть аппаратно реализованные приемопередатчики i2c шины. Таких модулей в МК может быть 2 или 3. Для их конфигурации используются специальные регистры, описанные в референсе к используемому МК.

В MicroC перед использованием i2c (как впрочем и любой периферии) ее необходимо должным образом проинициализировать. Для этого используем такую функцию (Иннициализация в качестве мастера):

  • n — номер используемого модуля, например I2C1 или I2C2.
  • I2C_ClockSpeed — скорость работы шины, 100000 (100 kbs, стандартный режим) или 400000 (400 kbs, быстрый режим). Второй в 4 раза быстрее, но его поддерживают не все устройства
  • *module — указатель на периферийный модуль, например &_GPIO_MODULE_I2C1_PB67, здесь не забываем что Code Assistant (ctrl-пробел) очень помогает.

Для начала проверим свободность шины, для этого существует функция I2Cn_Is_Idle(); возвращающая 1 если шина свободна, и 0 если по ней идет обмен.

Далее сформируем сигнал START, для чего используем:

где n — номер используемого модуля i2c нашего микроконтроллера. Функция вернет 0 если на шине возникла ошибка и 1 если все ОК.

Для того чтоб передать данные слейву используем функцию:

  • n — номер используемого модуля
  • slave_address — 7-битный адрес слейва.
  • *buf — указатель на наши данные — байт или массив байтов.
  • count — количество передаваемых байт данных.
  • END_mode — что делать после передачи данных слейву, END_MODE_STOP — передать сигнал STOP, либо END_MODE_RESTART снова отправить START, сформировав сигнал RESTART и дав понять ведомству, что сеанс работы с ним не окончен и с него сейчас будут читать данные.

Для чтения данных со слейва используется функция:

  • n — номер используемого модуля
  • slave_address — 7-битный адрес слейва.
  • *buf — указатель на переменную или массив в который мы принимаем данные, тип char или short int
  • count — количество принимаемых байт данных.
  • END_mode — что делать после приема данных от слейва END_MODE_STOP — передать сигнал STOP, либо END_MODE_RESTART отправить сигнал RESTART.

Давайте попробуем что-то подключить к нашему МК. Для начала: распостраненную микросхему PCF8574(A) представляющего собой расширитель портов ввода вывода с управлением по шине i2c. Данная микросхема содержит всего один внутренний регистр, являющийся ее физическим портом ввода-вывода. Тоесть если ей передать байт, он тут-же выставится на ее выводы. Если считать с нее байт (Передать START адрес с флагом чтения, сигнал RESTERT, прочитать данные и в конце сформировать сигнал STOP) то он отразит логические состояния на ее выводах. Подключим нашу микросхему в соответствии с даташитом:

Читайте также: Древний рим майкл шин

Микроконтроллеры с шиной i2c

Адрес микросхемы формируется из состояния выводов A0, А1, А2. Для микросхемы PCF8574 адрес будет: 0100A0A1A2. (Например у нас A0, А1, А2 имеют высокий уровень, соответственно адрес нашей микросхемы будет 0b0100111 = 0x27). Для PCF8574A0111A0A1A2, что с нашей схемой подключения даст адрес 0b0111111 = 0x3F. Если, допустим A2 соединить с землей, то адрес для PCF8574A будет 0x3B. Итого на одну шину i2c можно одновременно повесить 16 микросхем, по 8 PCF8574A и PCF8574.

Давайте попробуем что-то передать иннициализировать i2c шину и что-то передать нашей PCF8574.

Компилируем и запускаем нашу программу и видим что наши светодиоды попеременно моргают.
Я не просто так подключил светодиоды катодом к нашей PCF8574. Все дело в том, что микросхема при подачи на выход логического 0 честно притягивает свой вывод к земле, а вот при подаче логической 1 подключает его к + питания через источник тока в 100 мкА. Тоесть «честной» логической 1 на выходе не получить. И светодиод от 100 мкА не зажечь. Сделано это для того, чтобы без дополнительных регистров настраивать вывод PCF8574 на вход. Мы просто пишем в выходной регистр 1 (фактически устанавливаем состояния ножки в Vdd) и можем просто коротить его на землю. Источник тока не даст «сгореть» выходному каскаду нашего расширителя ввода/вывода. Если ножка притянута к земле, то на ней потенциал земли, и читается логический 0. Если ножка притянута к +, то читается логическая 1. С одной стороны просто, но с другой, про это всегда нужно помнить, работая с данными микросхемами.

Микроконтроллеры с шиной i2c

Давайте попробуем прочитать состояние выводов нашей микросхемы-расширителя.

Теперь нажимая на кнопочки мы включаем или отключаем наш светодиод. У микросхемы есть еще вывод INT. На нем формируется импульс каждый раз, когда меняется состояние выводов нашего расширителя ввода/вывода. Подключив его в входу внешнего прерывания нашего МК (как настроить внешние прерывания и как с ними работать я расскажу в одной из следующих статей).

Давайте используя наш расширитель портов подключим через него символьный дисплей. Таких существует великое множество, но практически все они построены на базе чипа-контроллера HD44780 и его клонов. Например я использовал дисплей LCD2004.

Даташит на него и контроллер HD44780 можно с легкостью найти в Интернете. Подключим наш дисплей к РCF8574, а ее, соответственно к нашему STM32.

Микроконтроллеры с шиной i2c

Микроконтроллеры с шиной i2c

HD44780 использует параллельный стробируемый интерфейс. Данные передаются по 8 (за один такт) либо 4 (за 2 такта) стробирующего импульса на выводе E. (читаются контроллером дисплея по нисходящему фронту, переходу с 1 в 0). Вывод RS указывает передаем ли мы нашему дисплею данные (RS = 1) (символы которые он должен отобразить, фактически из ASCII коды) либо команды (RS = 0). RW указывает направление передачи данных, запись либо чтение. Обычно мы пишем данные в дисплей, поэтому (RW = 0). Резистор R6 управляет контрастностью дисплея. Просто подключать вход регулировке контрастности к земле или питанию нельзя, иначе ничего не увидите.. VT1 служит для включения и выключения подсветки дисплея по командам МК. В MicroC есть библиотека для работе с такими дисплеями по параллельному интерфейсу, но обычно, тратить на дисплей 8 ног накладно, поэтому я практически всегда использую РCF8574 для работы с такими экранчиками. (Если кому-то будет интересно, то напишу статью про работу с дисплеями на базе HD44780 встроенными в MicroC по параллельному интерфейсу.) Протокол обмена не особо сложный (мы будем использовать 4 линии данных и передавать информацию за 2 такта), его наглядно показывает следующая временная диаграмма:

Перед передачей данных на наш дисплей его надо проинициаллизировать, передав служебные команды. (описаны в даташите, здесь приведем только самые используемые)

  • 0x28 — связь с индикатором по 4 линиям
  • 0x0C — включаем вывод изображения, отключаем отображение курсора
  • 0x0E — включаем вывод изображения, включаем отображение курсора
  • 0x01 — очищаем индикатор
  • 0x08 — отключаем вывод изображения
  • 0x06 — после вывода символа курсор сдвигается на 1 знакоместо

Так как нам будет нужно достаточно часто работать с данным индикатором то создадим подключаемую библиотеку «i2c_lcd.h». Для этого в Project Maneger клацнем правой кнопкой по папке Header Files и выберем Add New File. Создадим наш заголовочный файл.

Теперь опишем наши фунции, снова идем в Project Maneger клацнем правой кнопкой по папке Sources и выберем Add New File. Создаем файл «i2c_lcd.с».

Теперь подключим только что созданную библиотеку у файлу с нашей главной функцией:

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

В следующей статье мы продолжем разбиратся с i2c протоколом и устройствами работающем с ним. Рассмотрим работу с EEPROM 24XX памятью и акселерометром/гироскопом MPU6050.

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле


    💡 Видео

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

    Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

    Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32Скачать

    Что такое I2C ??? Подключаем GY-521 и Oled 96*16 к STM 32

    Программирование МК STM32. УРОК 8. HAL. Шина I2C. Подключаем микросхему RTC DS3231Скачать

    Программирование МК STM32. УРОК 8. HAL. Шина I2C. Подключаем микросхему RTC DS3231

    Урок 24. Узнаём адреса устройств на шине I2CСкачать

    Урок 24. Узнаём адреса устройств на шине I2C

    Программирование МК ESP32. Урок 6. I2C. Подключаем внешний EEPROMСкачать

    Программирование МК ESP32. Урок 6. I2C. Подключаем внешний EEPROM

    Логический анализатор шины i2cСкачать

    Логический анализатор шины i2c

    Шина I2C.Скачать

    Шина I2C.

    Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)Скачать

    Урок 9. Адреса модулей на шине I2C. Arduino (что такое I2C, адресация, как изменить адрес модуля)

    MCP2515, контроллер CAN шины с интерфейсом SPIСкачать

    MCP2515, контроллер CAN шины с интерфейсом SPI

    Программирование МК STM32. УРОК 22. HAL. I2C. I2C to LCD2004Скачать

    Программирование МК STM32. УРОК 22. HAL. I2C. I2C to LCD2004

    Программирование МК PIC. Урок 19. MSSP. I2C. Подключаем внешний EEPROM. Часть 1Скачать

    Программирование МК PIC. Урок 19. MSSP. I2C. Подключаем внешний EEPROM. Часть 1

    STM32: Интерфейсная шина I2C. Подключаем HDC1080.Скачать

    STM32: Интерфейсная шина I2C. Подключаем HDC1080.

    Шина данных i2c - декодируем/синхронизируем с помощью осциллографа Lecroy!Скачать

    Шина данных i2c - декодируем/синхронизируем   с помощью осциллографа Lecroy!

    PT2257, Электронный регулятор громкости с шиной I2CСкачать

    PT2257, Электронный регулятор громкости с шиной I2C

    Микросхемы и программаторы, Шины I2C и SPIСкачать

    Микросхемы и программаторы, Шины I2C и SPI

    I2C. Краткая теория с примером. STM32 CubeIDE.Скачать

    I2C. Краткая теория с примером. STM32 CubeIDE.
Поделиться или сохранить к себе:
Технарь знаток