I learned PCB design, 3D printing and C just to listen to music
pentaton.app
pentaton.app
Would have been nice to hear how specifically it was made to work in the end.
> Turns out, cross-fading two 4MP images at 60 frames per second on a moderately powerful single board computer is not so easy.
Yeah, at first it feels stupid that every pretty LCD screen for bus or train stops, ads or whatnot has a full computer behind it, but then you ballpark the memory bandwidth and realize you need a ~ 1 GHz device anyway just to be able to chew through the pixels fast enough. (1920² px × 24 bpp × 60 Hz = 620 MB/s.) You also realize why “fill rate” used to be such a buzzword 20 years ago and why it took a while until true color became ubiquitous.
On the flip side of the O(n²), you can easily drive a watch-sized display with pretty good ppi using a 32-bit MCU, which is why the Apple/Google/Samsung battery-guzzling approach to smartwatches seems wrongheaded to me compared to Pebble/Zepp/etc.
And train stop displays certainly don't need 60 fps.
The main constraint for high-resolution displays is memory, not CPU clock speed. Your (odd) 1920x1920x24bpp frame buffer takes up more than 10 MB.
In embedded SoCs the memory bandwidth is often shared between the CPU and the GPU. There is not a separate pool of memory and bandwidth for the GPU.
> The actual bus to the display controller may be a parallel dot-clock RGB bus, or an ultra-speed differential multi-lane serial (MIPI DSI, HDMI, etc).
That’s not what the parent comment is talking about. To get the data into the framebuffer you need to write it first. You also need to read the source images. For blending two images and writing the output, the floor is 3X the total image size every single frame. (Two reads, one write). There are tricks that can be played with frame buffers and scan out blending, but you get the idea.
> And train stop displays certainly don't need 60 fps.
We’re talking about the product in the link, which is trying to blend seamlessly between two images at 60fps.
> The main constraint for high-resolution displays is memory, not CPU clock speed.
I don’t think you understood the problem space.
If you’re doing software blending of 10MB image buffers at 60fps, the CPU can be easily be a bottleneck. You have to ensure the CPU can do enough load operations, math on the loaded data, and store operations to get it done in 16.7ms. Ideally you have a GPU, but if you don’t then you need to pay close attention to optimizations and special instructions to get it done within the frame budget and also allow some cycles for all of the other work the app has to do.
> Your (odd) 1920x1920x24bpp frame buffer takes up more than 10 MB.
The 1920x1920 size came from the article. Parent commenter wasn’t making up odd sizes, they were responding to the article.
Most cinema films I watched projected from analog film looked perfect at 24 fps. Heck some anime loocks better at 5 or 10fps than it would look if the motion was fluid at 120 fps. Why would a display at a train stop need double the frame rate of a cinema classic that still looks completely convincing? Because some gamers decided they can't play below 60 fps?
I agree. Even for gaming just the fps is misinformed. It doesn't account for latency and is kind of a arbitrary limit that became industry standard.
Consider a 60fps or 144fps stream can still be out of sync for example you might have experienced watching the same video stream on two different devices and one is more ahead compared to the other while both are the same framerate (one having higher latency from the source).
24fps is good for most real video, animations even dial back to way less animating on 4s, 3s or 2s is common practice. However while gaming you may want higher fps (usually corresponds to lower latency) to allow you to respond in a timely fashion mostly because our brains are quite slow. For embedded applications even if there is movement it should never ever need a 60fps source.
Until you get a panning shot and then it looks very juddery. Filmmakers have gotten quite good at dealing with the limitation but it is a limitation. (That said, you do have a challenge with higher fidelity video because it makes it harder to hide the imperfections in what the video is capturing, which makes things tend to look more fake)
Anime (and most animation) can adjust the framerate for what makes sense for the shot or even the element. It's common, for example, that panning happens on ones while the animation happens on twos or threes, because low-framerate panning looks bad and it's relatively easy with cell shading to animate the pan at a higher framerate. And again, the animators use a ton of techniques to deal with the low framerate and avoid the situations where it looks bad.
Which could also apply to train stop displays, if the graphics were designed for it (and almost certainly a consistent 24fps will look better than an inconsistent ~50-60fps).
Additionally a frame rate of 24 fps allows me to expose at 1/48 s, which means I get motion blur. That may seem like a bad thing, but for fictional stories I find a slight motion blur much more appealing and natural than exposing at 1/120 s for a 60 fps video or even at 100 fps with 1/200 s, which makes things look like a soccer television transmission. Of course in the age of digital you can get both by smearing frames into each other (depending on the camera), but the returns are IMO diminishing.
However I already mentioned I understand 60+ fps for certain applications (be it sports transmissions, gaming, films where it makes sense), but for a train station sign both the cited resolution and the frame rate are not strictly required. Sure. It is a nice to have if it comes for free, but rarely anything ever does.
Same goes for 4K. My students want to always do everything in 4K, yet most of them won't ever notice when a media player downscales their 4K footage to 1080p. 4K is cool if you have content that really makes use of it (e.g. hard one pixel lines) and a projection situation where the resolution can be noticed (e.g. audience very close to the screen), but that is the minority of situations.
a hold-over from 60Hz AC power, baked into NTSC television and inherited by arcades and early consoles as a structural default. Then it became a benchmark of sorts when the 3D era made 60fps harder to reach, and got exacerbated by early LCDs pretty much standardizing on 60Hz.
Then come games like COD (2007) with marketing for its 60fpsness, and the 2010s "cinematic 30fps" debaucle.
Personally, I'm fine with 45fps with butter smooth frametimes and no pop-in.
Edit: The semi-recent discourse of 'fake-frames' comes to mind aswell..
I've finally finished my dream music streamer featuring a vinyl-sleeve-sized square display, a custom carrier PCB for a compute module and a 3D printed case, running a custom-compiled kernel, Alpine mini rootfs and a small C app driving the display.
I did not think that this was doable by a hobbyist at all, let alone using free/open source software only (KiCAD, FreeCAD, VSCode). Turns out I was wrong!
Do you have plans to make the project open source?
How did you learn this?
As a hobbyist I found hardware to be quite impenetrable, given the hard mathematics and physics requirements. My attempts to learn this essentially degenerate to taking an informal engineering course. It quickly becomes clear that I'm years away from making something, and I eventually run out of both free time and executive function. AI's been helping... But I don't have the ability to tell when the output is wrong.
You can learn something practical like "embedded DisplayPort should be impedance controlled to 100 Ohms" without fully understanding the physics behind it.
AI can be very convincing. It told me to put the ESD protection as close the Ethernet connector as possible, so I put it between the port and the magnetics. This worked, but resulted in around 1% packet loss. When I moved it after the magnetics, I got 0% packet loss. This cost me a full revision, but I'd say this is the price to pay for not learning everything by the book.
For GP: this is something you would learn from a PHY manufacturer's EVK schematics and layouts. TI (especially), NXP, Microchip show correct magnetics/ESD part numbers and placement - the trickier thing here is finding an EVK that doesn't just use an integrated MagJack.
I chose an Intel N100 SoM and there's an example carrier board, but the whole point of my project is to customize that board. I wanted to do things like rewire the HSIO lines: turn the GPU PCIe socket into extra USB 3.0 ports and M.2 E sockets. The "known good" designs won't port over cleanly. It's PCIe gen3 over short runs, Claude tells me it's "forgiving" but I'm still nervous about it.
I'm placing an Intel I210-IT onto this board too, would definitely appreciate any tips!!
I've seen KiCAD running in the browser, so it's not like this isn't completely doable. It's just a question of resource allocation.
That said, outside of casual experimentation, I have almost zero need for an LLM to lay out my circuits for me. It's not just that I do have the deep knowledge, but there's so much more to board layout than routing. What parts I've worked with, what I have in inventory and on my PnP.
I also just really love laying out boards, and I'm in no hurry to give that up.
That said, I've found ChatGPT to be extraordinarily useful for part comparisons, getting second opinions on approaches, figuring out resistor divider values, troubleshooting drivers, and so much more it's difficult to enumerate.
IMO there aren't any. It's mostly about reading datasheets, and connecting pins to each other IOC those datasheets.
Maybe the physics and mathematics are more important for analog electronics or designing ASICS?
Do you have any specific projects you'd like to build? Post here and we can talk through it. And/or start by downloading KiCAD and clicking around until you understand the UI.
The programming side is mainly also reading datasheets. Instead of connecting the right pins together, you are writing a certain value to a register, as described in tables.
I agree that electronics is very accessible, and I'll add that in my experience as an EEE the main beginner gotcha is bad PCB layout rather than maths/physics.
For a flight controller say, bad layout would manifest as slightly noisier sensor readings and reduced radio range. But assuming this is 4 layers https://www.anyleaf.org/mercury-g4 then you probably know what you're doing :) - ditto for OP's article.
Simple layout rules will take anyone 99% percent of the way to professional results. Ground planes on inside (or bottom) layers, signals on outside (or top). Don't cut ground planes. Decoupling caps close to ICs. Keep current loops small. Vertical traces on one side, horizontal on the other. A single youtube video could teach you all that.
When I used to do this stuff for a job, math/physics was only needed for analog electronics (interfacing to hardware like specialized/novel sensors), optimizing control systems and signal processing, and general cost/efficiency engineering - but you could go a long way without it.
> Do you have any specific projects you'd like to build? Post here and we can talk through it.
Sure thing. Yeah, I wanted to build a handheld cyberdeck, like these:
https://www.clockworkpi.com/uconsole
https://hackaday.com/2025/02/27/a-precisely-elegant-cyberdec...
https://hackaday.io/project/202522-cyberdeck-handheld
The truth is I use my phone a lot. I even write code on my phone, touch screen and all. It's limiting but I put up with it because the handheld form factor is too comfortable, I can use it from anywhere, even in bed.
The cyberdeck is meant to replace the phone with a real keyboard and x86_64 Linux computer, plus any useful peripherals I can cram into the thing. I wanted to use the LattePanda Mu, an Intel N100 System on Module.
I've actually downloaded KiCad and just started using it, figuring I just needed to get started and I'd figure it out as I went along. I just opened up the example schematics I downloaded and started connecting dots like a baby. I actually made some progress, even identified some issues with builtin KiCad libraries, like host/card PCIe socket mismatches that would lead to ERC failures, even tried to contribute those. Then I got severely intimidated when I realized I was trying to route PCIe lines, something even literal professional engineers on discord balked at. That killed the project for some time.
My second attempt came after I subscribed to Claude, who made me aware that the PCIe lines I was dealing with were third generation, and therefore "forgiving". Then I made more progress.
I managed to make some mockups and measure the exact comfortable typing range of my thumbs, and from that I derived an awesome keyboard layout. The keyboard prototype, the thing that will make or break the design, is already at the part where I need to spend real cash on it to have manufactured and shipped so I can test the switches. The taxes involved make it very expensive to make mistakes, though. It doubles the costs of everything.
So I switched to trying everything I can to make the entire system correct before I ship it. Finish the system as a whole and pay for a professional review of the entire thing before shipping even a single prototype. Asked Claude to help me design a safe power supply with BQ25792. Chose the screen for the deck, the same screen used by the Asus ROG Ally.
Wanted to design the full PCB too but I'm unsure if I should create a standalone keyboard first in order to test it out as a separate project. I feel like the whole project depends on it, but it doesn't make financial sense to prototype just that component.
Is there a way to ensure correctness before spending money on this hardware? I'd hate to spend money on this stuff, only to find it doesn't work. How can I reduce this risk?
You find yourself on forums reading posts like "yeah, that's an n-junction unit, you'll find the circuit much easier with a p-junction. Try ANP1058 and forward-bias the gate", or other such gnomic directives.
"Curiouser and curiouser", said Alice, as she fell down the rabbit-hole.
I'd previously had a barebones interest in electronics (think: kits with LEDs and buzzers in like 3rd grade), but listening to his discussions and explanations of how these things worked gave me a fairly decent understanding of how some basic electrical principles work.
I also recently watched a video series[1] that explained how microcontrollers (specifically the ATMega328, the one powering the Arduino) work, from a very low level that I've always wondered about. The key part of that series, for me anyway, was getting the chip off of the Arduino PCB and onto a bare breadboard. From there I went and read/skimmed the ATTiny85 datasheet[2] (a very popular "baby brother" chip to the ATMega328) which also helped me understand how these chips do things like PWM on a low level.
I've built one project (a simple PWM dimmer based on a potentiometer) and am working on another (designing a PCB with KiCAD[3] to replace the circuit board for a battery-powered LED lantern, so I can design my own sequencing interface for what happens when you press the singular button), and it has been quite the learning experience, but one I've greatly enjoyed!
[0] https://www.youtube.com/@bigclivedotcom, also at https://odysee.com/@bigclivedotcom:0d
[1] https://www.youtube.com/watch?v=tBq3sO1Z-7o&list=PLNyfXcjhOA...
[2] https://ww1.microchip.com/downloads/en/devicedoc/atmel-2586-...
[3] This comment is long enough already, but KiCAD is a fantastic piece of FOSS software. It's a full schematic/PCB design suite, and there are plenty of tutorials all across the Internet for it.
fizzle fade, munching squares, horizontal/vertical/circular/pinwheel/etc wipes - anything that lets you replace a small number of pixels in the display buffer each frame.
The sad answer is that yes, it is that low.
The better answer is that as PCB manufacturing gets more hands-off, we can look forward to some "PCB totem" somewhere in your city, like those self-service photo printers that exist now.
North America: OSH Park
Europe: AISLER
Can you speak to how you're sourcing these, and from where? (And would you sell me one?)
This is the listing, right?
They told me that if I am willing to commit to at least 300 of the 4GB/32GB eMMC + BT/Wifi then they could produce them for me on demand.
I told them that it was insane to expect anyone to commit to developing a product around a platform that they would have to buy USD$30k worth of to see if it could (for example) support a particular display panel configuration using eDP.
Having this kind of chicken-and-egg problem is a quick way to doom a SoC, which is super frustrating because I definitely want to use it.
I will be happy to participate in the Kickstarter campaign
WDYT about adding something more to the screen than record sleeves, e.g., lyrics display?
Doesn't Airplay switch you to other media on your device (e.g. Reddit, Youtube, etc) while browsing while streaming?
I've spend around a month on the PCB as a hobby, next to a full time job.
I wonder how that works.
I think i'd just make the bezel for the display and putty an SBC onto the back with an HDMI converter dongle. I'd likely order a custom picture frame with some rococo moulding, for the anachronistic effect, and display nondescript oils when not streaming.