3.4. Виводи та периферійні пристрої

Вивід – це найпростіший периферійний пристрій на MCU: одиночний провідник, що з’єднує чип із зовнішнім світом. Кожна взаємодія з реальним апаратним забезпеченням – управління світлодіодом, зчитування стану кнопки, вимірювання напруги, передача байтів по послідовній лінії – врешті-решт проходить через один або кілька виводів.

3.4.1. Режими виводу

Перш ніж виконувати корисну роботу, вивід налаштовується в один із кількох режимів:

  • Pin.IN – вхід. Вивід спостерігає напругу, що подається на нього ззовні, та повідомляє її як 0 (низький рівень) або 1 (високий рівень).

  • Pin.OUT – вихід. Вивід примусово встановлює себе або на рівень живлення (1), або на землю (0), щоб зовнішні компоненти бачили цю напругу.

  • Pin.OPEN_DRAIN – вихід, який може лише тягнути лінію до низького рівня. Щоб перейти у високий стан, вивід відпускає лінію (переходить у плаваючий стан), а зовнішній підтягувальний резистор піднімає її. Використовується для спільних шин, де кілька пристроїв можуть керувати однією лінією.

Для входів можна додатково увімкнути внутрішній підтягувальний резистор, який гарантує визначений рівень, коли жоден зовнішній сигнал не керує виводом:

  • Pin.PULL_UP – слабке підтягування до шини живлення.

  • Pin.PULL_DOWN – слабке підтягування до землі.

Конструктор приймає id, mode та pull як позиційні аргументи:

from machine import Pin

led    = Pin("P0", Pin.OUT)
button = Pin("P1", Pin.IN, Pin.PULL_UP)

3.4.2. Альтернативні функції

Більшість виводів мають альтернативну функцію на додаток до своєї ролі GPIO. Один фізичний контакт на чипі може бути:

  • Цифровим входом або виходом (machine.Pin).

  • Входом ADC для вимірювання напруги (machine.ADC).

  • Виходом PWM, що генерує прямокутний сигнал (machine.PWM).

  • Лінією TX або RX для UART (machine.UART).

Інші периферійні пристрої (додаткові послідовні шини, таймери тощо) також займають конкретні виводи; розробник чипа підключає кожен апаратний блок до фіксованого набору контактів. ADC вимірює лише виводи, підключені до його мультиплексора; UART передає на тому єдиному виводі, до якого підключений його сигнал TX.

Примітка

На платах OpenMV Cam зовнішні контакти позначаються P0..P9 (злегка відрізняється залежно від плати). Яка альтернативна функція закріплена за яким виводом – залежить від конкретної плати; дивіться таблицю у короткому довіднику OpenMV Cam.

3.4.3. Відмінності між платами

Деякі деталі відрізняються залежно від плати і завжди мають перевірятися за коротким довідником, а не припускатися за аналогією з іншою платою:

  • Допустима напруга. На деяких платах виводи сумісні з рівнем 5 В (сигнал 5 В можна підключити безпосередньо без ушкоджень); інші працюють на рівні 3,3 В або 1,8 В і потребують перетворювача рівнів для будь-якого сигналу вище цього. Підключення джерела 5 В до виводу, несумісного з таким рівнем, може пошкодити чип.

  • Опорна напруга ADC. Напруга, яку ADC вважає повною шкалою, залежить від шини живлення вводів/виводів плати. read_u16() завжди повертає 0..65535, але напруга, що відповідає 65535, визначається опорною напругою конкретної плати.

  • Навантажувальна здатність. Вивід GPIO може віддавати або споживати обмежений струм – зазвичай кілька десятків міліампер. Цього достатньо для невеликого світлодіода через резистор; недостатньо для двигуна, зумера або будь-якого індуктивного навантаження. Для важчих навантажень використовуйте зовнішній драйвер (транзистор, MOSFET, H-міст).

Короткий довідник OpenMV Cam містить точні значення для кожної плати.