сайт для палких паяльників

I2C

Пример работы ESP8266 (NodeMCU) с датчиком атмосферного давления, температуры и влажности BME280. Датчик BME280 работает по шине I2C (IIC). Шину IIC будем использовать для одновременной работы с датчиком BME280 и дисплеем SSD1306. Напомню, что пример использования дисплея SSD1306 с библиотекой UG8 был приведен в статье ESP8266 NodeMCU. SSD1306. U8G.
Читати далі

ESP8266 NodeMCU. I2C. BME280
(на русском языке)

Приклад роботи ESP8266 (NodeMCU) з датчиком атмосферного тиску, температури і вологості BME280. Датчик BME280 працює по шині I2C (IIC). Шину IIC будемо використовувати для одночасної роботи з датчиком BME280 та дисплеєм SSD1306. Нагадаю, що приклад використання дисплею SSD1306 з бібліотекою UG8 був наведений у статті ESP8266 NodeMCU. SSD1306. U8G.
Читати далі

ESP8266 NodeMCU. SSD1306. U8G
(на русском языке)

Для роботи з різними дисплеями NodeMCU використовує бібліотеку U8glib. Підтримуються дисплеї які працюють по шині SPI або IIC. В документації до NodeMCU можна перевірити чи підтримується саме ваша модель дисплею: https://nodemcu.readthedocs.io/en/master/en/modules/u8g/

У прикладі використовується графічний OLED дисплей SSD1306 який працює по шині IIC.

Читати далі

Для работы с различными дисплеями NodeMCU использует библиотеку U8glib. Поддерживаются дисплеи работающих по шине SPI или IIC. В документации к NodeMCU можно проверить поддерживается именно ваша модель дисплея: https://nodemcu.readthedocs.io/en/master/en/modules/u8g/

В примере используется графический OLED дисплей SSD1306 который работает по шине IIC.

Читати далі

В предыдущей статье мы рассмотрели работу STM32 с шиной I2C в качестве Мастера. То есть, он был ведущий и опрашивал датчик. Теперь сделаем так, чтобы STM32 был Slave-ом и отвечал на запросы, то есть сам работал как датчик. Мы выделим 255 байт памяти под регистры с адресами от 0 до 0xFF, и позволим Мастеру в них писать/читать. А чтобы пример был не таким простым, сделаем из нашего STM32, еще и аналого-цифровой преобразователь с интерфейсом I2C. ADC будет обрабатывать 8 каналов. Результаты преобразований контроллер будет отдавать Мастеру при чтении из регистров. Поскольку результат преобразования ADC занимает 12 бит, нам потребуется 2 регистра (2 байта) на каждый канал ADC.

Читати далі

20. STM32. Программирование STM32F103. I2C Slave
(на русском языке)

У попередній статті ми розглянули роботу STM32 з шиною I2C у якості Майстра. Тобто, він був ведучий і опитував сенсор. Тепер зробимо так, щоб STM32 був Slave-ом і відповідав на запити, тобто сам працював як сенсор. Ми виділимо 255 байт пам’яті під регістри з адресами від 0 до 0xFF, і дозволимо Майстру в них писати/читати. А щоб приклад був не таким примітивним, зробимо з нашого STM32, ще і аналого-цифровий перетворювач з інтерфейсом I2C. ADC буде обробляти 8 каналів. Результати перетворень контролер буде віддавати Майстру при читанні з регістрів. Оскільки результат перетворення ADC займає 12 біт, нам потрібно буде 2 регістра (2 байта) на кожний канал ADC.

Читати далі

Шина I2C достаточно популярна и очень много датчиков и различных устройств используют именно I2C. Я не буду писать кто, когда и для чего изобрел эту шину и как по ней бегают байты. Этой информации полно в Интернете, для этого существует Википедия. Когда Вы держите в руках сенсор и хотите как можно быстрее получить с него данные, и решить поставленную задачу, Вам хватит следующего минимума знаний:

  1. Шина I2C – это двухпроводная шина с линиями SCL, SDA. Теоретически, на одну шину I2C можно параллельно подключить до 112 устройств.
  2. Обе линии шины должны быть через резисторы подключенными к питанию. Рекомендуемый номинал резисторов зависит от скорости и других параметров шины. Обычно мало кто этим озадачивается и ставят резисторы в пределах от 4.7к до 10кОм. Резисторов должно быть по одному на каждую линию.
  3. Если Вы подключаете несколько модулей, а на каждом модуле уже впаяны подтягивающие резисторы, то получается, что резисторы включаются параллельно и их суммарное сопротивление становится меньше. Это не очень хорошо. Но, если вы включаете только два таких модуля и на каждом впаяны резисторы по 10 кОм, тогда суммарное сопротивление будет 5ком, что попадает в пределы допустимой нормы и шины I2C, скорее всего, будет работать. Но повторяю: подключать на каждую линию более одного резистора – не очень хорошая идея.
  4. Каждое устройство на шине I2C имеет отдельный адрес.
  5. На шине I2C может быть только один Master и один или несколько Slave.
  6. Скорость шины может быть разной. Обычно используют два стандарта 100 и 400 КГц. Скорость линии должна определяться по самому медленному устройства на шине. Если Slave не успевает, он может “придержать” шину и все его будут ждать. Такой подход, хотя и является стандартом, но на практике работает не всегда. В случае, когда Master не умеет ждать (этим, например страдают микрокомпьютеры), на шине начинается беспорядок. То есть, некорректная работа одного из устройств на шине I2C (не важно, в каком качестве – Master или Slave) может вызвать проблемы в работе всех устройств.
  7. Если напряжение питания контроллера отличается от напряжения питания датчика, они должны включаться через двунаправленную схему согласования логических уровней.

Читати далі

19. STM32. Программирование STM32F103. I2C Master
(на русском языке)

Шина I2C досить популярна і дуже багато сенсорів та інших пристроїв використовують саме I2C. Я не буду писати хто, коли і для чого винайшов цю шину та як по ній бігають байти. Цієї інформації повно у Інтернеті, для цього існує Вікіпедія. Коли Ви тримаєте в руках сенсор і бажаєте якнайшвидше отримати з нього дані, та вирішити поставлену задачу, Вам вистачить наступного мінімуму знань:

  1. Шина I2C – це двопровідна шина з лініями SCL, SDA. Теоретично, на одну шину I2C можна паралельно підключити до 112 пристроїв.
  2. Обидві лінії шини мають бути через резистори підключеними до живлення. Рекомендований номінал резисторів залежить від швидкості та інших параметрів шини. Зазвичай мало хто з цим морочиться і ставлять резистори у межах від 4.7кОм до 10кОм. Резисторів має бути по одному на кожну лінію.
    Якщо Ви підключаєте декілька модулів, а на кожному модулі вже впаяні підтягуючі резистори, то виходить, що резистори вмикаються паралельно і їх сумарний опір стає меншим. Це не дуже добре. Та, якщо ви вмикаєте лише два таких модуля і на кожному впаяні резистори по 10 кОм, тоді сумарний опір буде 5КОм, що попадає у межі допустимої норми і шина I2C, скоріш за все, буде працювати. Але повторюю: чіпляти на кожну лінію більше одного резистора – не дуже гарна ідея.
  3. Кожен пристрій на шині I2C має окрему адресу.
  4. На шині I2C може бути лише один Master і один, або декілька Slave.
  5. Швидкість шини може бути різною. Зазвичай використовують два стандарти 100 і 400 КГц. Швидкість лінії має визначатися по самому повільному пристрою на шині. Якщо Slave не встигає, він може “притримати” шину і всі його будуть чекати. Та такий підхід, хоч і є стандартом, але на практиці працює не завжди. У випадку, коли Master не вміє чекати (цим, наприклад страждають мікрокомп’ютери), на шині починається безлад. Тобто, некоректна робота одного з пристроїв на шині I2C (не важливо, у якій ролі – Master або Slave) може викликати проблеми у роботі усіх приладів.
  6. Якщо напруга живлення контролера відрізняється від напруги живлення датчика, вони мають вмикатися через двонаправлену схему узгодження логічних рівнів.

Читати далі

Raspberry Pi B имеет две шины I2C (TWI), которые выведены на различные разъемы. Линии SDA, SCL шины 1 выведены на разъем P1. SDA, SCL шины 0 выведены на разъем P5.

P5:

RaspberryPi_B_Rev2_P5 RaspberryPi_B_Rev2_I2C0

Читати далі

Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна