Show HN: PicoVGA Library – VGA/TV Display on Raspberry Pi Pico
github.com
github.com
- rs232
- UART
- USB-TTL w/ configurable (3.3v/5v) voltage levels
- (optional) VGA output
- (optional) WiFi/Bluetooth (RP2040W Pi Pico W)
The OpenWRT hardware/port.serial wiki page explains how to open a serial console with screen and a tty /dev; and about 3.3V/5V bricking a router and/or the cable: https://openwrt.org/docs/techref/hardware/port.serial#use_yo...
PiKVM may have console support but with a Pi 3/4+, not a $4/$6 RP2040 /W with or without low-level WiFi+Bluetooth
"Raspberry Pi Pico Serial Communication Example (MicroPython)" https://electrocredible.com/raspberry-pi-pico-serial-uart-mi...
> The RP2040 microcontroller in Raspberry Pi Pico has two UART peripherals, UART0 and UART1. The UART in RP2040 has the following features: [pinout]
RS232: https://en.wikipedia.org/wiki/RS-232
Serial Port: https://en.wikipedia.org/wiki/Serial_port
> - UART
UART: Universal Asynchronous Receiver Transmitter: https://en.wikipedia.org/wiki/Universal_asynchronous_receive...
> - USB-TTL w/ configurable (3.3v/5v) voltage levels
USB-to-serial adapter: https://en.wikipedia.org/wiki/USB-to-serial_adapter
> Most commonly the USB data signals are converted to either RS-232, RS-485, RS-422, or TTL-level UART serial data.
- SunFounder Thales Pi Pico Kit > Components > Slide Switch, Resistor, : https://docs.sunfounder.com/projects/thales-kit/en/latest/co... Kepler has the 2040W: https://docs.sunfounder.com/projects/kepler-kit/en/latest/
/? how to limit voltage to 3.3v: https://www.google.com/search?q=how+to+limit+voltage+to+3.3v
- Zener diode > Voltage shifter: https://en.wikipedia.org/wiki/Zener_diode#Voltage_shifter
- Voltage regulator > DC voltage stabilizer: https://en.wikipedia.org/wiki/Voltage_regulator#DC_voltage_s...
- TIL electronics.stackexchange has CircuitLab built-in: https://electronics.stackexchange.com/questions/241537/3-3v-... . Autodesk TinkerCAD is a neat, free, web-based circuit simulator, too; though it supports Arduino and bbc:micro but not (yet?) Pi Pico like Wokwi.
There is at least one RP2040 JS simulator:
Wokwi appears to support {MicroPython, CircuitPython,} on {Pi Pico} and also Rust on ESP32:
Wokwi > New Pi Pico project: https://wokwi.com/projects/new/pi-pico
Wokwi > New Pi Pico + MicroPython project: https://wokwi.com/projects/new/micropython-pi-pico
wokwi/rp2040js : https://github.com/wokwi/rp2040js
https://www.hackster.io/Hack-star-Arduino/raspberry-pi-pico-...
> - (optional) WiFi/Bluetooth (RP2040W Pi Pico W)
/? "pi pico" bluetooth 5.2 [BLE] https://www.google.com/search?q=%22pi+pico%22+bluetooth+5.2 :
- From https://www.cnx-software.com/2023/02/11/raspberry-pi-pico-w-... :
>> The Raspberry Pi Pico W board was launched with a WiFi 4 and Bluetooth 5.2 module based on the Infineon CYW43439 wireless chip in June 2022
bluekitchen/btstack is the basis for the Bluetooth support i Pi Pico SDK 1.5.0+: https://github.com/bluekitchen/btstack
> MicroPython
awesome-micropython: https://github.com/mcauser/awesome-micropython
https://github.com/pfalcon/awesome-micropython :
- There is a web-based MicroPython REPL, and it only works over HTTP due to WebSockets WSS, so it's best to clone that file locally: http://micropython.org/webrepl/ https://github.com/micropython/webrepl/
awesome-circuitpython: https://github.com/adafruit/awesome-circuitpython
- microsoft/vscode-python-devicesimulator lacks maintainers and Pi Pico Support: https://github.com/microsoft/vscode-python-devicesimulator/w...
https://vscode.dev/ is the official hosted copy of VSCode as WASM in a browser tab. YMMV with which extensions work after compilation to WASM and without WASI (node/fs,) in a browser tab.
From "MicroPython officially becomes part of the Arduino ecosystem" (2022) https://news.ycombinator.com/item?id=33699666 :
> [in addition to the Arduino IDE support for Pi Pico now] For VSCode, there are a number of extensions for CircuitPython and MicroPython:
> joedevivo.vscode-circuitpython: https://marketplace.visualstudio.com/items?itemName=joedeviv...
> Pymakr https://github.com/pycom/pymakr-vsc/blob/next/GET_STARTED.md
> Pico-Go: https://github.com/cpwood/Pico-Go
https://scratch.mit.edu/ has bbc:microbit (and LEGO Boost) extensions when you click plus at the lower left; but not (yet?) Pi Pico support: https://github.com/LLK https://github.com/LLK/scratch-gui/commit/421d673e714a367ff2... https://github.com/microbit-more/mbit-more-v2
I have been hoping to make a Pico into a little 8-bit-micro style computer, but there’s lots to learn first!
I bought Pimoroni’s VGA demo board (https://shop.pimoroni.com/products/pimoroni-pico-vga-demo-ba...), which provides a readymade version of the VGA implementation “Hardware Design with RP2040.”
There are a few emulators that I think should work with that:
- PICOVIC: https://github.com/jfoucher/picovic
- b-em: https://github.com/kilograham/b-em
- pico-zxspectrum: https://github.com/fruit-bat/pico-zxspectrum
I haven’t got any to run yet, but I haven’t tried very hard either.
(There’s also the Picomite, which looks great, but unfortunately uses a different VGA implementation: https://geoffg.net/picomite.html)
One constraint is VGA is at minimum around 25mhz and HDMI is at minimum 165mhz and a pico is around 133mhz.
It also takes clock cycles to update the data and run algorithms. Some of the algorithms can often be mitigated to the silicon that controls some of the pins as they can have small bit of programmable logic for this purpose or can be re-purposed, but usually not all the pins or all of the algorithms.
There are tricks and such that might be able to get it working in certain lower resolutions and color modes, perhaps like overclocking or taking advantage of some harmonic, or clever use of some existing feature, but the more tricks you do to get things faster,often introduce issues with stability that you have to mitigate or solve. This barely touches physical constraints like cord length, signal integrity, voltages and current, overheating, etc that may or may not be applicable.
X x Y x colour_bytes x frames x 8bits
Eg, 1280x1080x3x60x8=1.99Gbps
So at 133Mhz, each cycle the RP2040 would have to push 15 bits out. It's got 2x cores, can be overclocked at double reliably, and has a bunch of programmable IO machines, so maybe doable, but likely not 4K. (More around 10-20Gbps.)
Analogue output is actually easier that's why it's done. Here, you just have to push out some signals at the right (slow) timing and you get a picture. DVI/HDMI requires pretty decent technology to do effectively.
Let the "framebuffer chip" handle the timing sensitive HDMI/DVI dance, and then you can use the general-purpose controller for things like "map a more well-supported graphics protocol to this language". If the controller fails to meet a timing requirement, the framebuffer chip doesn't cause the monitor to lose synch, you'd just get a torn image because it wasn't fully populated in time for the frame to render.
What I've been waiting for is some sort of "modern MCU as replacement for expensive, clunky, slow old video cards." It seems like if you want to use something like a Pi Pico, it would use almost all of the resources just to maintain synch and timing, so it might not be amenable for the other half of the job-- monitoring the external bus and waiting for inquiries on the framebuffer/firmware/support register address ranges.
The Pi Pico has 2 cores so while one core is used entirely to maintain the display the other core can do other things.
I've never seen an MCU with access to 64mb RAM - makes for a great target chip for a simple computer. (https://btashton.github.io/bl808-notes/soc/memory_layout.htm...)
There are 5 processors on the chip, which you can optionally use as required: NPU (neural processing unit https://github.com/sipeed/TinyMaix/blob/main/benchmark.md) H264 video codec RV64 application processor capable of running linux RV32 radio processor for the 3 radio protocols it supports - wifi/BT/zigbee RV32E low power core to manage the chip
The radio and application cores should run fast enough to be able to bitbang digital video signals, there is 32K VRAM which I guess might be used for the bundled touchscreen display.
But what exactly do you have in mind with the 'instant booting computer experience'? The RP2040 has 264KiB of RAM already (more than the address space of a PDP-11), so surely that qualifies as 'computer'. That should be enough to even emulate a 8 bit Home Computer (well, it has been done for 6502 and Z80 CPUs and whole CP/M machines and ZX Spectrum).
Not that I get this obsession with 'instant on'. My chromebook is ready for me the moment (well, within a blink of an eye) I open the lid. My desktop needs a minute or so, but I reboot it only when there's a kernel update ...
> License terms
> The PicoVGA library source code and the PicoVGA library sample programs are freely available for further use and modifications. This does not apply to certain graphics and sounds (such as the sounds in Pac-Man) and scene definitions in Sokoban, as these are subject to third party copyrights and may be subject to different distribution terms.
Not a very well-defined one, at least.