Модуль часов DS3231 достался мне в комплекте с четырьмя проводами и фотографией подключения из чужого блога. Я соединил всё по ней за пять минут, запустил сканер — и получил пустой список. Час я потратил на проверку адресов и переустановку библиотек, пока не разглядел на большой макетке ловушку: рейки питания вдоль краёв разорваны посередине, и мой модуль сидел на правой половине, которую я так и не запитал. Провода были вставлены «по картинке», а электричества там не было вовсе.
Подключение I2C — процедура из четырёх проводов, но в ней три места, где новички теряют вечер: порядок подачи питания, физика самих линий и подтяжки. Хуже того — симптомы у всех трёх одинаковые: сканер печатает пусто, а виноват ищется кто угодно, кроме проводки. Разберём всё по шагам: соберём схему с землёй первой, посчитаем ток через резисторы 4,7 кОм и выясним, сколько модулей шина выдержит до того, как линии просядут. В финале — живой скетч, где на общих двух проводах работают сразу два устройства: часы и экран.
Четыре провода и земля первой
У типового модуля — часы, экран с переходником, датчик давления — четыре ножки: VCC, GND, SDA, SCL. Порядок сборки у меня выработан железно: земля, питание, сигнальные. Сначала GND: уровни на шине сравниваются относительно общего минуса, и без него сигнал SDA для платы — просто шум на проводе. Затем VCC на 5 В, и только после этого SDA на A4 и SCL на A5 — те самые пины, что закреплены за шиной на Uno, о чём мы говорили в уроке про два провода I2C.
На платах Uno R3 линии продублированы отдельными гнёздами SDA и SCL у края платы — втыкать удобнее, электрически это те же A4 и A5. Перенести шину на другие пины нельзя: за ними закреплена аппаратная периферия TWI. Если модулей несколько, все они вешаются параллельно на те же четыре провода — питание и земля общие, а различает собеседников адрес, зашитый в каждом чипе. Для макетки это означает ещё и общий бюджет тока: три-четыре модуля едят копейки, но кормить их лучше от одного источника, а не от двух половин схемы.
| Ножка модуля | Куда на Uno | Если перепутать |
|---|---|---|
| VCC | 5V | Модуль молчит; на самодельных платах переполюсовка доходит до порчи чипа |
| GND | GND | Сканер печатает пусто при живом виде модуля — мой случай из начала урока |
| SDA | A4 | Код 2 у сканера: подтверждений нет, хотя питание в порядке |
| SCL | A5 | Такта нет — шина молчит так же, как при пропавшей земле |
Открытый сток: почему линии нельзя толкать вверх
Линии I2C устроены как открытый сток: каждое устройство умеет только прижимать провод к земле внутренним транзистором, а вверх его поднимает резистор подтяжки, соединяющий линию с 5 В. Метафора — дверь с доводчиком: пружина держит дверь открытой, любой участник может её прижать, отпустил — дверь вернулась сама. Никто никогда не толкает линию силой вверх — именно поэтому на шине невозможен конфликт «двое толкают в разные стороны», который на классической цифровой логике рвёт выходы: там встречные 5 В и земля дают ток в десятки миллиампер, и через минуту пин умирает.
Через подтяжку при прижатой линии течёт совсем небольшой ток: 5 В на 4700 Ом — около одного миллиампера. Номинал 4,7 кОм стал типовым не случайно: он достаточно мал, чтобы быстро возвращать линию вверх на 100–400 кГц, и достаточно велик, чтобы не греть шину впустую. Для сравнения: слабая подтяжка 10 кОм при той же прижатой линии пропускает полмиллиампера, а тугая 2,2 кОм — уже 2,3 мА. Туже берут на длинных проводах и разогнанной шине, слабее — на коротких медленных линиях с одним-единственным модулем. За физикой стоит RC-цепочка: резистор заряжает ёмкость провода, и чем она больше — тем дольше фронт ползёт вверх, поэтому на длинных проводах слабая подтяжка первой сдаётся.
Теперь арифметика, о которой забывают чаще всего. На готовых модулях подтяжки уже распаяны: на плате DS3231 стоят два резистора 4,7 кОм, на переходнике для экранов — тоже. Параллельные резисторы складываются в меньшее сопротивление: два модуля дают 4700 / 2 = 2,35 кОм, три — 1,57 кОм, пять — уже 940 Ом. При прижатой линии ток через девятьсот ом вырастает до 5,3 мА — контроллер это переживёт, но фронты поднимаются всё медленнее, и на 400 кГц шина начинает сбоить раньше по времени, чем по току. Столкнувшись с редкими каракулями на экране из трёх-четырёх модулей, я первым делом проверяю не код, а суммарную подтяжку шины.
Моё правило с границей: до трёх модулей с бортовыми подтяжками ничего не трогаю; с четвёртого — выпаиваю лишние резисторы или беру модули без подтяжек. Быстрая проверка без паяльника: мультиметр между SDA и VCC подключённого модуля покажет около 4,7 кОм, если подтяжка на борту, и бесконечность, если её нет. Тридцать секунд — и вы точно знаете, кто на шине держит уровень, а кто рассчитывает на чужие резисторы.
#include <Wire.h> int probe(byte addr) { // стук в одну дверь Wire.beginTransmission(addr); return Wire.endTransmission(); // 0 — кто-то ответил} void setup() { Wire.begin(); Serial.begin(9600); Serial.println("Тест шины после сборки"); Serial.print("Часы 0x68: "); Serial.println(probe(0x68) == 0 ? "живой" : "молчит"); Serial.print("Экран 0x27: "); Serial.println(probe(0x27) == 0 ? "живой" : "молчит"); Serial.print("Экран 0x3F: "); Serial.println(probe(0x3F) == 0 ? "живой" : "молчит");} void loop() { // Схема проверена — в loop() пока пусто}Как читать результаты. Молчат оба — значит, физика: земля не общая, питание не дошло, сигнальные перепутаны или подтяжек нет вовсе. Живой только 0x27 — проверьте вторую партию переходника: микросхема PCF8574A живёт на 0x3F. И главное правило отладки — меняйте по одному фактору за раз: подвигали провода — прогнали тест, передвинули подтяжку — снова тест. Если заменить сразу и провода, и модуль, вы никогда не узнаете, что именно было виновато. Все пять кодов возврата endTransmission() и полную таблицу типовых адресов разбирает базовый урок про сканер — там же про конфликты, когда два модуля претендуют на один номер. А если схема на бумаге из чужого блога не совпала с вашей макеткой, минуты на проверку экономит умение читать схемы — мы его качали в уроке про чтение схем.
Про макетку — отдельно, потому что грабли сверху. Рейки питания вдоль краёв на больших платах разорваны посередине: запитав левый край, легко не заметить, что правая половина мертва. Мой порядок теперь такой: две перемычки через разрыв рейки — в самом начале сборки, до любых модулей. Об этой и соседних ловушках предупреждал урок про макетку; на шине I2C она бьёт больнее всего, потому что симптомы — «пусто» от сканера — списывают на адреса и библиотеки, а виновата рейка. И держите в голове границу уровней: если на шину просится устройство на 3,3 В, прямую посадку на пятивольтовые подтяжки оно может не пережить — для разнородных шин нужен преобразователь уровней.
Два устройства на одной шине
- Порядок сборки: GND, потом VCC, потом SDA на A4 и SCL на A5; земля соединяется первой и для всех устройств сразу
- Линии I2C — открытый сток: устройства прижимают их к земле, вверх поднимают подтяжки, поэтому резисторы 4,7 кОм обязательны
- Через подтяжку при прижатой линии течёт около 1 мА; 2,2 кОм — для длинных проводов и 400 кГц, 10 кОм — для коротких медленных линий
- Бортовые подтяжки модулей работают параллельно: три модуля — 1,57 кОм; дальше четвёртого лишние резисторы лучше снимать
- Внутренние подтяжки 20–50 кОм — аварийная диагностика одиночного модуля, а не постоянное решение
- 1. С чего начинается подключение I2C-модуля по надёжному порядку сборки?
- 2. Почему устройства на шине умеют только прижимать линию к земле?
- 3. Какой ток течёт через подтяжку 4,7 кОм, пока линия прижата к земле на 5 В?
- 4. Три модуля, у каждого на борту подтяжка 4,7 кОм. Общее сопротивление подтяжек шины?
- 5. Годятся ли внутренние подтяжки ATmega 20–50 кОм для постоянной схемы из трёх модулей?
На экране в симуляторе — время, и оба устройства заняли одни и те же два сигнальных провода: адреса 0x27 и 0x68 не пересекаются, поэтому каждый слышит только обращения к себе. Никаких переключателей входов, никаких мультиплексоров — просто два адреса в одном скетче. На реальной макетке до этой картинки нужно доехать на четырёх проводах на модуль — таблица из начала урока мой чек-лист, прозвонка из заметки — страховка. Как вывести на такой экран первый текст, показано в уроке про первый текст на LCD по I2C, а часы крупным планом разобраны в уроке про DS3231. Когда схема собрана и запитана, первым я заливаю сканер из следующего урока: за полминуты он печатает, кто на самом деле живёт на шине.
Частые вопросы по теме урока
- С чего начинается подключение I2C-модуля по надёжному порядку сборки?
- Земля первой: уровни на шине сравниваются относительно общего минуса, и без него сигналы для платы — шум. GND
- Почему устройства на шине умеют только прижимать линию к земле?
- Открытый сток исключает конфликт выходов: вверх линию тянет резистор, а не кто-то из участников шины. Линии — открытый сток: вверх их поднимают подтяжки
- Какой ток течёт через подтяжку 4,7 кОм, пока линия прижата к земле на 5 В?
- Закон Ома: 5 В / 4700 Ом ≈ 1,06 мА. Именно поэтому шина не греет подтяжки впустую и не просаживает питание. Около 1 мА
- Три модуля, у каждого на борту подтяжка 4,7 кОм. Общее сопротивление подтяжек шины?
- Параллельные резисторы складываются в меньшее: 4700 / 3 ≈ 1,57 кОм. Пять модулей дали бы уже 940 Ом. 1,57 кОм
- Годятся ли внутренние подтяжки ATmega 20–50 кОм для постоянной схемы из трёх модулей?
- Внутренние подтяжки включаются и работают, но вяло поднимают линию — на шине из нескольких модулей и на 400 кГц их не хватает. Нет: они слишком слабы, нужны внешние 4,7 кОм