Коротко про модуль PCF8574
Модуль PCF8574 додає вісім цифрових ліній P0–P7 до мікроконтролера через шину I²C. Він підходить для кнопок, кінцевих вимикачів, дискретних сигналів та нескладної індикації, коли в основної плати бракує GPIO.
Порти квазідвонапрямні: запис 0 активно стягує лінію до LOW, а запис 1 відпускає її та залишає слабке джерело струму до VCC. Тому HIGH тут не є звичайним сильним push-pull виходом, а перед читанням лінії як входу в її latch потрібно записати 1.[1][2]
Ключові характеристики
- Призначення
- розширення цифрових входів і виходів через I²C
- Лінії порту
- 8 квазідвонапрямних, P0–P7
- Мікросхема
- PCF8574 або PCF8574A; перевіряється за маркуванням
- Живлення
- 2,5–6 В
- Шина
- I²C, Standard-mode до 100 кГц
- Адреса PCF8574
0x20–0x27, залежно від A0–A2- Адреса PCF8574A
0x38–0x3F, залежно від A0–A2- Переривання
- INT, активний LOW, вихід із відкритим стоком
- Розміри модуля
- 48 × 15,5 мм
- Маса
- 5,6 г
- Робоча температура
- −40…+85 °C
Детальний опис та особливості
Як працюють P0–P7
PCF8574 не має окремого регістра напрямку, знайомого за GPIO більшості мікроконтролерів. Один записаний біт визначає поведінку лінії: 0 вмикає активне стягування до землі, а 1 вимикає сильний LOW-драйвер. Після подавання живлення всі вісім ліній перебувають у відпущеному HIGH-стані.[1][2]
Для кнопки між Pn і GND спочатку залиште відповідний біт рівним 1. Ненатиснута кнопка читається як HIGH, а натиснута стягує вхід до LOW. Якщо бібліотека після читання випадково запише отриманий LOW назад у latch, лінія залишиться активно притиснутою до землі навіть після відпускання кнопки.
Адресація та масштабування
Контакти A0, A1 і A2 задають одну з восьми адрес у межах установленого сімейства мікросхеми. Для PCF8574 використовуються 7-бітні адреси 0x20–0x27, для PCF8574A — 0x38–0x3F.[1] На одній шині можна використовувати до восьми модулів одного варіанта, якщо кожному призначено унікальну адресу, та отримати до 64 додаткових дискретних ліній.
Вихід INT переходить у LOW при зміні стану входу й дає змогу повідомити контролер про подію без постійного опитування всіх P0–P7. INT має відкритий стік і потребує коректного підтягування в межах логічної напруги системи.[1][2]
Живлення та логічні рівні
Діапазон живлення мікросхеми становить 2,5–6 В, але це не означає автоматичну сумісність будь-якої комбінації 3,3- і 5-вольтових вузлів. Рівень HIGH на входах залежить від VCC, а лінії SDA і SCL підтягуються до напруги шини.[2] Для 3,3-вольтового контролера живіть модуль у сумісному домені та переконайтеся, що підтягування I²C не піднімають SDA, SCL або INT до небезпечної для контролера напруги.
PCF8574 краще поглинає струм у LOW, ніж віддає його у HIGH. Для світлодіодів використовуйте струмообмежувальні резистори, а для реле, двигунів, соленоїдів та інших навантажень — окремі транзисторні ключі або драйвери. Значення з розділу Absolute Maximum не є допустимими робочими режимами, а число 25 мА не слід трактувати як гарантований струм кожного з восьми каналів одночасно.[2]
Підійде / не підійде
Підійде
- для додавання восьми повільних дискретних входів або виходів через I²C;
- для кнопок, перемикачів, кінцевих вимикачів і контактних датчиків;
- для індикаторних світлодіодів із правильно розрахованими резисторами;
- для систем, де зміни входів потрібно відстежувати через лінію INT;
- для Arduino-, ESP32- та інших контролерів після узгодження живлення й логічних рівнів.
Не підійде
- для аналогових вимірювань, ADC або DAC;
- як апаратний PWM-генератор чи джерело точних швидких імпульсів;
- для прямого живлення реле, двигунів, потужних світлодіодів або інших струмових навантажень;
- як I²C-мультиплексор для пристроїв з однаковими адресами;
- коли потрібен звичайний симетричний push-pull HIGH/LOW на кожному виході.
Приклади застосування
Панель із кнопками
Підключіть до восьми кнопок між P0–P7 і GND, залиште вхідні біти в стані 1 та додайте програмне усунення брязкоту контактів.
Контроль кінцевих вимикачів
Збирайте стани дверей, кришок або механічних обмежувачів, а INT використовуйте як сповіщення контролера про зміну входу.
Низькострумова індикація
Керуйте окремими індикаторними LED через резистори; схема з поглинанням струму в LOW зазвичай краще відповідає асиметрії виходів PCF8574.
Керувальні сигнали через драйвер
Використовуйте P0–P7 як логічні команди для перевіреного транзисторного каскаду або спеціалізованого драйвера, а живлення навантаження проводьте окремо.
Підключення та перший запуск
-
Оберіть напругу шини
Узгодьте VCC модуля з логічними рівнями контролера й усіма підтягуваннями SDA, SCL та INT.
-
З’єднайте основні контакти
Підключіть VCC, GND, SDA і SCL. Земля модуля, контролера та зовнішніх драйверів має бути спільною, якщо схема не використовує спеціально спроєктовану гальванічну розв’язку.
-
Визначте адресу
Звірте напис PCF8574 або PCF8574A на мікросхемі, перевірте стан A0–A2 та виконайте нешкідливе сканування I²C без запису байта в порт.
-
Задайте безпечний стартовий стан
Для ліній, які працюватимуть входами, запишіть
1. Не використовуйте0x00як тест присутності: такий запис активно стягне всі P0–P7 до LOW. -
Перевірте навантаження
Перед увімкненням реле, індикаторів або зовнішніх входів перевірте струм, полярність, стартові стани та поведінку програми після reset.
Докладніше про latch, released HIGH, адреси та безпечну роботу бібліотек: PCF8574 без магії: як працюють квазідвонапрямні входи-виходи.
Обмеження та безпека
Не підключайте силове навантаження безпосередньо
Котушки реле, двигуни, соленоїди та потужні світлодіоди потребують окремого драйвера, розрахованого джерела живлення й захисту від індуктивних викидів. Перевантаження P0–P7 може пошкодити мікросхему.
HIGH не є сильним push-pull рівнем
Запис 1 відпускає сильний LOW-драйвер і залишає слабке джерело струму. Не проєктуйте схему так, ніби P0–P7 можуть симетрично віддавати й поглинати однаковий струм.
Уникайте конфлікту виходів
Не з’єднуйте P0–P7 безпосередньо з push-pull виходом іншого контролера. Якщо PCF8574 запише LOW, а другий вихід подасть HIGH, між драйверами виникне надмірний струм.
Перевіряйте старт бібліотеки
Ініціалізаційний запис змінює фізичні стани P0–P7. До подавання живлення визначте безпечний байт для active-low навантажень і входів, а після reset не допускайте короткого небажаного ввімкнення зовнішнього обладнання.
FAQ
Яку I²C-адресу вказувати в програмі?
Для PCF8574 використовуйте адресу з діапазону 0x20–0x27, для PCF8574A — 0x38–0x3F. Точне значення залежить від A0–A2, тому перевірте маркування мікросхеми та результат I²C-сканера.
Як зробити Pn входом?
Запишіть 1 у відповідний latch-біт, а потім читайте фізичний рівень. Якщо залишити 0, PCF8574 сама активно триматиме лінію в LOW.
Чи можна напряму керувати реле?
Ні. Використовуйте транзисторний ключ або драйвер із потрібним струмом і захистом котушки; P0–P7 мають подавати лише керувальний сигнал.
Чи підтримує модуль PWM?
Апаратного PWM у PCF8574 немає. Часті записи через I²C створюють програмне перемикання з обмеженою частотою та джитером, тому для стабільного PWM потрібен спеціалізований контролер.
Чи можна підключити кілька однакових I²C-датчиків до P0–P7?
Ні. P0–P7 є цифровими лініями, а не додатковими шинами SDA/SCL. Для розділення I²C-пристроїв з однаковими адресами потрібен I²C-комутатор або мультиплексор.
Сумісні плати та альтернатива
- Для 5-вольтового прототипу підійде плата UNO R3; модуль і I²C-підтягування можна тримати в одному 5-вольтовому логічному домені.
- Для 3,3-вольтового IoT-проєкту можна використати ESP32 MiniKit; живлення модуля та підтягування шини мають залишатися безпечними для 3,3-вольтових GPIO.
- Якщо потрібно не додати GPIO, а розділити пристрої з однаковими I²C-адресами, оберіть 8-канальний I²C-комутатор TCA9548A.
Документи та джерела
- NXP Semiconductors — PCF8574; PCF8574A Remote 8-bit I/O expander for I²C-bus with interrupt, Rev. 5, 27 May 2013: квазідвонапрямні порти, стартовий стан, адреси, INT і Standard-mode I²C.
- Texas Instruments — PCF8574 Remote 8-Bit I/O Expander for I²C Bus, SCPS068K, Rev. K, September 2024: робочі умови, струмові межі, логічні рівні та будова P-порту.