Saturday, April 30, 2022

TurboLEDz Voice Changer.

I've released the 6th product under the TurboLEDz name. This time it is a voice changer. It makes you sound like a bad asss, by doing real time FFT, frequency manupulation and iFFT to go back to the time domain. It's built with an I2S mic and I2S DAC/Amplifier. To make the ╬╝controller capable of keeping up with the samples, I've programmed it as multi-threaded, dual core. So if one core is busy doing math, the other is still available to do IO. And the cores will tag-team. One core for the even numbered chunks, the other core for the odd numbered chunks. It works really well, as you can see in the video.

Sunday, April 24, 2022

Super Capacitors

I bought three super capacitors from Adafruit, model DDLE2R5LGN701KAA5S. They are rated at 700 Farad at 2.5V. (They have very little stock left, at time of writing, so if you want them too, act quickly!)

If I place them in series, I will end up with 233 Farad at the very maximum of 7.5V. However, charging to the max 7.5V is dangerous: one of the capacitors can easily overcharge and explode, that way. Unless you balance the capacitors.

Balancing a capacitor bank is not trivial. But there seems to be an alternative, as offered by Patrick of EngineeringShock.

Patrick's advice is to charge the capacitors to 80% of their nominal Voltage, so that even if there is a mismatch in internal resistance between the capacitors in series, none of them will overcharge. I like this approach, as it is simpler, does not require extra circuitry, at the cost of lost capacitance.

So if we charge a 7.5V bank to 80%, we get a charging voltage of 6 Volts. Let's make that our target. When we have have our bank charged to 6V, we can feed that into a voltage regulator, and as the bank drains to 3.3V, we should be able to ride from 6V to 3.3V and run a ╬╝controller off that, or some other low-power electronics.

And this leads me to my next objective: how to generate a steady 6V charging voltage? I would like to use solar panels for this. So let's dive into photovoltaics.

Reading the specification of a PV panel, there is the nominal voltage, which we can't really rely on. Then there is the Voc (Open Circuit Voltage) which we will measure if there is no current flowing. And also the Max Power Voltage, which is lower.

I need to read up on how to make sure that a photovoltaic panel output a steady 6V, and never any higher, at a tight tolerance. PV panels typically use charge controllers for that, but I want something simple. Maybe an opamp?


I am taking a different approach. I've decided to charge the capacitors in parallel, not in series, at a steady 2.5V.

To achieve this, I take input from a solar panel (with wildly varying voltage, and current) and convert that with a buck-converter to 2.5V that can be used to charge the capacitors.

I then use the capacitors as input for a boost-converter that brings a varying low voltage (It is only 2.5V when fully charged, and they discharge linearly) to a steady 3.3V. This I can then use in a client circuit, typically a ╬╝controller with some peripherals attached.

Wednesday, April 13, 2022

Lychee RV 86

Just for the heck of it, I am test-driving a RISCV Linux SBC called the Sipeed Lychee RV 86.

When I plugged it in, nothing happened. No console ouput on the USB tty, nothing on the screen. It turns out there is no software loaded on it: the flash memory slot is empty. So you need to provide your own storage, and own OS.

First attempt is with a "debian-minimal" install.

# dd if=debian-minimal-licheerv.img of=/dev/sdb bs=32K
134272+0 records in
134272+0 records out
4399824896 bytes (4.4 GB, 4.1 GiB) copied, 248.155 s, 17.7 MB/s

Those were the write speeds to my "Sandisk Extreme PLUS." Hmm... that does not seem to be an extreme speed, to me. It has a U3 designation. Oh well. UPDATE: Lexar x1000 was even worse: 15.7 MB/s and the write speed slows down, as you write more. Remind me never to buy Lexar SD cards again.

And it works! With the card inserted, I now get a login prompt on ttyUSB0 in 32 seconds. Not bad at all.

Somehow, it takes a long time for the Ethernet device to show up with ifconfig command? When it does, ifup usb0 is not working: ifup: unknown interface usb0

When I make usb0 interface known, the dhcp client will receive no offers, unfortunately. Despite the Ethernet light blinking, so there is network activity.


I have been able to work around the need for a proprietary MSWindows tool to use the Lichee RV disk images. With the OpenixCard tool, you can extract a normal image, that you can write with dd to an SDCARD.

$ file ~/Downloads/LicheeRV_Debian_86_480p.img   
/home/bram/Downloads/LicheeRV_Debian_86_480p.img: data
./OpenixCard -i ~/Downloads/LicheeRV_Debian_86_480p.img -d
$ file /home/bram/Downloads/LicheeRV_Debian_86_480p.img.dump.out/LicheeRV_Debian_86_480p.img 
/home/bram/Downloads/LicheeRV_Debian_86_480p.img.dump.out/LicheeRV_Debian_86_480p.img: DOS/MBR boot sector; partition 1 : ID=0xc, start-CHS (0x2,35,2), end-CHS (0x2,163,1), startsector 34336, 8064 sectors; partition 2 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x0,33,1), startsector 1, 2079 sectors
$ sudo dd if=/home/bram/Downloads/LicheeRV_Debian_86_480p.img.dump.out/LicheeRV_Debian_86_480p.img of=/dev/sdb bs=1M
8237+1 records in
8237+1 records out
8637726720 bytes (8.6 GB, 8.0 GiB) copied, 435.776 s, 19.8 MB/s


The Debian image works great. I removed all X11 stuff, and will just use fb0.

I noticed that eth0 mac address is randomized at each boot, so I had to create an entry in /etc/network/if-pre-up file:



if [ ! -x $IFCONFIG ]; then
        exit 0

if [ "$IFACE" = eth0 ]; then
        $IFCONFIG $IFACE hw ether XX:XX:XX:XX:XX:XX


To set the timezone: $ timedatectl set-timezone America/Vancouver

If not using wifi, it is probably a good idea to remove xr829 from /etc/modules file.

I have been removing a lot of packages, trying to get a minimal install. To aide this effort, I decided to graph the dependencies, to see which cuts I can make in the dependency chains.

Desk-side Stock Ticker by TurboLEDz.

TurboLEDz has released another product: the Desk-side Stock Ticker. It connects to WiFi with WPS, and automatically retrieves stock quotes from the Internet.

Saturday, March 19, 2022

Newest member of the TurboLEDz family: the CPU Odometer!

A CPU does not wear down with use like a car engine does. Hence, a car has an Odometer, and a CPU does not. I does not need one.

But, just because it doesn't need one, does not mean it cannot have one! I decided to make one. World.... please meet the TurboLEDz CPU Odometer.

It uses the turboledz daemon for Linux to keep track of the jiffies (centiseconds) that were spent computing, aggregated over all cores. If your computer is idling, it ticks very slowly. If your computer is pinning all cores at 100% it ticks up very fast. The odometer value is stored in between reboots on your system.

I am selling it on my tindie store.

Sunday, January 30, 2022


I'm doing my first exploration of BSD. After some struggles with the OpenBSD installer, I installed FreeBSD instead. Here as some findings.

You can install software from source in /usr/ports and to do that, you need the portsnap command to fetch the tree.

My 1280x768 monitor is used as a 640x480 console. I tried the following in /boot/loader.conf which did not work:


I tried to use hidraw using this in loader.conf which also did not work for me:


My 12th gen Intel machine cannot boot version 13 of BSD. Instead I need to use 14-CURRENT.

I could only get the installer for 14-CURRENT to run by installing a discrete Radeon GPU, which then let me set the BIOS option CSM enabled.

Friday, January 14, 2022


Game Studio Abraham Stolk Incorporated, has done a pivot. No games, for now, instead: consumer electronics.

Yep, I have refashioned myself as a electronics designer. And my new brand is TurboLEDz.

These devices will plug in your motherboard USB, and are to be mounted in your PC case. They will then display either the CPU load (Model88s) or the CPU Core Frequencies (Model810c) as a running graph.

You can buy them on my Tindie Store.