INFORMACIÓN
El Adaptador DVI a FPC permite acceder directamente a las señales DVI a través de un conector FPC, facilitando el desarrollo de video definido por software. Es un modulo es completamente pasivo, lo que significa que no procesa la señal, sino que preserva la integridad de los pares diferenciales TMDS para transmisiones de alta velocidad.
El Adaptador DVI a FPC es útil para microcontroladores como RP2040/RP2350 vía header o por conectores Qwiic. Exponiendo señales TMDS y DDC, integrando FPC HSTX y QWIIC para facilitar acceso a video, control y comunicación I²C sobre DVI.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Marca: UNIT Electronics
- País de origen: Hecho en México
- Tipo: Adaptador de interfaz pasivo (Pass-through)
- Voltaje de alimentación: 3.3V a 5.5V
- Corriente: < 1 µA
- Compatibilidad : RP2040 y RP2350 (Raspberry Pi Pico 2).
- Interfaz: DVI, HSTX e I2C
- Conector de Entrada: FPC de 22 pines (paso de 0.5 mm), compatible con interfaces HSTX
- Conector de Salida: DVI estándar (con acceso total a los 19 pines de señal)
- Puerto QWIIC: Conector JST de 1 mm para acceso directo al canal DDC (I²C) y alimentación.
- Sin Procesamiento: No realiza conversión de protocolo ni acondicionamiento de señal; actúa como un puente directo.
- TMDS Optimizado: Mantiene la impedancia necesaria para los pares diferenciales de video de alta velocidad.
- Acceso Total: Expone todas las líneas auxiliares críticas: CEC (Consumer Electronics Control), HPD (Hot Plug Detect) y DDC.
- Temperatura de operación: –40 °C a +85 °C.
- Dimensiones: 43.18 mm x 30.48 mm
- Peso: 7 g
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Aplicaciones
- Generación de video DVI desde microcontroladores (RP2040 / RP2350)
- Depuración y análisis de señales TMDS y sincronización
- Lectura de EDID y control de display vía DDC/CI (I²C)
- Desarrollo de interfaces gráficas embebidas (HUD / UI)
- Validación de hardware y pruebas de enlace DVI
- Uso de cable DVI como medio físico para comunicación I²C
- Prototipado de sistemas de salida de video sin PHY dedicado
- Instrumentación de señales de control (CEC, HPD, SCL, SDA)
Código de ejemplo con el adaptador DVI a FPC – UNIT DevLab
El siguiente test de prueba se podrá visualizar en el monitor al que sea conectado el adaptador DVI a FPC , la gama de colores primarios en RGB, realizando un loop en donde se verán barras horizontales, verticales, un tablero de ajedrez y 8 variaciones de colores en toda la pantalla del monitor.
Para este ejercicio se usara una tarjeta con RP204, en nuestro caso utilizamos la tarjeta de desarrollo Dual ONE , en su modo de programacion hacia el MCU RP2040.
Diagrama de conexión

Código
El programa nos ayudara a realizar un testeo de la visualización en patrones y colores, previamente requeriremos la librería upico

Recuerda que para hacer uso de la Dual MCU ONE en su variante de RP2040, tendrás que verificar el puerto y seleccionar la tarjeta como se muestra a continuación:
![]() |
![]() |
Posteriormente realizaremos la carga del siguiente programa
// Pantalla de prueba DevLab para diagnosticar problemas de señal DVI
// Muestra patrones de color para verificar todos los canales TMDS
#include <upicodvi.h>
// Configuración DevLab - CORRECTA y VERIFICADA
static const struct dvi_serialiser_cfg devlab_dvi_cfg = {
.pio = pio0,
.sm_tmds = {0, 1, 2},
.pins_tmds = {16, 18, 20}, // TMDS0=GPIO14, TMDS1=GPIO12, TMDS2=GPIO8
.pins_clk = 22,
.invert_diffpairs = false
};
DVIGFX16 display(DVI_RES_320x240p60, devlab_dvi_cfg);
void setup() {
if (!display.begin()) {
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Pantalla de prueba con barras de colores
drawTestPattern();
}
void loop() {
// Ciclar entre diferentes patrones cada 3 segundos
static unsigned long lastChange = 0;
static int pattern = 0;
if (millis() - lastChange > 3000) {
lastChange = millis();
pattern = (pattern + 1) % 5;
switch(pattern) {
case 0: drawTestPattern(); break;
case 1: drawColorBars(); break;
case 2: drawCheckerboard(); break;
case 3: drawGradients(); break;
case 4: drawFullScreen(); break;
}
}
}
void drawTestPattern() {
display.fillScreen(0x0000); // Negro
// Barras verticales de colores primarios
int w = display.width() / 6;
display.fillRect(0*w, 0, w, display.height(), 0xF800); // Rojo
display.fillRect(1*w, 0, w, display.height(), 0x07E0); // Verde
display.fillRect(2*w, 0, w, display.height(), 0x001F); // Azul
display.fillRect(3*w, 0, w, display.height(), 0xFFE0); // Amarillo
display.fillRect(4*w, 0, w, display.height(), 0xF81F); // Magenta
display.fillRect(5*w, 0, w, display.height(), 0x07FF); // Cyan
// Texto de info
display.setTextSize(2);
display.setCursor(10, 10);
display.setTextColor(0xFFFF, 0x0000);
display.print("DevLab Test");
display.setTextSize(1);
display.setCursor(10, 30);
display.print("invert_diffpairs: true");
display.setCursor(10, 40);
display.print("pins: 8,12,14 clk:10");
}
void drawColorBars() {
// Barras horizontales
int h = display.height() / 8;
display.fillRect(0, 0*h, display.width(), h, 0xFFFF); // Blanco
display.fillRect(0, 1*h, display.width(), h, 0xFFE0); // Amarillo
display.fillRect(0, 2*h, display.width(), h, 0x07FF); // Cyan
display.fillRect(0, 3*h, display.width(), h, 0x07E0); // Verde
display.fillRect(0, 4*h, display.width(), h, 0xF81F); // Magenta
display.fillRect(0, 5*h, display.width(), h, 0xF800); // Rojo
display.fillRect(0, 6*h, display.width(), h, 0x001F); // Azul
display.fillRect(0, 7*h, display.width(), h, 0x0000); // Negro
display.setTextSize(1);
display.setCursor(5, 5);
display.setTextColor(0x0000);
display.print("Barras Horizontales");
}
void drawCheckerboard() {
// Patrón de tablero de ajedrez
display.fillScreen(0x0000);
int size = 20;
for (int y = 0; y < display.height(); y += size) {
for (int x = 0; x < display.width(); x += size) {
if (((x/size) + (y/size)) % 2 == 0) {
display.fillRect(x, y, size, size, 0xFFFF);
}
}
}
display.setTextSize(1);
display.setCursor(5, 5);
display.setTextColor(0xF800, 0xFFFF);
display.print("Tablero Ajedrez");
}
void drawGradients() {
// Gradientes RGB
for (int x = 0; x < display.width(); x++) {
uint8_t r = (x * 255) / display.width();
uint16_t color = display.color565(r, 0, 0);
display.drawFastVLine(x, 0, 80, color);
}
for (int x = 0; x < display.width(); x++) {
uint8_t g = (x * 255) / display.width();
uint16_t color = display.color565(0, g, 0);
display.drawFastVLine(x, 80, 80, color);
}
for (int x = 0; x < display.width(); x++) {
uint8_t b = (x * 255) / display.width();
uint16_t color = display.color565(0, 0, b);
display.drawFastVLine(x, 160, 80, color);
}
display.setTextSize(1);
display.setCursor(5, 5);
display.setTextColor(0xFFFF);
display.print("Gradientes RGB");
}
void drawFullScreen() {
// Pantalla completa de un color sólido
static int colorIndex = 0;
uint16_t colors[] = {0xFFFF, 0xF800, 0x07E0, 0x001F, 0x0000};
const char* names[] = {"Blanco", "Rojo", "Verde", "Azul", "Negro"};
display.fillScreen(colors[colorIndex % 5]);
display.setTextSize(3);
display.setCursor(60, 100);
display.setTextColor(~colors[colorIndex % 5]); // Color invertido
display.print(names[colorIndex % 5]);
colorIndex++;
}
Se visualizara en el monitor la siguiente secuencia:

MQ-7 Detector de Monóxido de Carbono
MQ-5 Detector de Gas Natural
Cortador de Filamento para Bambu Lab X1 / P1 / A1
SIM-104 Conector Micro SIM
OTL133 Pantalla Touch PCAP 13.3 Pulgadas Grado Industrial
Sensor de Inclinacion KY-020
Flux Limpiador para Soldar 250 ML
Kit Conectores LT41 de Empalme Rápido 75pcs
Relevador 5V KY-019

































Valoraciones
No hay valoraciones aún.