> Once I had the design [of the enclosure], I tried to 3D print it on my brand new 3D printer, which turned out to be a disaster. Took me some time to learn more about designing for manufacturing, especially for 3D printing.
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.
Way back in time (1980s) I worked in the broadcast tv industry.
We used to used digital still stores. A single frame of PAL took up 1MB of RAM. The machines had 2MB fitted. The board had a hardware cross fade function implemented in discrete logic chips. They also had a 20 or 40MB scsi drive. It was all controlled by a 6809 cpu. Quite impressive for the time
Large displays are not driven by a general-purpose CPU that bit-bangs a single serial data line, and never were. They're driven by separate circuitry with direct memory access, often integrated on the die of chips meant for these applications. 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).
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.
> I never did this before so there was plenty to learn, from basic electronics and magnetics to high-speed signal routing.
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.
Building something useful in a circuit design using off-the-shelf ICs and components doesn't require a very deep understanding of the theoretical basis for why it works. There's really no need to be gated by thinking that overly complex mathematics and physics concepts must be fully understood before building. Most electronic parts datasheets have example circuits and layouts that can be followed to get a working design. A lot of progress can be made just by reading the datasheet, learning how to use a tool like fusion 360 electronics, kicad, etc., to connect the parts in a schematic, lay them out on a board, generate a gerber, send it to a china PCB shop like PCBway, get the pcb, assemble/solder the parts onto it, some cases may need some firmware which AI can do a lot now, finally fire it up and see if it works. Very few calculations or theoretical knowledge needed, outside of Ohms law.
About a year ago, I found a YouTube channel[0] which consists mostly of a really smart guy (with a proper background in electrical engineering) buying cheap electronics from eBay/Temu/AliExpress/etc, taking them apart and identifying the components, then reverse-engineering them. (Often followed by a discussion of how much better of a product it could be if the manufacturer hadn't cheaped out on a two-cent component.)
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!
[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.
> As a hobbyist I found hardware to be quite impenetrable, given the hard mathematics and physics requirements.
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 was going to say, AI has really enabled my hardware projects recently. I've found incorrect output is less common with the newest models - and they're capable of drawing decent diagrams too which can really help me sanity check some of their ideas. I've also had some success with asking it to cite sources where possible, so I get lots of useful links into robotics forums like chief delphi and similar which also help sure up the math
I have serious beef with ChatGPT's text-based circuit schematic drawing abilities. Even though the model itself appears to be fully coherent about the big and little picture aspects of whatever's "on bench" I have wasted too much time trying to parse its attempts to draw circuits. I consider them actively harmful in their current form. I quietly hope that one of the LLMs will start actually generating netcode that can be pasted into KiCAD, or even rendering circuit snippets inside of the chat stream properly.
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.
Just to be clear, I made a working prototype (and put a hyperbole in the title), I have a lot to learn still.
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'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!
This is really cool. I would love to switch from using the SoM I'm currently using to the Radxa CM3 but I cannot find even a single unit actually available for purchase on any of the "international" distributor options.
Can you speak to how you're sourcing these, and from where? (And would you sell me one?)
A bit tangential, and in the topic of nostalgia for old ways, remember when every block had a photo shop? Couldn’t we get a “PCB shop” in our bright near future? I wonder if the density of enthusiasts that need PCBs made is so low that the entire market is captured by only one or two companies based off China subject to the realities of shipping times.
> I wonder if the density of enthusiasts that need PCBs made is so low that the entire market is captured by only one or two companies based off China
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.
JCLPCB and who? Having a board made and assembled was both great in speed and effort, and terrible in cost markup when you add tarrifs on a $50 uc at 5 board minimum.
Easier than it sounds: the app runs a simple http server that serves cover art by track id. The track id is transferred via iOS's built in "Now Playing" metadata fields, which is then used by the device to construct a query and fetch the full resolution image.
> Once I had the design [of the enclosure], I tried to 3D print it on my brand new 3D printer, which turned out to be a disaster. Took me some time to learn more about designing for manufacturing, especially for 3D printing.
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.
Way back in time (1980s) I worked in the broadcast tv industry. We used to used digital still stores. A single frame of PAL took up 1MB of RAM. The machines had 2MB fitted. The board had a hardware cross fade function implemented in discrete logic chips. They also had a 20 or 40MB scsi drive. It was all controlled by a 6809 cpu. Quite impressive for the time
Large displays are not driven by a general-purpose CPU that bit-bangs a single serial data line, and never were. They're driven by separate circuitry with direct memory access, often integrated on the die of chips meant for these applications. 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).
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.
> I never did this before so there was plenty to learn, from basic electronics and magnetics to high-speed signal routing.
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.
Building something useful in a circuit design using off-the-shelf ICs and components doesn't require a very deep understanding of the theoretical basis for why it works. There's really no need to be gated by thinking that overly complex mathematics and physics concepts must be fully understood before building. Most electronic parts datasheets have example circuits and layouts that can be followed to get a working design. A lot of progress can be made just by reading the datasheet, learning how to use a tool like fusion 360 electronics, kicad, etc., to connect the parts in a schematic, lay them out on a board, generate a gerber, send it to a china PCB shop like PCBway, get the pcb, assemble/solder the parts onto it, some cases may need some firmware which AI can do a lot now, finally fire it up and see if it works. Very few calculations or theoretical knowledge needed, outside of Ohms law.
About a year ago, I found a YouTube channel[0] which consists mostly of a really smart guy (with a proper background in electrical engineering) buying cheap electronics from eBay/Temu/AliExpress/etc, taking them apart and identifying the components, then reverse-engineering them. (Often followed by a discussion of how much better of a product it could be if the manufacturer hadn't cheaped out on a two-cent component.)
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.
> As a hobbyist I found hardware to be quite impenetrable, given the hard mathematics and physics requirements.
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 was going to say, AI has really enabled my hardware projects recently. I've found incorrect output is less common with the newest models - and they're capable of drawing decent diagrams too which can really help me sanity check some of their ideas. I've also had some success with asking it to cite sources where possible, so I get lots of useful links into robotics forums like chief delphi and similar which also help sure up the math
I have serious beef with ChatGPT's text-based circuit schematic drawing abilities. Even though the model itself appears to be fully coherent about the big and little picture aspects of whatever's "on bench" I have wasted too much time trying to parse its attempts to draw circuits. I consider them actively harmful in their current form. I quietly hope that one of the LLMs will start actually generating netcode that can be pasted into KiCAD, or even rendering circuit snippets inside of the chat stream properly.
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.
Just to be clear, I made a working prototype (and put a hyperbole in the title), I have a lot to learn still.
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.
> so I put it between the port and the magnetics
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.
See https://www.ti.com/lit/df/snlr034/snlr034.pdf
Or, you could make some mistakes.
Hey HN,
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!
Congrats, that looks really neat :)
Do you have plans to make the project open source?
This is super cool! Thanks for sharing :)
very clean and well done!
This is really cool. I would love to switch from using the SoM I'm currently using to the Radxa CM3 but I cannot find even a single unit actually available for purchase on any of the "international" distributor options.
Can you speak to how you're sourcing these, and from where? (And would you sell me one?)
I buy them on AliExpress.
> I use AirPlay in my home exclusively, so I needed this streamer to support that
Doesn't Airplay switch you to other media on your device (e.g. Reddit, Youtube, etc) while browsing while streaming?
AirPlay doesn’t. Your iPhone might switch what app is streaming over AirPlay, but that’s not an AirPlay problem.
A bit tangential, and in the topic of nostalgia for old ways, remember when every block had a photo shop? Couldn’t we get a “PCB shop” in our bright near future? I wonder if the density of enthusiasts that need PCBs made is so low that the entire market is captured by only one or two companies based off China subject to the realities of shipping times.
> I wonder if the density of enthusiasts that need PCBs made is so low that the entire market is captured by only one or two companies based off China
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.
JCLPCB and who? Having a board made and assembled was both great in speed and effort, and terrible in cost markup when you add tarrifs on a $50 uc at 5 board minimum.
China: PCBWay, NextPCB (hqpcb), ALLPCB, pcbx, PCBgogo
North America: OSH Park
Europe: AISLER
Did you configure pipewire to allow multiple samplerates, so it can auto-switch the dac and not have to resample?
I am not using pipewire, just ALSA. AirPlay is (almost) always 44,100 Hz so there is not much to auto-switch to.
How did you learn PCB design? Any books or resources you can recommend? How long did it take you to learn?
Mostly YouTube and udemy courses. This one was pretty good in particular: https://www.udemy.com/course/high-speed-pcb-design-with-kica...
I've spend around a month on the PCB as a hobby, next to a full time job.
Oh, Absent Friends by Divine Comedy. What a beautiful record!
> I was able build an out-of-band protocol extension into my audio player app
I wonder how that works.
Easier than it sounds: the app runs a simple http server that serves cover art by track id. The track id is transferred via iOS's built in "Now Playing" metadata fields, which is then used by the device to construct a query and fetch the full resolution image.