La forma más sencilla es simplemente colocar un divisor resistivo. Todo lo que necesitas son dos resistencias (o una resistencia y un diodo Zener).
Agregar un paso de entrada que sea de 1 kOhm para señalizar y un Zener de 3.3V desde la señal a tierra mantendría la capacidad de entrada útil hasta unos pocos voltios, mientras que es muy resistente a la sobretensión. A 12 V, verías aproximadamente 9 mA a través del Zener, que normalmente puede tomar hasta 100 mA antes de morir.
Hay dos inconvenientes:
1) Hay algo de capacitancia en el Zener, además de agregar la resistencia a la entrada, se producirá un empeoramiento del rendimiento de la señal. La constante de tiempo de un Zener de 100 pF con una resistencia de 1 kOhm es RC == 1000 * 100e-12 == 1e-7 segundos; lo que significa que las señales más rápidas que aproximadamente un megahertz se encontrarán con problemas de tiempo de subida. (El pulgar y el índice aquí: las señales de abajo verán algunos problemas; las señales de arriba verán más. El punto de -3dB de este filtro está a 1.5 MHz)
2) Habrá algo de drenaje de corriente en el bus de señal. 9 mA en realidad no es insignificante para algunas etapas de salida más débiles; varios microcontroladores pueden ser tan débiles como la capacidad del controlador de 2 mA. Debe verificar cuánta corriente puede generar la señal de 12V.
simular este circuito : esquema creado usando CircuitLab
Otras opciones incluyen varios traductores de nivel. Puede crear un traductor de nivel simple con un solo MOSFET de N canales. Esto no tiene los problemas actuales anteriores, aunque aún requerirá que la señal de 12 V pueda recibir una señal de 3.3 V a varios miliamperios (esto generalmente no es un problema).
simular este circuito
Esto tiene la ventaja (o retroceso) de que si el pin de entrada se agota (como salida), también intentará reducir la señal de 12 V.
Tenga en cuenta que CircuitLab usa un símbolo extraño para el MOSFET de canal N; por lo general, hay dos líneas para la fuente y la flecha apunta en el centro.