3.4. Pinos e periféricos

Um pino é o periférico mais simples do MCU: um único fio que conecta o chip ao mundo externo. Toda interação com hardware real – acionar um LED, ler uma chave, medir uma tensão, enviar bytes por uma linha serial – acaba passando por um ou mais pinos.

3.4.1. Modos de pino

Um pino é configurado em um dentre alguns modos antes de fazer algo útil:

  • Pin.IN – entrada. O pino observa a tensão aplicada a ele a partir de fora e a reporta como 0 (baixo) ou 1 (alto).

  • Pin.OUT – saída. O pino se aciona para a tensão de alimentação (1) ou para o terra (0), de modo que componentes externos enxerguem essa tensão.

  • Pin.OPEN_DRAIN – saída que só pode puxar a linha para o nível baixo. Para ir ao nível alto, o pino se libera (fica flutuando) e um resistor de pull-up externo eleva a linha. Usado em barramentos compartilhados onde vários dispositivos podem acionar a mesma linha.

As entradas podem, opcionalmente, habilitar um resistor de pull interno que garante um nível definido quando nada externo está acionando o pino:

O construtor recebe id, mode e pull como argumentos posicionais:

from machine import Pin

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

3.4.2. Funções alternadas

A maioria dos pinos tem uma função alternada além de seu papel como GPIO. Um único pad físico no chip pode ser:

Outros periféricos (outros barramentos seriais, timers e assim por diante) também reivindicam pinos específicos; o projetista do chip conecta cada bloco de hardware a um conjunto fixo de pads. O ADC amostra apenas os pinos roteados para o seu multiplexador; uma UART transmite no único pino ao qual seu sinal TX está conectado.

Nota

As OpenMV cams rotulam os pinos do conector externo de P0 a P9 (varia ligeiramente conforme a placa). Qual pino carrega qual função alternada é específico de cada placa; consulte a referência rápida da OpenMV Cam para a tabela.

3.4.3. Variações entre placas

Alguns detalhes variam conforme a placa e devem sempre ser verificados na referência rápida, em vez de presumidos a partir de outra placa:

  • Tolerância de tensão. Algumas cams têm pinos de E/S tolerantes a 5 V (um sinal de 5 V pode ser aplicado diretamente sem danos); outras operam sua E/S em 3,3 V ou 1,8 V e exigem um conversor de nível para qualquer sinal acima disso. Conectar uma fonte de 5 V a um pino não tolerante pode danificar o chip.

  • Referência do ADC. A tensão que o ADC trata como fundo de escala depende da alimentação de E/S da placa. read_u16() sempre retorna 0..65535, mas a tensão que 65535 representa é qualquer que seja a referência da placa.

  • Capacidade de corrente (drive strength). Um pino GPIO pode fornecer ou drenar uma corrente limitada – normalmente dezenas de miliampères. Suficiente para um pequeno LED através de um resistor; insuficiente para um motor, uma cigarra ou qualquer carga indutiva. Recorra a um driver externo (transistor, MOSFET, ponte H) para qualquer coisa mais pesada.

A referência rápida da OpenMV Cam fornece os números exatos por placa.