Salida de vídeo de Raspberry Pi Pico

TL;DR

El Raspberry Pi Pico es un pequeño microcontrolador increíble. Si bien no tiene una interfaz de salida de vídeo integrada, como sus hermanos mayores Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / doble HDMI en su caso), ¡es posible añadir una salida de vídeo al Pico! (Como VGA o DVI sobre un conector HDMI, sigue leyendo para más detalles)

En este post, explicaremos por qué una salida de vídeo es una característica muy especial para los microcontroladores, y qué tipos de salida de vídeo puedes construir o comprar para tu Pico. También le mostraremos un ejemplo de código - ya precompilado para que pueda descargarlo directamente, y luego hablaremos de lo que necesita modificar para hacerlo funcionar.

Nuestra tienda hermana, buyzero.devende una gran variedad de accesorios Pico, entre ellos el calcetín DVIy el Placa portadora VGA para Pico.

Nota: el Pico no tiene un sistema operativo Linux como el Raspberry Pi Zero W por ejemplo. Así que lo más probable es que tengas que sumergirte un poco más en aprender a codificar y cargar tus aplicaciones en el Pico. Si eso no es lo tuyo, la Pi Zero W podría ser una mejor opción para empezar a jugar 🙂 .

Salida de vídeo Pico mediante el calcetín DVI: son posibles animaciones salvajes. ¿Reconoces la cara? Háznoslo saber en los comentarios

Si has conseguido realizar tu propio proyecto de vídeo con la Raspberry Pi Pico, ¡háznoslo saber en los comentarios!

¿Por qué es un reto añadir una salida de vídeo Raspberry Pi Pico?

La Raspberry Pi 400está basado en el SoC BCM2711. Este sistema en un chip dispone de hardware especializado que se encarga de la salida de vídeo, preparándola perfectamente en el formato especificado para la interfaz o interfaces de vídeo concretas, dos puertos HDMI en el caso del Pi 400. También dispone de una memoria masiva (de 4 GB), en la que almacenar los datos de salida de vídeo.

Para entenderlo mejor, debemos examinar algunos fundamentos de la salida de vídeo por ordenador:

Visualización y transmisión de vídeo

Vemos la visualización en la pantalla "a la vez". Nuestro cerebro tiene un cableado paralelo masivo, en el que ingiere información de todas las células de la retina disponibles a la vez (células de conos y bastones).

un gato con una mariposa, un ejemplo de lo que queremos mostrar a nuestros usuarios.
Foto de Karina Vorozheeva en Unsplash

(* el mecanismo de transmisión al cerebro integra la información a través de varias células de la retina, pero el hecho es que se transmite mucha información en paralelo. Mire en células bipolares si está interesado en saber más)

El cerebro, sin embargo, tiene latencias - no es capaz de resolver cambios en los estímulos visuales más rápidos de 13 ms. (que es aproximadamente 1 de cada 75 fotogramas por segundo).

Para nosotros, esto significa que si queremos mostrar una animación realmente fluida, tenemos que mostrar unas 60 imágenes estáticas diferentes por segundo. Nuestro cerebro interpretará estas imágenes estáticas como una reproducción suave y realista.

Normalmente, queremos que estas fotos sean en color.

Tenemos tres fotorreceptores diferentes para el color, por lo que la pantalla sólo muestra estos tres colores distintos con diferente brillo. Una vez más, nuestro cerebro sintetizará los colores intermedios a partir de esta información que recibe. (Nota al margen, morado no existe realmente como longitud de onda propia: es una mezcla de rojo y azul).

Hay tres colores primarios:

  • rojo
  • verde
  • azul

Juntos se conocen como RGB. Si se suman los tres, se obtiene el blanco. Añadiendo rojo a verde se obtiene amarillo, añadiendo verde a azul se obtiene cian, añadiendo azul a rojo se obtiene magenta.

Así que lo que realmente queremos a la salida son:

  • tres colores diferentes,
  • cada uno con un valor de luminosidad diferente
  • idealmente unos 60 valores diferentes por segundo (60 Hz)
  • una resolución de pantalla determinada - por ejemplo, 640 x 480

Calculemos cuántos datos son por segundo:

  • 3 colores
  • x 8 bits de profundidad de color
  • x 60
  • x 640 x 480

= 442.368.000 bits por segundo = ca. 422 MBit/s

(Piensa que, por ejemplo, la interfaz USB v1.1 del Pico tiene unos 10 Mbit/s, es decir, unas 40 veces menos rendimiento).

Una parte de la aplicación actualizará la imagen en la RAM, mientras que otra se encargará de entregar los datos en un formato con el que pueda trabajar un monitor. Esto tiene que ser RAM, ya que estamos operando a altas velocidades, y tenemos que ser capaces de leer esto de forma fiable con latencias pequeñas - que la memoria Flash no proporcionaría.

Calculemos cuánta RAM necesitamos:

  • 640 x 480 (resolución)
  • x 3 (colores)
  • x 8 bits (profundidad de color)

= 7372800 bits = 900 kBytes (nota 1 Byte = 8 Bits)

Mientras que 900 kBytes caben muchas veces en la RAM de un Raspberry Pi 400, el Pico sólo tiene 264 KB de RAM.

Como ves, tendremos que reducir algunos de los parámetros (por ejemplo, la resolución, la profundidad de color, ...) si queremos que quepa un mapa de bits en la RAM, ¡o se nos tienen que ocurrir algunas ideas ingeniosas de cómo hacerlo funcionar sin almacenarlo todo!

El PIO RP2040 de Pico permite emitir datos de vídeo

Por último, mientras que la Raspberry Pi 400 y otros modelos de Raspberry Pi tienen circuitos de hardware dedicados para procesar toda esta información y emitirla de forma fiable, la Pico no tiene circuitos especiales dedicados sólo a la salida de vídeo.

Pero tiene un as en la manga. El RP2040 soporta PIO (IO programable). El PIO está dedicado a emular diferentes interfaces con una temporización precisa, ¡y es muy muy potente! Puede programarse para leer de la RAM y emitir a altas velocidades.

Utilizaremos el PIO para dar salida de vídeo a algunos pines GPIO, y utilizaremos algunos circuitos adicionales (resistencias) para llevar la señal a la condición deseada, dependiendo de la interfaz de salida de vídeo a la que queramos conectar el Pico.

Historial de formatos de salida de vídeo

Antes de entrar en la carne de cómo se puede añadir una salida de vídeo a su Raspberry Pi Pico, vamos a echar un vistazo a un poco de historia de los formatos de salida de vídeo.

Como ya se ha comentado, el ojo humano no es capaz de detectar cambios en las imágenes más rápido que unos 13 ms. Por ello, uno de los primeros enfoques para construir monitores de ordenador fue el CRT (tubo de rayos catódicos) monitor.

El monitor CRT utiliza varios haces de rayos (2) para escribir la imagen en la pantalla línea a línea (4), (5) muestra un primer plano de los fósforos de colores que son abordados individualmente por los diferentes rayos. CC BY-SA 3.0 Peo~commonswiki 

El CRT tiene tres cañones de rayos, que barren píxel a píxel, línea a línea. (y luego necesitan un tiempo para volver al punto de partida). La pantalla tiene fósforos de colores, que seguirán emitiendo luz durante un tiempo después de que el rayo los haya atravesado. En el siguiente barrido de la pistola de rayos sobre este píxel en particular, la intensidad del rayo puede haber cambiado, lo que veremos como un píxel más oscuro. Nuestro cerebro fusiona los píxeles de fósforo de colores adyacentes en un solo píxel, y no es capaz de notar los cambios de brillo entre barridos de rayos.

CRT primer plano, mostrando los puntos de fósforo de colores. por: FreeImages.com / hubert jelen

Así se crea la ilusión de una imagen en movimiento.

En efecto, no es necesario que todos los datos estén presentes al principio de la imagen, pero sólo el valor actual del brillo del píxel. La intesidad del rayo se modificará en función de esto. Para ello podemos utilizar una señal analógica: por ejemplo, al aumentar la tensión aumentará la luminosidad.

Necesitamos tres cables diferentes para los distintos colores (para manejar cada pistola de rayos individualmente), y necesitamos tener una forma de hacer saber al monitor cuando hay que empezar una nueva línea, y cuando hay que empezar una nueva imagen (cuando se han mostrado todas las líneas).

VGA (matriz de gráficos de vídeo)

VGA se diseñó pensando en estos monitores CRT. Sigue siendo bastante habitual como entrada en los monitores, aunque cada vez está más obsoleta a medida que pasamos a una transmisión completamente digital (más adelante hablaremos de ello).

Este es también el estándar de salida de vídeo más fácil de hacer funcionar en el Pico.

Junto a una especificación (con modos de resolución por defecto), especificaba un conector, el conector VGA:

Puerto VGA; foto de Duncan Lithgow

Tiene 15 clavijas:

  1. RED (vídeo rojo)
  2. VERDE (vídeo verde)
  3. AZUL (vídeo azul)
  4. ID2/RES (reservado)
  5. GND (Tierra HSync)
  6. RED_RTN (retorno rojo, tierra analógica para el rojo)
  7. GREEN_RTN (retorno verde, tierra analógica para el verde)
  8. BLUE_RTN (Retorno azul, tierra analógica para el azul)
  9. KEY/PWR (+5 V CC alimenta el chip EDID EEPROM en algunos monitores)
  10. GND (Tierra VSync, DDC)
  11. ID0/RES (reservado)
  12. ID1/SDA (datos I2C desde DDC2)
  13. HSync (Sincronización horizontal)
  14. VSync (Sincronización vertical)
  15. ID3/SCL (reloj I2C desde DDC2)

Nota: Los cables VGA pueden admitir distintas resoluciones, profundidades de color y frecuencias de actualización, mientras que la palabra "VGA", al referirse a la resolución, suele significar 640 x 480.

Como ve, hay tres hilos que transportan los datos de la imagen, uno para cada color. La señal se transmite con una tensión de pico (máxima) de 0,7 V. Las señales transmitidas para los colores son de naturaleza analógica - voltajes más altos aumentan el brillo, un voltaje de 0 significa que el píxel está oscuro / apagado.

Cómo hacer que la salida VGA funcione en el Pico

Esto significa que el Pico, con su salida digital de 3,3V tiene voltajes lo suficientemente altos como para ser capaz de conducir estos pines RGB en el cable VGA (que espera voltajes de 0 - 0,7V). En realidad, tenemos que reducir la tensión mediante el uso de resistencias.

Podemos construir un sencillo DAC (convertidor analógico digital) combinando varias resistencias y pines GPIO. Dependiendo de la combinación de pines GPIO que estén activos en cada momento, tendremos diferentes niveles de tensión (= niveles de luminosidad):

Un simple VGA DAC, imagen tomada de "Diseño de hardware con el RP2040"

Como puedes ver en la imagen de arriba, cinco GPIOs (0 -4) manejan un canal (rojo en este caso), lo que nos da una profundidad de cinco bits. Las resistencias están ponderadas 1:2:4:8:16, por ejemplo el bit menos significativo (LSB) del rojo tiene una resistencia de 8.06K.

Cuando intente construir este circuito, debe optar por 1 % resistencias de tolerancia para obtener una buena imagen.

Consulte "Diseño de hardware con el RP2040"para entender cómo se calcularon los valores de las resistencias. En resumen, si conducimos todos ellos a la vez, tendremos un voltaje de 0,74 V que está bien para nuestros propósitos.

Más concretamente, lo que sugiere este diseño de referencia es soportar un formato de datos RGB de 16 bits de uso común (RGB-565), que utiliza 5 bits para el rojo y el azul, y 6 para el verde. Podemos reducir la salida física real al verde a 5 pines GPIO como para los otros colores, para ahorrar un pin.

Además, se necesitan 2 pines más para la sincronización horizontal y vertical (HSYNC y VSYNC).

Esto nos lleva a un total de 17 pines GPIO para controlar una salida VGA. Por suerte, el Pico tiene 26 pines GPIO disponibles, lo que nos permite controlar la salida VGA.

Como ya se ha mencionado, el Pico también es capaz de controlar estos pines a las frecuencias necesarias y con una temporización precisa, gracias a la función PIO (E/S programable) del RP2040.

Hardware de salida de vídeo Raspberry Pi Pico VGA

Raspberry Pi Pico VGA, tarjeta SD y tarjeta de demostración de audio - imagen extraída del manual Hardware Design with the RP2040

Raspberry Pi ha diseñado y puesto a disposición del público una placa portadora para Pico que muestra diferentes características:

  • Salida VGA
  • botones
  • Ranura microSD
  • salidas de audio (PWM analógico, I2S digital)

Comprar la tarjeta Pico VGA / Audio / microSD

Nosotros (buyzero.de) están construyendo y montando para nosotros esta placa de diseño de referencia. Póngase en contacto con nosotros si desea ser notificado, una vez que el tablero se puede comprar!

El Pico VGA Board ya está disponible para su compra, existencias iniciales limitadas!

Mientras tanto, Pimoroni también ha creado una versión de este tablero, lo llaman el Base de demostración Pimoroni Pico VGA.

Nota al margen: cada uno de los 15 pines de salida rgb tendrá que funcionar a unos 17,58 Mbit/s, lo que sigue siendo una cifra impresionante, pero mucho más manejable.

Software necesario para controlar la salida VGA

Como estamos trabajando en el Pico, no hay "drivers gráficos" que podamos instalar sin más. Tenemos que escribir el código nosotros mismos... o no 🙂 .

Por suerte, la gente que diseñó la placa de hardware para nosotros ya nos ha proporcionado un código que podemos utilizar, así que podemos centrarnos en nuestro proyecto.

El código de ejemplo que puedes utilizar se encuentra en el repositorio pico-playground:

En este repositorio, hay un sencillo reproductor de películas llamado palomitas (que reproduce películas en un formato personalizado). A big buck bunny, de 1,6 GB de tamaño, puede descargarse aquí. Tenga en cuenta que se trata de imágenes de disco en bruto que deben grabarse en una tarjeta SD - este ejemplo supone que usted tiene la tarjeta de demostración VGA, que tiene una ranura SD. Instrucciones para conversión de películas también se dan.

El código utiliza el pico_scanvideo (pico/scanvideo.h) de la biblioteca pico_extras repositorio. Echa un vistazo también a ese repositorio para ver ejemplos de código de audio.

La API emite datos RGB paralelos y señal de sincronización en pines para DPI VGA (utilizando DACs de resistencia, como se ha descrito anteriormente).

Un punto limpio:

  • El programa PIO scanline por defecto acepta datos codificados por run-length - esto significa que puedes ahorrar RAM para generar áreas de color planas (¡estoy pensando en juegos!)

En general, es preferible utilizar la función biblioteca pico_scanvideo en lugar de desarrollar código de salida VGA desde cero 🙂 .

buenas prácticas de codificación

Más demostraciones

Echa un vistazo a la directorio scanvideo del repositorio pico-playground:

  • mandelbrotun generador de mandelbrot utilizando un framebuffer de 320x240x16
  • sprite_demo: cabezas saltarinas de Eben (vídeo en la parte superior de nuestra página)
  • patrón_de_prueba: Mostrar barras de color

Uso de la tarjeta VGA

Es necesario pasar un parámetro adicional a CMake durante la compilación:

-DPICO_BOARD=vgaboard

TBD: Añadir guías paso a paso

DVI: Interfaz visual digital

La tecnología avanza. La vida avanza. Los CRT quedaron cada vez más obsoletos, sustituidos por pantallas planas más modernas, que tienen interfaces digitales. No hay haces móviles, sólo píxeles.

Durante un tiempo, las señales siguieron siendo analógicas, pero esto no es muy deseable, ya que tenemos que tomar algo digital, transformarlo en algo analógico y luego volver a transformarlo en algo digital. La imagen será menos precisa, y tenemos circuitos adicionales de los que podríamos prescindir.

Aparece DVI. De forma inteligente, ofrecía también la opción de transmitir señales analógicas, por lo que se podían fabricar adaptadores/cables DVI a VGA sencillos. Por supuesto, la tarjeta gráfica tendría que emitir tanto datos analógicos como digitales. Pero esto ayudó a que se aceptara el estándar y se generalizara.

Aquí nos interesan las señales digitales (DVI-D), ya que nos gustaría bit-bang ellos de la Raspberry Pi Pico.

Con DVI-D, los datos de la imagen se transmiten en serie.

Una conexión DVI de "enlace único" (la más básica) consta de cuatro los llamados enlaces TMDS (señalización diferencial de transición minimizada):

  • rojo
  • verde
  • azul
  • reloj de píxeles

La señalización diferencial se utiliza para minimizar las interferencias (ya que

Tenemos un total de 24 bits por píxel (8 bits x 3 colores), y codificamos los datos utilizando la codificación 8b10b (8 bits se asignan a símbolos de 10 bits en la línea física real para lograr el equilibrio de CC, entre otras cosas).

DVI trata los píxeles de forma similar a VGA: todo se retransmite cada vez que la imagen "empieza" de nuevo, y los datos se sincronizan con precisión. Es como una línea telefónica, en la que la línea está constantemente en uso cuando dos personas hablan.

Nota: en contraste con esto, DisplayPort trata los datos como paquetes - que tiene una serie de ventajas.

En contraste con el ejemplo VGA comentado anteriormente, dado que los datos se envían digitalmente, en lugar de valores de brillo analógicos, esto significa volúmenes de datos mucho mayores.

Luke Wrenun ingeniero de Raspberry Pi, creía que el RP2040 (en el corazón del Pico) también sería capaz de manejar la salida DVI, de nuevo utilizando PIO.

El resultado es el Repositorio PicoDVI y proyectos, y la Calcetín Pico DVI.

Luke Wren calculó que alrededor de 252 Mbps de datos serie tiene que ser conducido a través de los pads digitales GPIO - serie diferencial, que se emula con dos pads single-ended.

dc_coupling.png
Fuente: Depósito de Luke Wren (Licencia BSD-3)

Arriba se ve el circuito utilizado para conducir la salida DVI (utilizando un conector HDMI, más sobre esto más adelante) - son simplemente varios 270 Ohm resistencias.

Luke Wren ha ido incluso más allá y ha añadido doble salida DVI a su diseño PicoDVI mediante una placa plugin:

dos_displays.jpg
Luke Wren demostrando salida en dos pantallas utilizando su propio diseño

HDMI: compatible a la baja con DVI

HDMI es la siguiente evolución de los conectores (y compite con DisplayPort). Es totalmente compatible a la baja con las señales digitales DVI, por lo que se pueden tener convertidores DVI / HDMI sencillos y puramente pasivos.

Calcetín Pico DVI

El Pico DVI Sock es una solución fácil y de bajo coste para añadir salida de vídeo digital a su Pi. Ha sido diseñado por Luke Wren (ver descripción más arriba). Es una salida DVI con un conector HDMI. Como HDMI es compatible a la baja con DVI, puede utilizar un cable HDMI para conectar su Pico a pantallas HDMI:

soldadura_04.jpg
Foto de Luke WrenLicencia CC0-1.0

Programación del Pico DVI Sock

TL;DR

Puede descargar nuestro picodvi-test.zip y empezar a jugar con las compilaciones de ejemplo .UF2 en él. También incluye un PDF con una guía paso a paso.

Ejemplos de códigos

Luke Wren proporciona ejemplos de código en su repositorio. Sin embargo, para utilizarlos con el Pico DVI Sock, tendrá que establecer la configuración correcta a utilizar. Le mostraremos cómo en este mini-tutorial.

Requisitos previos de instalación

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

Clonar PicoDVI repo de Luke Wren:

cd ~
mkdir pico
cd pico 
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ~/pico
git clone https://github.com/Wren6991/PicoDVI.git

Para utilizar los ejemplos de código con el Pico DVI Sock, tendrá que configurar el parámetro configuración correcta de los pines utilizar. Añada la siguiente línea a common_dvi_pin_configs.h sólo antes de el primer #ifndef

#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg

Construir los ejemplos

cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)

Instalar los ejemplos en el Pico

Los ejemplos creados estarán en la carpeta software/build/apps.

Mantén pulsada la tecla BOOTSEL en el Pico y, a continuación, conecta la placa a tu PC mediante el conector microUSB. Copia y pega el archivo .uf2 apropiado que quieras probar - por ejemplo sprite_bounce.uf2 - en el Pico.

El Pico se reiniciará automáticamente y debería poder ver la salida en el conector HDMI (recuerde que en realidad es DVI :-)).

Descargar

Puede descargar nuestro picodvi-test.zip y empezar a jugar con las compilaciones de ejemplo .UF2 en él. También incluye un PDF con una guía paso a paso. Si el sprite_bounce.uf2 ejemplo no te funciona, prueba con otro monitor - posiblemente no todos los monitores son compatibles con esta salida de vídeo.

Si has llegado hasta aquí, cuéntanos en los comentarios qué tal te ha funcionado y qué ideas de proyectos se te han ocurrido.

Comprar un Pico DVI Sock

Nuestra página hermana, buyzero.de, almacena el Calcetín Pico DVI en dos variantes:

Sidenote: Pantallas DBI y DSI

Como nota al margen, el repositorio Raspberry Pi Pico Extras tiene marcadores de posición para DBI (pantallas MIPI DBI de 16 bits - con datos que se pasan en paralelo) y DSI (pantallas serie MIPI), por lo que podríamos ver soporte para estas pantallas en el futuro también.

21 Comentarios

  1. VanTa el marzo 20, 2021 a las 8:27 am

    ¿Algún ejemplo de salida compuesta con genlock?

    • PiCaptain el abril 6, 2021 a las 2:47 pm

      Creo que la salida compuesta debería ser posible, pero aún no he visto nada al respecto.

  2. Miroslav Nemecek el junio 10, 2021 a las 10:24 am

    Como alternativa a scanvideo, he implementado otra librería VGA/TV para Raspberry Pico - 'PicoVGA', que creo que es más fácil de usar: http://www.breatharian.eu/hw/picovga/index_en.html

    • raspi berry el julio 1, 2021 a las 5:20 pm

      Gracias por compartir la información sobre su biblioteca.

  3. Ashesh Rai el junio 10, 2021 a las 5:39 pm

    Oye, ¿se puede utilizar este HDMI como una ENTRADA y procesar los datos.

    • raspi berry el julio 1, 2021 a las 5:20 pm

      la forma en que está programado, y puesto que las resistencias actúan para limitar la señal de salida Raspberry Pi - no.
      posiblemente podrías usar una adaptación del diseño, con algo que potencie el nivel de señal en vez de bajarlo / y por supuesto código adaptado para que las salidas funcionen como entradas, para poder procesar los datos de video dentro del Pico.

  4. Lorencz el junio 25, 2021 a las 2:25 pm

    Sin embargo, algunos consejos prácticos. Gracias a la lotería del silicio, es posible que tu unidad concreta no overclockee proporcionalmente la gpu y la parte de la cpu igual. Por lo tanto, si no necesitas gráficos más rápidos, no overclockees su GPU. Esto aumenta tus posibilidades de overclockear más alto y tener un sistema estable. También un menor consumo de energía y menos corriente de alimentación significa una mejor estabilidad. Raspberry Pis con 4 núcleos de CPU puede golpear una pared de suministro de energía cuando se carga con los 4 núcleos activos. El PMIC integrado (power management IC) puede no suministrar la corriente necesaria para todos los núcleos, y apagarse durante un corto período de tiempo, reiniciando así la Pi. Refrigera también el PMIC. No sobrevolucione al máximo si necesita carga de todos los núcleos (compilaciones de kernel, cálculos numéricos pesados, etc.). Aquí tenemos una RPI4 que puede funcionar a 1850MHz con todos los núcleos activos con over_voltage=2, pero con over_voltage=3 más alto, se reinicia cuando está cargada. Mayor sobre_tensión significa también mayor corriente y el circuito PMIC tiene una corriente de salida limitada. Cuanto más caliente esté el PMIC y los inductores que lo rodean, menos corriente puede suministrar. Esta es una limitación del chip PMIC, no del chipset BCM. Por lo tanto, si te encuentras con reinicios ocasionales bajo una carga pesada, puede ser el sobrecalentamiento del PMIC. Si tu Pi se bloquea, no será este problema en particular, sino quizás la pérdida de la lotería de silicio. El underclocking de una parte de la GPU puede ser una forma interesante de aumentar la capacidad de overclocking (sistema más estable), pero AFAIK, las antiguas Raspberry Pis tenían la caché L2 ligada a la GPU, por lo que el underclocking puede ralentizar la CPU también. He documentado cómo se calienta el PMIC de la Raspberry Pi 4 - todos los demás chips se enfrían directamente a un disipador de calor. La vista es desde abajo, es decir, se ve el PCB calentado. La esquina inferior izquierda es el PMIC.

    • raspi berry el julio 1, 2021 a las 5:18 pm

      Muchas gracias por estos consejos prácticos.

  5. Bing el octubre 23, 2021 a las 7:20 am

    Hola,
    Yo mismo un novato aquí .. ¿Puede alguien proporcionar un esquema para una salida de pantalla cvbs. Y cualquier cambio necesario en el código fuente?

    • PiCaptain el octubre 23, 2021 a las 1:40 pm

      Lo siento, ni idea de los cvbs

  6. farooqkz el noviembre 8, 2021 a las 8:30 am

    Hola
    Gracias por el bonito post. Lo he leído desde su principio hasta casi su final 😉.
    Sin embargo, tengo algunas preguntas tontas:
    1. RPi Pico tiene PWM. ¿Es posible utilizar un solo pin con PWM para la salida de señal analógica para alimentar a los pines VGA? así se utilizarán menos pines. También circuitos más simples y pequeños.
    2. ¿Es posible obtener salida analógica AV de RPi Pico de nuevo utilizando PWM, tal vez? Creo que la mayoría de los televisores lo soportan. Quizás usando un módulo como https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg disponible en una tienda local a la que tengo acceso. Sin embargo, la imagen que he enviado es un módulo para Arduino, pero debe ser posible utilizar con Pico también, supongo.
    3. Si uno quisiera ir con VGA o DVI en combinación con Pico, ¿es posible no utilizar esas placas VGA o DVI de ayuda? Porque no están disponibles en mi región para comprar uno y mis habilidades no son lo suficientemente buenos para crear uno yo mismo.

    • raspi berry el noviembre 9, 2021 a las 10:29 am

      1. Los Pines PWM probablemente no tendrán la precisión de temporización que te gustaría tener para la salida de vídeo (por eso usamos PIO que tiene una temporización muy precisa). Pero por qué no intentarlo 🙂 .
      2. Supongo que debería ser posible generar una salida analógica AV desde la Raspberry Pi Pico. Dudo que el PWM sea "suficiente" para esto (¡me encantaría escuchar a alguien con más experiencia opinar al respecto!).
      Ten en cuenta que PWM es simplemente encender y apagar la señal, mientras que la escalera de resistencias utilizada en la placa VGA, por ejemplo, da niveles de señal continuos. Así que para que la solución PWM funcione debe operar a frecuencias mucho más altas que las requeridas para la señal real. Tampoco estoy seguro de cómo reaccionaría el hardware externo a la señal PWM en lugar de una señal analógica continua.
      Posiblemente se podría suavizar utilizando un condensador muy pequeño, para lo que habría que hacer los cálculos oportunos.
      3. las placas de ayuda VGA / DVI contienen lo necesario (principalmente resistencias). Usted puede mirar el esquema y construir su propia configuración en una protoboard posiblemente, he visto a alguien hacerlo para VGA.
      Dicho esto, realizamos envíos internacionales:
      https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
      Pico DVI Sock @ buyzero.de shop

  7. Nikolay el diciembre 18, 2021 a las 1:16 pm

    Gran información. Muchas gracias.
    También encontré esto: Salida de vídeo compuesto en Raspberry pico
    http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico

  8. Marcelo el abril 23, 2022 a las 10:09 pm

    Me las arreglé para construir el picoDVI de Wren6991 e integrarlo con un triple ADC para escanear RGB 15Khz (640×240).
    En el 320×240 que sólo usa un núcleo, el otro se queda tranquilo para recibir interrupciones HSYNC /VSYNC y preparar transferencias dma sin problemas, pero en 640×480 el uso de los 2 núcleos está bloqueando el correcto funcionamiento del sistema.
    Ya que necesito la mitad de las líneas, ¿hay alguna forma de tener una línea negra siempre preparada para las líneas impares? con eso libero un núcleo para mis dutties.

    • Ed T el febrero 25, 2023 a las 11:25 pm

      No creo que necesites enviar ninguna línea en blanco. Envías todas las líneas impares, envías una señal vsync con media línea extra, y envías las líneas pares. Investiga un poco sobre "pulsos de sincronización de vídeo entrelazado".

  9. nix el junio 9, 2022 a las 2:40 pm

    ¿Alguien sabe cómo cargar vídeos hechos por mí en lugar de los de ejemplo? Gracias de antemano.

    • Wayne el julio 30, 2022 a las 1:25 pm

      Estoy interesado en utilizarlo para un único propósito de visualización audiovisual. Por favor, ¿alguien me puede decir:

      ¿Puedes alimentar el Pico a través del cable HDMI, incluso si está en el lado de emisión de tiempo del cable?

      ¿Puedes configurar el espacio de color Rec2100 (espacio de color HDR rec 2020)?

      ¿Es posible conectar líneas adicionales al HDMI para enviar audio (y señalización rec2020/HDR)?

      ¿Puede emitir vídeo a través de uno de los formatos de vídeo USB (vídeo de Pico sin cambios a través de un adaptador de USB a Pico)?

      Usando el Pico inalámbrico, ¿puede hacer Miracast?

      ¿Se puede hacer un modo de vídeo de mapa de bits normal y manipularlo para gráficos de juegos con los ciclos sobrantes?

      Seedstudio hace una placa mini RP2040. ¿Puede la placa de interfaz HDMI y el software, trabajar en eso. También tienen una versión RiscV con wifi, así que sería bueno si pudiera recompilar para eso.

      https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products

      Me interesan las aplicaciones para juegos, como el uso de relojes para juegos.

      Cualquier JavaScript plataforma de tiempo de ejecución mínimo viable poner allí?

      Siento pedir tanto, pero
      De lo más interesante.

      Gracias.

  10. hitech444 el julio 17, 2022 a las 4:20 pm

    ¿Puedo utilizar su tarjeta junto con el intérprete MMBasic de Geoff? ¿Existe alguna limitación de hardware en mis programas debido a su tarjeta?

    • Graham el noviembre 10, 2022 a las 10:00 am

      ¡Las grandes mentes piensan igual, he estado pensando en estas líneas también! ¡Ya he construido el ordenador MMBASIC basado en Raspberry Pico con salida VGA, y es nada menos que fantástico! Sin embargo, la salida DVI-D (pseudo HDMI) lleva la capacidad gráfica a un nuevo nivel. Por supuesto MMBASIC no tiene que explotar plenamente la mayor profundidad de color o resolución, pero operando a 640×480 con digamos 64 colores sería bastante noice.

      Dicho esto, preveo dos problemas inmediatos.
      1. La solución VGA también utiliza los pines PIO, y luego uno de los núcleos se utiliza para la gestión de sprites, el almacenamiento en búfer de fotogramas, etc. creo. Como mínimo será necesario un cambio de código, al menos para sustituir la implementación PIO de VGA. Como API, también me sorprendería que la interfaz entre PIO (VGA) y el código del núcleo framebuffer fuera la misma que la solución DVI PIO, pero puede que me equivoque. En cualquier caso, tendrá que haber un cambio de código.
      2. RAM. No hay suficiente, así que una mayor resolución y una mayor profundidad de color serán un problema. Pero creo que tengo una solución. Usar PSRAM externa, y quizás usar un RP2040/Pico como "GPU" y que tenga su propia PSRAM conectada. A continuación, habla con un RP2040 secon que proporciona la "CPU" o el cerebro del sistema, ejecutando MMBASIC, y puede manipular / mover los activos gráficos en torno a las instrucciones de la GPU con una mínima sobrecarga (por ejemplo, a través de enlace I2C). Quiero/necesito esto 😉

  11. Dave el diciembre 30, 2023 a las 1:27 pm

    ¿64 euros por la "Raspberry Pi Pico VGA Audio SD Expansion Board"? Sería mejor utilizar un cero...

    • Jörg el mayo 25, 2024 a las 9:31 pm

      Pimoroni tiene uno menos caro (30 euros), pero sigue siendo mucho. El DVI Sock sólo cuesta unos pocos euros ...

Deja un comentario