<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ABNielsen.com</title>
	<atom:link href="https://abnielsen.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://abnielsen.com</link>
	<description>Anders Braüner Nielsen</description>
	<lastBuildDate>Thu, 26 Feb 2026 22:06:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>TouCAN Probe — More Than a Bus Adapter</title>
		<link>https://abnielsen.com/2026/02/26/toucan/</link>
					<comments>https://abnielsen.com/2026/02/26/toucan/#respond</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 22:06:14 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[canbus]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[rs-485]]></category>
		<category><![CDATA[stm32]]></category>
		<category><![CDATA[stm32f0]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=316</guid>

					<description><![CDATA[At first glance, TouCAN Probe looks like a clean, compact USB-to-CAN / RS-485 / RS-422 interface. But that’s underselling it. Because under the hood, this thing is a fully capable [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>At first glance, TouCAN Probe looks like a clean, compact USB-to-CAN / RS-485 / RS-422 interface.</p>



<p>But that’s underselling it.</p>



<p>Because under the hood, this thing is a fully capable STM32 development board that just happens to have industrial-grade differential transceivers attached.</p>



<p>And that changes everything.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-1024x683.jpeg" alt="" class="wp-image-318" srcset="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2753-2048x1365.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The Core: A Real MCU, Not a Bridge Chip</h2>



<p>TouCAN Probe is built around the STM32F042C6Tx — not a USB bridge, not a fixed-function CAN controller.</p>



<p>That means:</p>



<ul class="wp-block-list">
<li>Native USB FS device</li>



<li>Flexible firmware architecture</li>



<li>Direct control over peripherals</li>



<li>Access to GPIOs</li>



<li>SWD programming header</li>



<li>Real-time performance under your control</li>
</ul>



<p>This isn’t a “dongle.”<br>It’s an embedded system that ships as a tool.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-1024x683.jpeg" alt="" class="wp-image-323" srcset="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2764-2048x1365.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">It’s a Development Board in Disguise</h2>



<p>Because the MCU is fully exposed and programmable, TouCAN Probe can double as:</p>



<ul class="wp-block-list">
<li>A general STM32 development board</li>



<li>A USB device prototyping platform</li>



<li>A CAN firmware sandbox</li>



<li>A serial protocol analyzer</li>



<li>A bus traffic generator</li>



<li>A custom USB instrument</li>
</ul>



<p>You have access to:</p>



<ul class="wp-block-list">
<li>USART (PB6/PB7 exposed)</li>



<li>GPIOs via headers</li>



<li>Boot configuration pins</li>



<li>SWD for full debugging access</li>
</ul>



<p>Need a quick USB-controlled relay?<br>Need a CAN bootloader test platform?<br>Need a custom USB descriptor experiment?</p>



<p>You already have the hardware in your hand.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-1024x683.jpeg" alt="" class="wp-image-327" srcset="https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2026/02/IMG_2768-2048x1365.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Could It Be an ST-Link?</h2>



<p>The fun thought experiment:<br>With the right firmware, could TouCAN Probe act as an ST-Link compatible programmer?</p>



<p>The STM32F042C6Tx absolutely has the capability to implement:</p>



<ul class="wp-block-list">
<li>SWD signaling</li>



<li>USB composite devices</li>



<li>Debug transport protocols</li>
</ul>



<p>An official ST-Link uses a more powerful STM32 variant, but architecturally there’s nothing preventing a firmware implementation of a CMSIS-DAP or similar debugger stack on this hardware.</p>



<p>Meaning:</p>



<ul class="wp-block-list">
<li>It could program other STM32 targets</li>



<li>It could become a debug bridge</li>



<li>It could act as a USB-to-SWD tool</li>



<li>It could be a lab emergency programmer</li>
</ul>



<p>The hardware already exposes the right primitives.</p>



<p>That’s the beauty of building your own tools.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Mode Switching: Intentional and Clean</h2>



<p>At reset:</p>



<ul class="wp-block-list">
<li><strong>JP4 closed</strong> → USB enumerates as CDC (USART1 → RS-422/485)</li>



<li><strong>JP4 open</strong> → USB enumerates as GS_USB CAN</li>
</ul>



<p>After reset, jumpers can be reconfigured freely.</p>



<p>Default RS-422 full duplex:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Short JP3 &amp; JP4</p>
</blockquote>



<p>And when in CAN mode, USART1 (PB6/PB7) is still accessible externally.</p>



<p>So even in “CAN adapter” mode, you still effectively have a development board with serial IO available.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Hardware That Supports the Ambition</h2>



<p>This isn’t a breadboard hack.</p>



<p><strong>CAN transceiver:</strong> SN65HVD230<br><strong>RS-485/422 transceivers:</strong> SP3485EN (x2)<br><strong>LDO:</strong> MIC5504-3.3<br><strong>Board:</strong> 4-layer FR4 (~1.6 mm)<br><strong>EDA:</strong> KiCad 9</p>



<p>You get:</p>



<ul class="wp-block-list">
<li>Controlled impedance routing</li>



<li>Solid ground planes</li>



<li>Clean USB layout</li>



<li>Industrial-grade differential signaling</li>



<li>Production-ready manufacturing files</li>
</ul>



<p>It’s engineered like a deployable product — not just a lab experiment.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Endless Possibilities</h2>



<p>When you combine:</p>



<ul class="wp-block-list">
<li>Native USB device</li>



<li>CAN + RS-485 + RS-422 hardware</li>



<li>Exposed GPIO</li>



<li>SWD header</li>



<li>Bootloader access</li>



<li>Open hardware design</li>
</ul>



<p>You get a platform that can evolve.</p>



<p>Today:</p>



<ul class="wp-block-list">
<li>USB-to-CAN</li>



<li>USB-to-RS-485</li>



<li>USB-to-RS-422</li>
</ul>



<p>Tomorrow:</p>



<ul class="wp-block-list">
<li>Custom CAN protocol analyzer</li>



<li>Firmware-based CAN bridge</li>



<li>USB composite device (CDC + CAN)</li>



<li>Field firmware updater</li>



<li>Bus intrusion test tool</li>



<li>Portable automation interface</li>



<li>Emergency ST-Link-style programmer</li>
</ul>



<p>Or something no one has thought of yet.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Why This Is Actually Cool</h2>



<p>Most adapters are fixed-purpose appliances.</p>



<p>TouCAN Probe is a <strong>tool platform</strong>.</p>



<p>It reduces lab clutter.<br>It collapses multiple dongles into one device.<br>It exposes its internals instead of hiding them.<br>It invites firmware experimentation.</p>



<p>And if you’re the kind of engineer who likes understanding — and controlling — your tools, that’s the real win.</p>



<p>Because the best hardware tools aren’t just interfaces.</p>



<p>They’re multipliers.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2026/02/26/toucan/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>6502 and a 20MHz ADC takes up the challenge!</title>
		<link>https://abnielsen.com/2025/12/24/6502-and-a-20mhz-adc-takes-up-the-challenge/</link>
					<comments>https://abnielsen.com/2025/12/24/6502-and-a-20mhz-adc-takes-up-the-challenge/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Wed, 24 Dec 2025 11:24:20 +0000</pubDate>
				<category><![CDATA[6502]]></category>
		<category><![CDATA[Projects]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=305</guid>

					<description><![CDATA[Some projects exist purely to answer the question “what if?” — and this one certainly qualifies. Over the past year, I’ve been slowly pushing a modular SDR design further and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2025/12/image-1024x576.png" alt="" class="wp-image-306" srcset="https://abnielsen.com/wp-content/uploads/2025/12/image-1024x576.png 1024w, https://abnielsen.com/wp-content/uploads/2025/12/image-300x169.png 300w, https://abnielsen.com/wp-content/uploads/2025/12/image-768x432.png 768w, https://abnielsen.com/wp-content/uploads/2025/12/image-1536x864.png 1536w, https://abnielsen.com/wp-content/uploads/2025/12/image.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Some projects exist purely to answer the question “what if?” — and this one certainly qualifies. Over the past year, I’ve been slowly pushing a modular SDR design further and further, and this time I decided to do something that probably shouldn’t work at all: connect a modern 20 MHz, dual 10-bit ADC directly to a 50-year-old 6502 CPU.</p>



<p>Buy one here: <a href="https://www.imania.dk/samlesaet-hobbyelektronik-og-ic-er-phaselatch-20msps-adc-no-ram.htm">https://www.imania.dk/samlesaet-hobbyelektronik-og-ic-er-phaselatch-20msps-adc-no-ram.htm</a></p>



<p>Hardware source: <a href="https://github.com/AndersBNielsen/PhaseLatch">https://github.com/AndersBNielsen/PhaseLatch</a></p>



<p>Previous parts of the series: <a href="https://abnielsen.com/2025/09/06/phaseloom/">https://abnielsen.com/2025/09/06/phaseloom/</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="6502 SDR with 20MHz ADC!" width="640" height="360" src="https://www.youtube.com/embed/v0lzFp8aOxM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>The motivation came from earlier iterations. First there was PhaseLoom, which relied on a sound card for digitization. Then PhaseLatch Mini, using a cheap microcontroller with dual ADCs, managed to push a bit over 200 kHz of bandwidth into a PC. But from the start, I knew I wanted something more fundamental — something that interfaced directly with the CPU bus itself.</p>



<p>Enter PhaseLatch: an ADC board designed to be memory-mapped straight onto the 6502 data bus. The ADC I settled on turned out to be oddly perfect for the job: parallel output, straight binary, dual channels muxed onto the same pins — and suspiciously inexpensive. Whether it’s a clone or a second source, it enabled single-instruction ADC reads on a processor running at 1–2 MHz.</p>



<p>Of course, theory and reality rarely align. While the ADC is capable of 20 MSPS, the 6502 most certainly is not. Add in real-world issues like RAM expansion mistakes, rotated footprints, bus timing, and bit-banged clocks, and the project quickly became an exercise in humility.</p>



<p>Still, something remarkable emerged. By adding external RAM and implementing Goertzel’s algorithm, I managed to perform real DSP on the 6502 itself — detecting tones from RF signals mixed down to baseband. It’s about the simplest form of SDR that still earns the name, but it works.</p>



<p>This project isn’t about achieving record-breaking bandwidth. It’s about understanding limits, embracing constraints, and discovering just how much can still be done with hardware that predates most of us. Sometimes, doing things the hard way is the whole point.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2025/12/24/6502-and-a-20mhz-adc-takes-up-the-challenge/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Building the “PhaseLatch Mini”: A Detour Into Modular SDR Design</title>
		<link>https://abnielsen.com/2025/11/16/building-the-phaselatch-mini-a-detour-into-modular-sdr-design/</link>
					<comments>https://abnielsen.com/2025/11/16/building-the-phaselatch-mini-a-detour-into-modular-sdr-design/#respond</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Sun, 16 Nov 2025 08:29:44 +0000</pubDate>
				<category><![CDATA[6502]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[sdr]]></category>
		<category><![CDATA[stm32]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=292</guid>

					<description><![CDATA[Buy a PhaseLoom and PhaseLatch Mini at my store iMania.dk Source code and design files: https://github.com/AndersBNielsen/PhaseLatchMini If you’d told me a few years ago I’d be designing and building my [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Buy a PhaseLoom and PhaseLatch Mini at my store <a href="https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en">iMania.dk</a></p>



<p>Source code and design files: <a href="https://github.com/AndersBNielsen/PhaseLatchMini">https://github.com/AndersBNielsen/PhaseLatchMini</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="632" src="https://abnielsen.com/wp-content/uploads/2025/11/image-2-1024x632.png" alt="PhaseLatch Mini" class="wp-image-298" srcset="https://abnielsen.com/wp-content/uploads/2025/11/image-2-1024x632.png 1024w, https://abnielsen.com/wp-content/uploads/2025/11/image-2-300x185.png 300w, https://abnielsen.com/wp-content/uploads/2025/11/image-2-768x474.png 768w, https://abnielsen.com/wp-content/uploads/2025/11/image-2-1536x948.png 1536w, https://abnielsen.com/wp-content/uploads/2025/11/image-2-2048x1264.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>If you’d told me a few years ago I’d be designing and building my own modular Software Defined Radio platform, I’d have laughed. Radio has always felt like electronics magic to me—no matter how much I learn, the sense of wonder never goes away. In the previous video, we explored the bare-minimum concept of an SDR: mixing a radio signal down to IQ baseband and handing it off for digital processing. And yes, I did that with a 50-year-old CPU, the 6502.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="6502 + STM32 join forces as cheap SDR!" width="640" height="360" src="https://www.youtube.com/embed/UEAtSE1PV44?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>For a quick refresher on what SDR means at the circuit level, check out the first video in this series. Back then, my 65uino didn’t have a usable ADC, so the only real option was the classic 1990s approach—pipe the baseband into a computer sound card. In 2025, that makes it one of the lowest bandwidth SDR setups imaginable: stuck at 44.1 kHz, which is roughly 1/72 of what a cheap RTL-SDR can do. It can’t even decode FM. And since my long-term goal is far beyond a few megasamples per second, I needed something better.</p>



<p>Before jumping into high-end territory, I wanted to explore an affordable middle ground. Enter the STM32 “Blue Pill”—a dirt-cheap board I’d had sitting in a drawer for years. Despite its price, the STM32F103 MCU has a surprisingly ideal feature set for SDR use: USB, DMA, and, crucially, dual ADCs that can sample simultaneously. That last part is essential for properly digitizing I/Q channels, and it’s something many MCUs lack.</p>



<p>My expectations weren’t high, but after experimenting with the dev board, I got enough usable bandwidth to justify designing my own custom board. Huge thanks to this video’s sponsor, JLCPCB, who handled fabrication and assembly. I’ve used them long before ever being sponsored—they’re affordable, fast, and the boards come out great every time.</p>



<p>Since ADC performance depends heavily on layout, I upgraded the board to include a proper ground plane and clean separation between the sensitive analog input and noisy USB lines. The design is simple: capture I and Q through a passive LC low-pass filter for anti-aliasing, then feed them straight into the MCU’s ADCs.</p>



<p>After verifying power rails, programming via SWD, and confirming the 8 MHz clock, I wired the board into my existing <a href="https://abnielsen.com/2025/09/06/phaseloom/" data-type="post" data-id="283">PhaseLoom IQ mixer</a>. A single USB cable powers everything. Connected to my 40-meter antenna, the system immediately picked up AM, CW, and FT8—though with some aliasing and imperfect image rejection. Increasing the gain in the mixer helped, but only after carefully matching resistor pairs to avoid I/Q imbalance.</p>



<p>Once the hardware side looked solid, I tackled the firmware. The result is the PhaseLatch Mini: an STM32-based direct-conversion SDR front-end paired with simple Python host scripts. GQRX reads samples through a USB FIFO, and tuning is handled on the hardware side through the si5351 synthesizer. With this setup, I was able to cleanly receive HF, FM broadcast, and even experiment (with mixed success) around 144 MHz.</p>



<p>The PhaseLatch Mini isn’t the final destination—it’s a fun and capable side project on the path to a much more advanced 6502-powered SDR. But it’s already a surprisingly usable 200 kHz-bandwidth receiver, and I’ve made boards, kits, and files available for anyone who wants to experiment.</p>



<p>If you’re curious or want to dive deeper, come hang out on the Hackerspace Clubhouse Discord. More samples and a sneak peek at what’s next are at the end of the video up top. </p>



<p>Discord: <a href="https://discord.gg/kmhbxAjQc3">https://discord.gg/kmhbxAjQc3</a><br>Buy a PhaseLoom and PhaseLatch Mini at my store <a href="https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en">iMania.dk</a></p>



<p>Source code and design files: <a href="https://github.com/AndersBNielsen/PhaseLatchMini">https://github.com/AndersBNielsen/PhaseLatchMini</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2025/11/16/building-the-phaselatch-mini-a-detour-into-modular-sdr-design/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The 6502 Turns 50 – And I Built a Software Defined Radio With It</title>
		<link>https://abnielsen.com/2025/09/06/phaseloom/</link>
					<comments>https://abnielsen.com/2025/09/06/phaseloom/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Sat, 06 Sep 2025 07:35:19 +0000</pubDate>
				<category><![CDATA[6502]]></category>
		<category><![CDATA[sdr]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=283</guid>

					<description><![CDATA[This blog post is part 1 of a series of posts and videos where I build a modular Software Defined Radio. I&#8217;ll try to update this post as I release [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>This blog post is part 1 of a series of posts and videos where I build a modular Software Defined Radio. I&#8217;ll try to update this post as I release new modules and videos. </p>



<p>Part 1: <a href="https://youtu.be/lQh3Q6Q6pK8">A 6502 Software Defined Radio</a> (video), <a href="https://github.com/AndersBNielsen/PhaseLoom">PhaseLoom Github project</a>, <a href="https://abnielsen.com/2025/09/06/phaseloom/" data-type="post" data-id="283">this post</a>, <a href="https://www.imania.dk/samlesaet-hobbyelektronik-og-ic-er-phaseloom-v1-0-hand-fixed-assembled.htm">buy one here</a><br>Part 2: <a href="https://youtu.be/UEAtSE1PV44">6502 + STM32 join forces as cheap SDR!</a> (video), <a href="https://github.com/AndersBNielsen/PhaseLatchMini">PhaseLatch Mini</a> (Github), <a href="https://abnielsen.com/2025/11/16/building-the-phaselatch-mini-a-detour-into-modular-sdr-design/" data-type="post" data-id="292">Building the “PhaseLatch Mini”: A Detour Into Modular SDR Design</a> (blog post), <a href="https://www.imania.dk/samlesaet-hobbyelektronik-og-ic-er-phaselatch-mini.htm">buy one here</a></p>



<p>Part 3: <a href="https://abnielsen.com/2025/12/24/6502-and-a-20mhz-adc-takes-up-the-challenge/">6502 + 20MHz ADC!</a></p>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1707" src="https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-scaled.jpeg" alt="" class="wp-image-284" srcset="https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-scaled.jpeg 2560w, https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2025/09/AB981FA8-C095-4AFA-95DF-2FCCCA59D215_1_201_a-2048x1365.jpeg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<p></p>



<p>I just built what might be the coolest gadget of the year: a Software Defined Radio (SDR) powered by none other than the legendary MOS Technology 6502 CPU. And the timing couldn’t be better &#8211; this chip turns 50 years old on September 8th!</p>



<p>If you already know what SDRs and 6502s are, your jaw may have just dropped. But if not, don’t worry. I’ll catch you up.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="A 6502 Software Defined Radio" width="640" height="360" src="https://www.youtube.com/embed/lQh3Q6Q6pK8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>The source code for everything is on Github: <a href="https://github.com/AndersBNielsen/PhaseLoom">https://github.com/AndersBNielsen/PhaseLoom</a><br>You can also jump straight over to my store and <strong>buy one</strong>: <a href="https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en">https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en</a></p>



<p></p>



<h2 class="wp-block-heading">What’s an SDR Anyway?</h2>



<p>Think of an SDR as the Swiss Army knife of radios. Instead of filling a workbench with dedicated devices, like a garage door opener, a satellite receiver, and a shortwave set, you just plug in an SDR and let software do the heavy lifting. Tuning, filtering, demodulating is all handled by code.</p>



<p>With an SDR, you can:</p>



<ul class="wp-block-list">
<li>Pull down data from satellites</li>



<li>Decode airplane transponders</li>



<li>Listen to ham radio or shortwave broadcasts</li>



<li>Experiment with frequencies you didn’t even know existed</li>
</ul>



<p>They come in all shapes and sizes, from cheap USB dongles to professional-grade equipment worth thousands. Some just receive, others transmit. But they all share the same principle: turn analog radio waves into digital data, then let software handle the magic.</p>



<h2 class="wp-block-heading">And the 6502?</h2>



<p>Ah, the 6502. This little 8-bit CPU powered the Apple I &amp; II, Commodore 64, Atari consoles, and even the NES. For many, it was the chip that introduced the world to affordable personal computing. And now, half a century later, it’s back—this time running the front end of my homemade SDR.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-1024x683.jpeg" alt="" class="wp-image-285" srcset="https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2025/09/63F0EE7D-5044-4C9B-9454-EAEB08119BBD_1_201_a-2048x1365.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Meet the PhaseLoom</h2>



<p>I call my creation the PhaseLoom: a Quadrature Sampling Detector Phase-Locked Loop SDR frontend. Don’t worry about the jargon—what matters is that it’s a custom circuit that converts radio signals into the digital I/Q streams needed for software processing.</p>



<p>In practice, it works like this:</p>



<p>RF Frontend – A simple low-pass filter to clean up incoming signals.</p>



<p>Quadrature Sampling Detector – Uses clever switching to split the signal into in-phase (I) and quadrature (Q) components.</p>



<p>Local Oscillator – Generated by an SI5351 clock chip, controlled by 6502 assembly code.</p>



<p>Output – The I/Q signals can be piped into a sound card, oscilloscope, or eventually a higher-speed ADC for real SDR processing.</p>



<p>When I first powered it up, I wasn’t sure what to expect. But sure enough, with an antenna hooked up, I could tune into the 40-meter ham band. It’s rough, noisy, and very much a prototype—but it works. A 6502-powered SDR is alive.</p>



<p>Why This Matters</p>



<p>Most SDRs today rely on powerful modern processors or FPGAs. Running one from a CPU designed in 1975 is absolutely ridiculous—and that’s exactly why it’s so fun. The 6502 may not be doing the heavy DSP (yet), but it’s orchestrating the whole show. And with more development, I plan to push it further—maybe even squeezing in some real signal processing routines on that ancient silicon.</p>



<p>The Road Ahead</p>



<p>This is just the beginning. Better filters, wider bandwidth ADCs, and smarter software are all on the horizon. And yes, the PhaseLoom will be open hardware—schematics, code, and boards are already available.</p>



<p>The 6502 started a revolution 50 years ago. Today, it’s tuning in the airwaves. And I can’t wait to see how far this project goes.</p>



<p>For now you can <strong>buy one here</strong>: <a href="https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en">https://www.imania.dk/index.php?currency=EUR&amp;cPath=204&amp;sort=5a&amp;language=en</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2025/09/06/phaseloom/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Serial Hacking</title>
		<link>https://abnielsen.com/2024/12/20/serial-hacking/</link>
					<comments>https://abnielsen.com/2024/12/20/serial-hacking/#respond</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Fri, 20 Dec 2024 11:58:11 +0000</pubDate>
				<category><![CDATA[6502]]></category>
		<category><![CDATA[Projects]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=278</guid>

					<description><![CDATA[Source and documentation on Github: https://github.com/AndersBNielsen/Universal-Serial-Adapter The Origins of the Word &#8220;Hacker&#8221; and a Universal Serial Adapter for Modern Tinkering Have you ever wondered where the term &#8220;hacker&#8221; originated? It’s [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Serial Hacking" width="640" height="360" src="https://www.youtube.com/embed/w22Xjf3kKlc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Source and documentation on Github: <a href="https://github.com/AndersBNielsen/Universal-Serial-Adapter">https://github.com/AndersBNielsen/Universal-Serial-Adapter</a></p>



<h3 class="wp-block-heading">The Origins of the Word &#8220;Hacker&#8221; and a Universal Serial Adapter for Modern Tinkering</h3>



<p>Have you ever wondered where the term &#8220;hacker&#8221; originated? It’s a fascinating journey that’s far removed from the modern association with cybercrime. While working on my latest project—a Universal Serial Adapter—I found myself reflecting on this word’s history and how it ties back to the essence of ingenuity and hands-on innovation.</p>



<h4 class="wp-block-heading">The Historical Roots of &#8220;Hacker&#8221;</h4>



<p>The term &#8220;hacker&#8221; first appeared in the 1950s, linked to the MIT Tech Model Railroad Club. These pioneers weren’t cracking passwords or infiltrating systems; they were enthusiasts modifying electrical circuits and railroad systems. According to records from a 1955 meeting, students were advised to turn off power before “hacking on the electrical system.” This suggests that hacking, at its core, involved physical tinkering—sometimes literally with hacksaws—to modify and improve systems.</p>



<p>This origin reflects a time when printed circuit boards (PCBs) were expensive, and modifications were often done by hand. This hands-on spirit of experimentation resonates deeply with the work I’ve been doing, and it’s a mindset I’ve aimed to embody in my latest project.</p>



<h4 class="wp-block-heading">Introducing the Universal Serial Adapter</h4>



<p>The Universal Serial Adapter is a tool designed for flexibility and ease of use. It features:</p>



<ul class="wp-block-list">
<li><strong>USB-C connectivity</strong> on one end,</li>



<li><strong>UART control signals</strong> for interfacing with microcontrollers, and</li>



<li>An <strong>RS-232 (COM) port</strong> for compatibility with older systems like the IBM PC AT from 1984.</li>
</ul>



<p>This adapter bridges the gap between decades of computing technology, making it useful for both vintage computer enthusiasts and modern developers working with microcontrollers.</p>



<h4 class="wp-block-heading">Why Build It?</h4>



<p>There are plenty of USB-to-serial adapters on the market, but I wanted something more hackable and modifiable. Most commercial options are encased in epoxy, making them difficult to tweak. By creating an open-source, modular design, I’ve ensured this tool can adapt to various use cases. For example, it’s perfect for testing connections or experimenting with PCB designs before committing to a final product.</p>



<h4 class="wp-block-heading">The Hackability Factor</h4>



<p>One key feature of the Universal Serial Adapter is its configurability. Traditional RS-232 setups often require null modem adapters or crossover cables, which can complicate signal flow and control signal pass-through. To simplify this, I designed jumper blocks that make configuring the polarity straightforward. Here’s how it works:</p>



<ul class="wp-block-list">
<li>Signal pairs are placed in jumper blocks.</li>



<li>Horizontal jumpers configure straight connections.</li>



<li>Vertical jumpers cross over the signals (e.g., RX/TX, CTS/RTS).</li>
</ul>



<p>This intuitive approach eliminates the need for external adapters and ensures the control signals are handled correctly, improving connection reliability.</p>



<h4 class="wp-block-heading">Modern-Day Circuit Board Innovations</h4>



<p>Unlike the expensive PCBs of the 1950s, modern manufacturing has made prototyping affordable. For this project, I relied on <strong>JLCPCB</strong>, whose sponsorship allowed me to experiment freely without breaking the bank. If you’re interested, new customers can get coupons for their first order, and I’ve linked the details in the description. With their service, you can get six-layer PCBs for as little as $5—a dream for hobbyists and professionals alike.</p>



<h4 class="wp-block-heading">Open Source and Community Contributions</h4>



<p>This project is 100% open source. All design files and schematics are available on GitHub, so you can customize the adapter or use it as inspiration for your own projects. I’ve also integrated ideas from the community. For instance, the jumper configuration technique was inspired by contributions from CommodoreZ and TechAV, showcasing the collaborative spirit of the maker community.</p>



<h4 class="wp-block-heading">Beyond the Basics</h4>



<p>The adapter is built for flexibility:</p>



<ul class="wp-block-list">
<li><strong>Modular Design:</strong> It can be snapped apart into separate components using a clever combination of vias and notches, offering sturdiness and convenience.</li>



<li><strong>Compatibility:</strong> It works with both modern computers and vintage hardware.</li>



<li><strong>Advanced Features:</strong> The RS-232 chip includes a sleep mode for power efficiency and can be manually woken up when needed.</li>
</ul>



<p>For breadboard enthusiasts, the adapter plugs directly into standard boards, making it easy to prototype new circuits. If you need just the RS-232 functionality, you can separate it from the USB-to-serial chip and use it independently.</p>



<h4 class="wp-block-heading">Performance and Testing</h4>



<p>During testing, the adapter surpassed expectations, achieving data transfer rates of over 1 megabit per second without errors. This performance is impressive given the datasheet ratings for the components. A Python script I wrote for testing is also available on GitHub, so you can replicate or adapt the setup for your own needs.</p>



<h4 class="wp-block-heading">Looking Ahead</h4>



<p>This project is part of a broader effort to upgrade my 6502-based single-board computer, the <a href="https://abnielsen.com/2023/03/28/65uino/" data-type="post" data-id="251">65uino</a>, to include USB-C and built-in UART. The Universal Serial Adapter was born out of a need to test these new features, but it has evolved into a versatile tool in its own right.</p>



<h4 class="wp-block-heading">Join the Conversation</h4>



<p>If you have questions or want to share your own projects, feel free to join the discussion on my <a href="https://discord.gg/kmhbxAjQc3">Hackerspace Clubhouse Discord server</a>. The <a href="https://www.imania.dk/product_info.php?currency=EUR&amp;cPath=204&amp;products_id=7224&amp;language=en">Universal Serial Adapter</a> is already available in my store, and I’m always happy to hear feedback or ideas for future improvements.</p>



<p>Let’s keep the spirit of hacking alive—whether it’s with a soldering iron, a hacksaw, or just a curious mind. Thanks for reading, and happy tinkering!</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2024/12/20/serial-hacking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Meet the 65uino</title>
		<link>https://abnielsen.com/2023/03/28/65uino/</link>
					<comments>https://abnielsen.com/2023/03/28/65uino/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Tue, 28 Mar 2023 13:46:18 +0000</pubDate>
				<category><![CDATA[6502]]></category>
		<category><![CDATA[Projects]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=251</guid>

					<description><![CDATA[UPDATE: The 65uino is now available as a kit with SMD parts presoldered from my own store, iMania.dk The 65uino is a 6502 based learning platform in a familiar form [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001-1024x576.jpeg" alt="65uino with pinout" class="wp-image-257" srcset="https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001-1024x576.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001-300x169.jpeg 300w, https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001-768x432.jpeg 768w, https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001-1536x864.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2023/05/Pinouts.001.jpeg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>UPDATE: The 65uino is now available as a <a href="https://www.imania.dk/index.php?cPath=204&amp;sort=5a&amp;language=en">kit with SMD parts presoldered from my own store</a>, iMania.dk</strong></p>



<p>The 65uino is a 6502 based learning platform in a familiar form factor. It has a 6507 CPU, a 6532 RIOT chip and a 28 pin ROM as the core components and aims to teach assembly programming, computer engineering and embedded design by opening up the black box of modern MCU&#8217;s.</p>



<p>By going back to a time where the integrated circuits each mostly did their own thing, the 65uino hopes to give a better and faster understanding of the basic concepts that&#8217;ll typically be abstracted away nowadays. </p>



<p>The project is 100% open source and you&#8217;ll find all the details over on <a href="https://hackaday.io/project/190260-65uino">hackaday.io </a> so check it out and follow along!</p>



<p><strong>Are you looking for the Relatively Universal ROM programmer?</strong> Have a look at <a href="https://github.com/AndersBNielsen/Relatively-Universal-ROM-Programmer">https://github.com/AndersBNielsen/Relatively-Universal-ROM-Programmer</a><br>You&#8217;ll also find that <strong><a href="https://www.imania.dk/index.php?cPath=204&amp;sort=5a&amp;language=en">kit with SMD parts presoldered from my own store</a></strong>.</p>



<p></p>



<p></p>



<h2 class="wp-block-heading">65uino-related videos</h2>



<p>If you&#8217;re new to the 65uino, you might want to check out the videos below as explain how the 65uino came to be, and how it works, step by step. </p>



<p>First, it started out on a breadboard&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="A 6502 Based Computer on a Single Breadboard" width="640" height="360" src="https://www.youtube.com/embed/s3t2QMukBRs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Then it shrunk and learned to do I2C&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="I²C on a 6502 Single Board Computer - The 65uino #i2c #6502" width="640" height="360" src="https://www.youtube.com/embed/i7q0P9-wszM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Then it got a screen&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="OLED display on a 6502 Single Board Computer using i2c #65uino" width="640" height="360" src="https://www.youtube.com/embed/x6xsTXY7OtI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>&#8230;and a bootloader&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Serial Bootloader for ANY 6502 Single Board Computer #65uino" width="640" height="360" src="https://www.youtube.com/embed/nOmQd3y3pDw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Learned to control a Raspberry Pi&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Can a 6502 computer control a Raspberry Pi?" width="640" height="360" src="https://www.youtube.com/embed/QYN7VGy-H6Y?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Got a graphics upgrade&#8230; </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Scrolling OLED on a 6502 Single Board Computer" width="640" height="360" src="https://www.youtube.com/embed/Cexdm8K4kW0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Figured out all kinds of serial flow control&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Serial Flow Control. What&#039;s CTS RTS XOFF XON and why should you care?" width="640" height="360" src="https://www.youtube.com/embed/pdloxXDJejM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Got given away for free&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="I gave away 35 8-bit motherboards" width="640" height="360" src="https://www.youtube.com/embed/DgULY_Qp5aQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Studied to become a ROM programmer&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Programming old ROMs with HIGH voltage" width="640" height="360" src="https://www.youtube.com/embed/1GMmktWHyhg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>&#8230;graduated with honors!</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="This 9$ Universal ROM Burner is Open Source!" width="640" height="360" src="https://www.youtube.com/embed/adLz2Gj239s?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>&#8230;and more is coming very soon @ https://www.youtube.com/c/AndersNielsenAA<br><br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2023/03/28/65uino/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>WS2812B RGB lights on a 6502!</title>
		<link>https://abnielsen.com/2021/12/23/ws2812b-rgb-lights-on-a-6502/</link>
					<comments>https://abnielsen.com/2021/12/23/ws2812b-rgb-lights-on-a-6502/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Thu, 23 Dec 2021 08:19:48 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[6502]]></category>
		<category><![CDATA[WS2812b]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=229</guid>

					<description><![CDATA[The problem with WS2812B&#8217;s on a slow CPU When even the co-author of the FastLED library, Mark Kriegsmann, says it&#8217;s can&#8217;t be done, you know it&#8217;s not going to be [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">The problem with WS2812B&#8217;s on a slow CPU</h2>



<p>When even the co-author of the FastLED library, Mark Kriegsmann, says<a href="https://blog.kriegsman.org/2015/02/16/fastled-for-the-apple-ii/"> it&#8217;s can&#8217;t be done</a>, you know it&#8217;s not going to be easy.  &#8220;The CPU would need to be at least&nbsp;20X faster to support them[WS2811 based LED&#8217;s], and it isn’t. &nbsp;For that you want an Arduino or Teensy[&#8230;]&#8221;, as he puts it. </p>



<p>The WS2812B protocol is very simple. Basically it&#8217;s a binary PWM signal. Said another way: A long high pulse followed by a short low period for a 1 and a short high pulse followed by a long low period for a 0, and just a long period of nothing to latch the data and turn on the LED.  </p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="621" height="352" src="https://abnielsen.com/wp-content/uploads/2021/12/image-1.png" alt="" class="wp-image-234" srcset="https://abnielsen.com/wp-content/uploads/2021/12/image-1.png 621w, https://abnielsen.com/wp-content/uploads/2021/12/image-1-300x170.png 300w" sizes="auto, (max-width: 621px) 100vw, 621px" /><figcaption>From the <a href="http://www.world-semi.com/solution/list-4-1.html" data-type="URL" data-id="http://www.world-semi.com/solution/list-4-1.html" target="_blank" rel="noreferrer noopener">WorldSemi datasheet</a>.</figcaption></figure></div>



<p>That looks easy right? Just toggle a pin at the right interval and it works, right? Well &#8211; it is, if you&#8217;ve got a fast enough processor. Looking at the numbers though, there isn&#8217;t enough time to do much toggling when running at 1 or 2Mhz &#8211; let alone varying the periods.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="333" src="https://abnielsen.com/wp-content/uploads/2021/12/image-2-1024x333.png" alt="" class="wp-image-235" srcset="https://abnielsen.com/wp-content/uploads/2021/12/image-2-1024x333.png 1024w, https://abnielsen.com/wp-content/uploads/2021/12/image-2-300x98.png 300w, https://abnielsen.com/wp-content/uploads/2021/12/image-2-768x250.png 768w, https://abnielsen.com/wp-content/uploads/2021/12/image-2.png 1086w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>WS2812B timings from the <a href="http://www.world-semi.com/solution/list-4-1.html" target="_blank" rel="noreferrer noopener">WorldSemi datasheet</a>. </figcaption></figure>



<p>At the very &#8220;slowest&#8221; the high+low period must be 1.825 microseconds, or just about 500khz minimum. Maybe it&#8217;s possible to toggle a 6502 pin at 500khz, but it certainly isn&#8217;t possible to squeeze NOP&#8217;s in there to vary the period or do any kind of processing to change colors. So maybe Mark is right and you actually do need a faster processor? </p>



<p>Luckily it turns out, this isn&#8217;t the case. The 6502 is perfectly capable of controlling a string of WS2812B&#8217;s, a.k.a. Neopixels. Just like everything else you might want to interface the 6502 to though &#8212; the RGB LED&#8217;s need a little bit of help. </p>



<p>In this case all we need is a 6522 VIA, which is part of most 6502 computers anyway, a 74hc14 inverter, and a 74hc165 parallel-in serial-out shift register, along with an 8 Mhz clock and some passives. </p>



<p>To be fair, this does mean running the 6502 at 2Mhz(Note: Not 8 Mhz), which would be slightly problematic for the Apple II, but perfectly doable for many or most other 6502 based computers.</p>



<p>As luck would have it, my own <a href="https://youtu.be/y5PQ7kBH29A" target="_blank" rel="noreferrer noopener">6502 single board computer</a> has an 8 Mhz clock output available and is already running happily at 2 Mhz, which takes the hard work out interfacing with the LED&#8217;s &#8211; only two extra IC&#8217;s needed. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-1024x683.jpeg" alt="" class="wp-image-237" srcset="https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-1024x683.jpeg 1024w, https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-300x200.jpeg 300w, https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-768x512.jpeg 768w, https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-1536x1024.jpeg 1536w, https://abnielsen.com/wp-content/uploads/2021/12/IMG_2675-2048x1365.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>My 6502 Single Board Computer happily driving a strip of WS2812B LED&#8217;s</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">The schematic</h2>



<p> </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="713" src="https://abnielsen.com/wp-content/uploads/2021/12/image-1024x713.png" alt="" class="wp-image-233" srcset="https://abnielsen.com/wp-content/uploads/2021/12/image-1024x713.png 1024w, https://abnielsen.com/wp-content/uploads/2021/12/image-300x209.png 300w, https://abnielsen.com/wp-content/uploads/2021/12/image-768x535.png 768w, https://abnielsen.com/wp-content/uploads/2021/12/image.png 1293w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Two IC&#8217;s and a few passive components is all it takes. </figcaption></figure>



<p>The circuit takes a shift clock and serial data from the 6522 shift register. CB1 is the clock and CB2 is the shifted data. CB1 is normally high until it starts clocking out data, which keeps the ~CE(chip enable, active low) pin high through R2. When CB1 goes low the first time, C2 immediately discharges through D1 (I used a 4148) and ~CE is activated. This arrangement keeps the shift register active while data is shifted.</p>



<p>At the same time the signal from CB1 is also fed through the U1A inverter, a simple RC filter, and another inverter, giving the ~PL(load register pin) the short negative pulse needed to latch the data being clocked out from the 6522 shift register. If the pulse is too long, we miss the first bit. </p>



<p>Now we get to where the magic happens &#8211; the serial binary data is converted to WS2812-style PWM data. Since D7 is always high and D0-D4 is always low, this varies the high period of the signal by putting the data on pins D5 and D6.  </p>



<p>The latched data is then clocked out to Q7 at the rate of 8 Mhz, fed to the CP pin and this is then fed directly to the WS2812B data pin. This means the 6522 supplies data at a comfortable rate of 1 Mhz and the 74HC165 shifts out the converted data at 8 Mhz, which means the bit rate is right around 1bit per microsecond. As you can see this is well within the 1.25us+-600ns in the datasheet. </p>



<p>We&#8217;re actually closer to going too fast than too slow, but halving the clocks to 500KHz and 4 Mhz would make it 2 microseconds pr bit &#8211; out of spec that says max 1.825 microseconds. <br>Maybe &#8211; just maybe &#8211; this could actually work on an Apple II since it has a slightly higher clock than 1Mhz @ 1.023Mhz, but you would then need to make a 4x frequency multiplier for the shift register CP to match input and output.  </p>



<p>But wait&#8230; 3/8 is only 375ns, right? That would be a 0 signal, right? And 1/8 is only 125ns? Well &#8211; in my case I seem to have either stray capacitance on Q7 or something else messing with the timing &#8211; somehow using more than two pins for the data gives me a T1H period way longer  than what we&#8217;re aiming for here &#8211; essentially making every bit a 1. Maybe a pulldown resistor on Q7 would make things more consistent &#8211; either way I chose to leave things the way they are simply because they work. </p>



<h2 class="wp-block-heading">The code</h2>



<p>The code below is a simplified modification to the current state of my 6502 firmware &#8211; my favorite compiler for the 6502 is <a href="https://cc65.github.io/" target="_blank" rel="noreferrer noopener">cc65</a>. Since I&#8217;m not sure I&#8217;ll merge the change, I&#8217;m leaving it here for now &#8211; untested, but contains everything needed to get it working. Assume a <a href="https://creativecommons.org/licenses/by-nc/4.0/">CC BY-NC license</a> for now. </p>



<p>Sending a color to an LED on the string is as simple as just sending them in the right order with a delay that&#8217;s long enough to make sure the 6522 shift register finished shifting before sending another byte &#8211; the WS2812B expects colors in GRB order. 24 bits in total per LED.</p>



<p>When we&#8217;re done putting colors on the LED string, all that&#8217;s left to do is just to wait 50 microseconds, so the string latches the data (updates). </p>



<p>Essentially this means we have 100 clock cycles (at 2 Mhz) available to manipulate LED data even while we&#8217;re sending pixels. As long as we&#8217;re sending the next 24 bit LED data before the 50 microseconds have passed, we can keep using time between LED&#8217;s for as many LED&#8217;s as we need. </p>



<p>100 clock cycles is more than enough to rainbow the LED&#8217;s and most other simple processing. </p>



<pre class="wp-block-code"><code>;Variables used besides 6522 registers, ACR &amp; SR affected here
; WS2812B variables
GREEN = $20
RED = $21
BLUE = $22
PIXELS = $27

main:
          LDA #%01011000
          STA ACR             ; 6522 ACR register T1 continuous, PB7 disabled, Shift Out Ø2
          lda #40 ; This is how many pixels I'm using.
          sta PIXELS
          jsr sendpixels ; This should clear LEDs on reset if RAM has been 0'd out - random color otherwise. 

    sendpixels:
      ldx PIXELS
    sending:
      sei ; Getting interrupted breaks the timing
      jsr sendpixel
      cli
      dex
      bne sending
      jmp halt ; Done

    sendpixel:
      lda GREEN
      sta SR1
      jsr eznop
      lda RED
      sta SR1
      jsr eznop
      lda BLUE
      sta SR1
      jsr eznop
       rts

      eznop:
         rts

      halt:
      jmp halt ; Loop forever here</code></pre>



<h2 class="wp-block-heading">Conclusion</h2>



<p>As you can see, the 6502 is perfectly capable of rainbowing a string of individually addressable RGB LED&#8217;s &#8211; it even has time to spare. Previously I&#8217;ve managed to run one of these LED strips at 4 Mhz(out of spec though), but I&#8217;m happy to report it&#8217;s possible to go even lower with this approach. <br>In a pinch you could use the same trick with an Arduino at lower clock speeds &#8211; all you would need is a second &#8216;165 shift register to have the Arduino output a whole port at the same time ( PORTA = RED; NOP x 7 etc.) </p>



<p>What do you think? Cool experiment or waste of time? I&#8217;d appreciate a comment here or on Youtube.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="WS2812B RGB LEDs on a 6502!" width="640" height="360" src="https://www.youtube.com/embed/sWaI3kpXslY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2021/12/23/ws2812b-rgb-lights-on-a-6502/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>3 cent PMS150C MCU driving 300 WS2812B LED&#8217;s</title>
		<link>https://abnielsen.com/2019/04/24/driving-300-ws2812b-rgb-leds-with-a-3-cent-microcontroller-pms150c/</link>
					<comments>https://abnielsen.com/2019/04/24/driving-300-ws2812b-rgb-leds-with-a-3-cent-microcontroller-pms150c/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Wed, 24 Apr 2019 21:40:05 +0000</pubDate>
				<category><![CDATA[Padauk PMS150C]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[3 cent mcu]]></category>
		<category><![CDATA[neopixel]]></category>
		<category><![CDATA[Padauk]]></category>
		<category><![CDATA[pms150c]]></category>
		<category><![CDATA[WS2812b]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=195</guid>

					<description><![CDATA[The 3 cent Padauk PMS150C is.. Interesting to say the least. First of all there&#8217;s a lot this little MCU doesn&#8217;t do. It doesn&#8217;t have a lot of code space [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The 3 cent Padauk PMS150C is.. Interesting to say the least. First of all there&#8217;s a lot this little MCU doesn&#8217;t do. It doesn&#8217;t have a lot of code space (1K Word), it doesn&#8217;t have a lot of RAM (64 bytes) and it doesn&#8217;t even do hardware multiplication. It doesn&#8217;t have an instruction for loading data from ROM either(Though there are ways of getting around this &#8211; but that&#8217;s a subject for another post). And of course &#8211; you can only program it ONCE.</p>



<div class="wp-block-image"><figure class="alignleft is-resized"><img loading="lazy" decoding="async" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-1024x683.jpg" alt="" class="wp-image-190" width="514" height="344" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-768x512.jpg 768w" sizes="auto, (max-width: 514px) 100vw, 514px" /><figcaption>PMS150C U06 on an ill suited SOIC8 breakout</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft is-resized"><img loading="lazy" decoding="async" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-1024x683.jpg" alt="" class="wp-image-194" width="512" height="342" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-768x512.jpg 768w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure></div>



<p></p>



<p>Hint: Gallery the bottom of this post!</p>



<h2 class="wp-block-heading">So.. What can it do? Blink lights? Well yes.. and so much more. </h2>



<p>Even though it has it&#8217;s limitations, there&#8217;s actually a lot you can do just by bitbanging with an 8Mhz microcontroller. As you can see in the screenshot from the IDE below, it&#8217;s actually meant to work with a bunch of peripherals &#8211; even though there is no hardware support for any of it. </p>



<div class="wp-block-image"><figure class="alignleft is-resized"><a href="https://abnielsen.com/wp-content/uploads/2019/04/image.png"><img loading="lazy" decoding="async" src="https://abnielsen.com/wp-content/uploads/2019/04/image.png" alt="" class="wp-image-197" width="244" height="226" srcset="https://abnielsen.com/wp-content/uploads/2019/04/image.png 976w, https://abnielsen.com/wp-content/uploads/2019/04/image-300x278.png 300w, https://abnielsen.com/wp-content/uploads/2019/04/image-768x711.png 768w" sizes="auto, (max-width: 244px) 100vw, 244px" /></a><figcaption>The Padauk IDE &#8220;code generator&#8221;</figcaption></figure></div>



<p>Of course there&#8217;s a couple of very smart people over on the EEVBlog forum working hard at <a href="http://www.eevblog.com/forum/blog/eevblog-1144-padauk-programmer-reverse-engineering/">making an open toolchain for these chips,</a> but I decided I couldn&#8217;t wait to get started and stuck with the manufacturer IDE, ICE and programmer.</p>



<p>To get the most out of the tools at hand, the IDE seems to expect you to use a mix of plain C, macros and assembly instructions, all mushed together in some pretty interestingly looking code.  I&#8217;m probably not going to be popular for saying this but it actually feels very intuitive when you get used to it. It&#8217;s weird, but it&#8217;s &#8220;fun&#8221;.</p>



<p>After my initial mandatory &#8220;blinky tests&#8221; I decided to try something slightly more useful &#8211; controlling a WS2812B LED. Since the protocol itself relies on bitbanging with pretty tight timings, I figured this was a good test.</p>



<p>Before we move on, here&#8217;s the spoiler! Success:</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="3 cent MCU PMS150C driving 300 WS2812B&#039;s (aka NeoPixels)" width="640" height="360" src="https://www.youtube.com/embed/zdhI0kNYR_c?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">But how? Adafruit&#8217;s Arduino-library uses 3 bytes of RAM for every LED so how do you run 300 with just 64 bytes of RAM?</h3>



<p>Turns out there&#8217;s a simple solution to this problem: Don&#8217;t put every LED in RAM. <br>Since the timings of the WS2812B&#8217;s aren&#8217;t that tight, there&#8217;s actually room for a lot of spare cycles between sending the 24bit value for each LED. Basically just do the logic on the fly, instead of storing each LED in RAM. The only downside is you can&#8217;t just change a single LED value and leave the rest. <br><br>The logic for controlling the LED&#8217;s is pretty simple once you wrap your head around it. Send 24 bits for each LED and end with a delay long enough to make the data latch. In this case, keep each bit around 1.25uS, a &#8220;0&#8221; is a short high, followed by a &#8220;long&#8221; low and a &#8220;1&#8221; is a long high followed by a short low. So simply: High-&gt;Low 24 times. Long high for 1, short high for 0.<br>Here&#8217;s a snippet from the datasheet:<br></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="342" src="https://abnielsen.com/wp-content/uploads/2019/04/image-1-1024x342.png" alt="" class="wp-image-211" srcset="https://abnielsen.com/wp-content/uploads/2019/04/image-1-1024x342.png 1024w, https://abnielsen.com/wp-content/uploads/2019/04/image-1-300x100.png 300w, https://abnielsen.com/wp-content/uploads/2019/04/image-1-768x257.png 768w, https://abnielsen.com/wp-content/uploads/2019/04/image-1.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption><br></figcaption></figure>



<p>The +/- 150ns was plenty of headroom in my case, with the PMS150C running at 8mhz. Same is the case with the +/- 600ns for each bit. I expect I could&#8217;ve easily run 3000 LED&#8217;s instead of 300 &#8211; but I didn&#8217;t have the power supply for that much heat lying around <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Tim &#8220;cpldcpu&#8221; wrote <a href="https://cpldcpu.wordpress.com/2014/01/14/light_ws2812-library-v2-0-part-i-understanding-the-ws2812/">a detailed post about it</a> back in 2014 but either things changed since or he got the details wrong, because in my tests a RES signal needed to be at least 50uS and when experiencing glitches, the longer the reset signal, the better. <br>I have a feeling I would&#8217;ve never done this project if I hadn&#8217;t seen <a href="https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/">Big Josh&#8217;s post about how simple the protocol actually is</a> but sadly his code needed some serious manipulation to port to the Padauk IDE, so I ended up rewriting it completely from scratch with the WorldSemi datasheet in hand and a vague memory of what BigJosh did with it.<br>A big thank you for the inspiration to both Tim and BigJosh!</p>



<figure class="wp-block-image"><a href="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010.jpg" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-1024x576.jpg" alt="" class="wp-image-180" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption><br>Padauk PMS150C successfully driving 300 WS2812B LED&#8217;s<br></figcaption></figure>



<h3 class="wp-block-heading">So.. What about the code?</h3>



<p>Below is the minimum code I use to talk to the string of LED&#8217;s. There&#8217;s room for optimisation and I&#8217;m sure a bunch of it looks funny, if you&#8217;re used to seeing a plain C project on an AVR. First of all, the Padauk IDE is a little bit fuzzy when it comes to data types. There&#8217;s no such thing as a &#8220;long&#8221; and it seems to me all types are unsigned by default &#8211; though I haven&#8217;t researched this thoroughly. <br>The only data types available in the Padauk IDE are:</p>



<ul class="wp-block-list"><li>Bit (1 bit) </li><li>Byte (8 bit)</li><li>Int (8 bit(!))</li><li>Word (16 bit)</li><li>EWORD (24 bit)</li><li>DWORD (32 bit)</li></ul>



<p>The handy thing about the types though, is that the individual bits and bytes can be accessed by macros, without any fuzzing about with shifting them around. </p>



<p>For instance: <br>mybyte.4 = 0; //Clears bit 4 of mybyte<br>myEWORD$1 = mybyte; //Sets the middle byte of the 24 bit EWORD</p>



<p>Also, the builtin macros come very handy. See the below code. All the code needed to control the WS2812B&#8217;s are contained in the macros &#8220;send1&#8221;, &#8220;send0&#8221; and the function SendRGB();</p>



<p>The SendRGB() function is a prime example of Padauk IDE weirdness, containing both assembly instructions, macros and plain old C. But what can I say: It works. I probably could&#8217;ve shifted the rgb EWORD x in a while loop(more efficiently than the 24 macro if&#8217;s) but I decided to try out the macro and it was more than efficient enough for this purpose. The rest of the code(which I haven&#8217;t included here) is basic manipulation of the r,g &amp; b values followed by a show(); to set the right colors.<del> Leave a comment if you want to see, and I&#8217;ll throw the complete project on github.</del></p>



<p>After popular demand, the complete source is available here:  <br><a href="https://github.com/AndersBNielsen/pms150c-projects">https://github.com/AndersBNielsen/pms150c-projects</a> </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>byte        red, green, blue; //Could save these three RAM bytes by using the rgb EWORD directly ( rgb$0, rgb$1, rgb$2)</p><p>EWORD        rgb;</p><p>word        pixels; //Only has to be a word if number of pixels &gt; 255<br> define definedPIXELS 300;</p><p>send1 MACRO<br>         SET1 LED;<br>         .DELAY 5; //Around 0.85uS<br>         $ LED low; //Same as SET0 LED;<br>     //  .DELAY 1; //Going around is enough delay 1.25uS in total<br> ENDM</p><p><br> send0 MACRO<br>         SET1 LED;<br>         .DELAY 2; //Around 0.40uS<br>         $ LED low;<br>         .DELAY 2; //With the loop around 0.85uS<br> ENDM</p><p><br> void SendRGB (void) {<br>     DISGINT; //Let&#8217;s not get interrupted</p><p><br> <code>.FOR bitno, &lt;23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0&gt; //Regular for() loop doesn't work, but at least the compiler can do the hard work </code></p><p></p><p><code>if (rgb.bitno == 0) {</code></p><p><code>         send0;</code></p><p><code>     } else {</code></p><p><code>         send1;</code></p><p><code>     } </code></p><p><code>.ENDM </code></p><p><code>ENGINT;</code><br> }</p><p><br> void show (void) {<br>     rgb$0 = blue; //I lost track of MSB, LSB and endians.. This is what works. <br>     rgb$1 = red;<br>     rgb$2 = green;<br>     SendRGB();<br> }</p><p><br> void clearLED (void) {<br> rgb = 0;<br> pixels = definedPIXELS;<br>  do {<br> SendRGB();<br> } while (&#8211;pixels);<br> .delay 2000; //If you want to make sure the LED-reset is caught, use a longer one. <br> }        </p></blockquote>



<h3 class="wp-block-heading">So.. Why would I choose this instead of a major brand MCU?</h3>



<p>Obviously, the major selling point of this microcontroller is the price. At 3 cents each it&#8217;s ten times cheaper than the Pic equivalent(at 3000 MOQ) &#8211; the pic10f200(34 cents) or the ATTiny10(28 cents @ 4500 MOQ). //Digikey<br>Also, the customer service is far from bad &#8211; I got an email reply from Padauk within 12 hours. <br>The downside for the PMS150c is the OTP nature, the limited instruction set, and the sometimes curious and seemingly random IDE documentation &#8211; only partially translated into English. (Getting better with every release though from 0.84 to 0.86)<br>If you&#8217;re thinking about making a toy with an ATTiny10 in it and it doesn&#8217;t need to do a lot of heavy math &#8211; this might be able to do the same job for a tenth of the cost. That doesn&#8217;t mean I would be happy to see it in a pacemaker.</p>



<h3 class="wp-block-heading"> What else can it do?</h3>



<p>My guess is: More than you&#8217;d think. I have a feeling my next project might involve controlling the <del>nrf24L01+ </del> SI24R01 2.4Ghz radio module or maybe a budget Raspberry Pi module.<br><br>Either way, please tell me what you think, point out my mistakes and let me know in a comment what you&#8217;d like to see me do with this thing in the future. </p>



<ul class="wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0095-1024x683.jpg" alt="" data-id="193" data-link="https://abnielsen.com/20190422_0095/" class="wp-image-193" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0095-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0095-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0095-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C &#8211; top view<br></figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0083-1024x576.jpg" alt="" data-id="192" data-link="https://abnielsen.com/20190422_0083/" class="wp-image-192" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0083-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0083-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0083-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-1024x683.jpg" alt="" data-id="194" data-link="https://abnielsen.com/20190422_0089/" class="wp-image-194" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0089-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0073-1024x683.jpg" alt="" data-id="191" data-link="https://abnielsen.com/20190422_0073/" class="wp-image-191" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0073-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0073-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0073-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C<br>Don&#8217;t I have a nice table?<br></figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0037-1024x683.jpg" alt="" data-id="185" data-link="https://abnielsen.com/20190422_0037/" class="wp-image-185" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0037-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0037-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0037-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0043-1024x576.jpg" alt="" data-id="186" data-link="https://abnielsen.com/20190422_0043/" class="wp-image-186" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0043-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0043-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0043-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C<br>Pretty lights eh?</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0048-1024x576.jpg" alt="" data-id="187" data-link="https://abnielsen.com/20190422_0048/" class="wp-image-187" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0048-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0048-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0048-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C breadboard layout</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0051-1024x683.jpg" alt="" data-id="188" data-link="https://abnielsen.com/20190422_0051/" class="wp-image-188" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0051-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0051-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0051-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0063-1024x683.jpg" alt="" data-id="189" data-link="https://abnielsen.com/20190422_0063/" class="wp-image-189" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0063-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0063-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0063-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-1024x683.jpg" alt="" data-id="190" data-link="https://abnielsen.com/20190422_0071/" class="wp-image-190" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0071-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0034-1024x683.jpg" alt="" data-id="184" data-link="https://abnielsen.com/20190422_0034/" class="wp-image-184" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0034-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0034-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0034-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="683" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0027-1024x683.jpg" alt="" data-id="183" data-link="https://abnielsen.com/20190422_0027/" class="wp-image-183" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0027-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0027-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0027-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0020-1024x576.jpg" alt="" data-id="182" data-link="https://abnielsen.com/20190422_0020/" class="wp-image-182" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0020-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0020-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0020-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0017-1024x576.jpg" alt="" data-id="181" data-link="https://abnielsen.com/20190422_0017/" class="wp-image-181" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0017-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0017-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0017-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-1024x576.jpg" alt="" data-id="180" data-link="https://abnielsen.com/20190422_0010/" class="wp-image-180" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0010-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="576" src="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0008-1024x576.jpg" alt="" data-id="179" data-link="https://abnielsen.com/20190422_0008/" class="wp-image-179" srcset="https://abnielsen.com/wp-content/uploads/2019/04/20190422_0008-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0008-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2019/04/20190422_0008-768x432.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>PMS150C<br>Much shiny!<br></figcaption></figure></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2019/04/24/driving-300-ws2812b-rgb-leds-with-a-3-cent-microcontroller-pms150c/feed/</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
		<item>
		<title>Business card ATTiny84 USBasp programmer!</title>
		<link>https://abnielsen.com/2018/11/20/business-card-attiny84-usbasp-programmer/</link>
					<comments>https://abnielsen.com/2018/11/20/business-card-attiny84-usbasp-programmer/#comments</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Tue, 20 Nov 2018 15:56:13 +0000</pubDate>
				<category><![CDATA[ATTiny]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ATTiny84]]></category>
		<category><![CDATA[TPI]]></category>
		<category><![CDATA[usbasp]]></category>
		<category><![CDATA[vusb]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=94</guid>

					<description><![CDATA[I like my chinese USBasp clone very much. It&#8217;s got a semi dodgy USB-connector, it&#8217;s a little bit dusty and it doesn&#8217;t didn&#8217;t even have the &#8220;new&#8221; 2011-firmware, but I [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I like my chinese USBasp clone very much. It&#8217;s got a semi dodgy USB-connector, it&#8217;s a little bit dusty and it <s>doesn&#8217;t</s> didn&#8217;t even have the &#8220;new&#8221; 2011-firmware, but I still like it. But what if it died? What would take it&#8217;s place? <a href="https://abnielsen.com/2018/10/02/business-card-rf24-ws2812b-attiny84-usb/">My business card</a> of course!</p>
<p>Of course there&#8217;s the minor problem that USBasp is designed for ATMega8/88 and to run at 12mhz but since <a href="https://github.com/cpldcpu/USBasp-t">it can run on an ATTiny85</a> I figured it couldn&#8217;t be that hard to port it to the ATTiny84, since both my business card and USBasp uses <a href="https://www.obdev.at/products/vusb/">vUSB</a>.</p>
<p>Turns out: It wasn&#8217;t bad at all. And in case my USBasp dies some day, my bizcard is now self replicating.</p>
<p>So. If you&#8217;re missing a programmer for ISP or TPI and you only have an ATTiny84 lying around, the code I <a href="https://github.com/AndersBNielsen/USBasp-t">just put on github</a> should do the trick.</p>
<p>The downside, compared to my USBasp clone, is that it doesn&#8217;t support 3.3V, but the upside is that it&#8217;s actually more handy because of the micro usb connector, so I no longer need a USB extender cable or long jumper wires. And of course the BOM is hardly more expensive than the price of a chinese USBasp clone.</p>
<p>Also &#8211; I used it to finally upgrade the firmware on my old USBasp clone so that it now supports TPI. Expect to see some projects featuring the ATTiny10 soon <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Have anything to say? Please leave a comment.</p>
<p><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0055.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-137 size-large" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0055-1024x633.jpg" alt="" width="640" height="396" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0055-1024x633.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0055-300x185.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0055-768x475.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
<p><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0070.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-122 size-large" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0070-1024x633.jpg" alt="" width="640" height="396" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0070-1024x633.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0070-300x185.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0070-768x475.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0027.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-165 size-large" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0027-1024x683.jpg" alt="" width="640" height="427" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0027-1024x683.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0027-300x200.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0027-768x512.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
<p><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0024.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-168 size-large" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0024-1024x768.jpg" alt="" width="640" height="480" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0024-1024x768.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0024-300x225.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0024-768x576.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0021.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-171 size-large" title="Programming one bizcard with another" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0021-1024x768.jpg" alt="" width="640" height="480" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0021-1024x768.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0021-300x225.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0021-768x576.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0015.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-101 size-large" title="Pogo pin programming tool" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0015-1024x576.jpg" alt="" width="640" height="360" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0015-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0015-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0015-768x432.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a><a href="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0011.jpg"><img loading="lazy" decoding="async" class="hunnar alignleft wp-image-105 size-large" title="ATTiny84 bizcard and pogo pin 2.54mm pitch programming adapter" src="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0011-1024x576.jpg" alt="" width="640" height="360" srcset="https://abnielsen.com/wp-content/uploads/2018/11/20181114_0011-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0011-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/11/20181114_0011-768x432.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2018/11/20/business-card-attiny84-usbasp-programmer/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>PCB&#8217;s: CNC DIY or China express?</title>
		<link>https://abnielsen.com/2018/10/06/pcbs-cnc-diy-or-china-express/</link>
					<comments>https://abnielsen.com/2018/10/06/pcbs-cnc-diy-or-china-express/#respond</comments>
		
		<dc:creator><![CDATA[Anders]]></dc:creator>
		<pubDate>Sat, 06 Oct 2018 12:50:03 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[pcb design]]></category>
		<category><![CDATA[WS2812b]]></category>
		<guid isPermaLink="false">https://abnielsen.com/?p=83</guid>

					<description><![CDATA[Around three years ago I made a couple of these WS2812b &#8220;bulbs&#8221; for my hallway. I had a CNC and thought it couldn&#8217;t be that hard to etch out some [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Around three years ago I made a couple of these WS2812b &#8220;bulbs&#8221; for my hallway. I had a CNC and thought it couldn&#8217;t be that hard to etch out some traces. It could. I had so many failures because of leveling issues and pieces of copper getting stuck where they shouldn&#8217;t. On the positive side though &#8211; they all worked flawlessly for three years. I think they took about an hour to make on average.</p>
<p>What I meant to say was: Don&#8217;t waste your time. I could&#8217;ve had these made for 50 cents each but instead I wasted my time. Lesson learned <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://abnielsen.com/wp-content/uploads/2018/10/20181001_0140.jpg"><img loading="lazy" decoding="async" class="alignleft size-large wp-image-13" src="https://abnielsen.com/wp-content/uploads/2018/10/20181001_0140-1024x576.jpg" alt="" width="640" height="360" srcset="https://abnielsen.com/wp-content/uploads/2018/10/20181001_0140-1024x576.jpg 1024w, https://abnielsen.com/wp-content/uploads/2018/10/20181001_0140-300x169.jpg 300w, https://abnielsen.com/wp-content/uploads/2018/10/20181001_0140-768x432.jpg 768w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://abnielsen.com/2018/10/06/pcbs-cnc-diy-or-china-express/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
