![]() |
PowerBook G4 running TinyStories 110M Llama2 LLM inference |
Monday, March 24, 2025
Thinking Different, Thinking Slowly: LLMs on a PowerPC Mac
Friday, September 23, 2022
12V: Ryobi 40V Lithium Battery Charger
I have been impressed with Ryobi's 40V battery packs lately. They are fairly energy dense and compatible with a wicked 1800W inverter/power station that I have. Internally they are a 10S lithium pack with some number of cells in parallel depending on the pack capacity. They use the safer flame proof cells and have a sophisticated BMS built-in so I feel pretty comfortable messing with them. They can also be obtained at steep discounts if you are willing to tolerate used packs from eBay. In my experience, they test out fine.
I came to the realization that it would be handy to be able to charge these batteries in the car. I drive electric vehicles and in the event of a power failure, these packs could easily be charged up numerous times. Ryobi doesn't make a 12V-compatible charger for this line of batteries so I took matters into my own hands.
![]() |
12V Compatible Ryobi 40V Battery Charger |
This charger uses an adjustable constant-current/constant-voltage (CC-CV) power supply that steps the 13.8-14.4V that my car provides up to the 42V needed to charge the batteries. I tore apart the OEM chargers that Ryobi provides and found that the weakest link is a blocking diode rated for 3A. The OEM charge adapter ordinarily operates at 1.5A from a wall-powered CC-CV supply. I configured my DC-DC converters to operate at a peak voltage of 42V with 2.75A of current, just shy of the limit of the blocking diode. So far, all has been working well. There is a slight increase in temperature of the case plastics of the charger, but nothing outside of my own personal comfort zone.
![]() |
Ryobi 40V Batteries Charging in the Car :] |
![]() |
Ryobi 40V Car Charger Assembly |
![]() |
XT60 Backshell Custom Design |
![]() |
Finished Assembly |
Sunday, March 14, 2021
QRTape | Audio Playback from Paper Tape with Computer Vision
![]() |
QRTape |
Monday, November 30, 2020
nrfnet: Streaming Video over nRF24L01
A couple of days ago I published a blog discussing how I used NRF24L01 radios to implement a point-to-point network between two Raspberry Pi computers. I implemented this as a virtual network device and sent packets between the radios.
Since then, I have made numerous improvements to the software and more than tripled the throughput from ~90kbps to nearly 300kbps. These improvements were through a variety of changes that I will cover in this blog post.
![]() |
Streaming video from one headless Raspberry Pi to another |
Thanks to the higher throughput, I was able to implement streaming video using the h264 HEVC video codec and monaural audio using the Opus codec at 32kbps. The result is great, especially when considering the link.
Continue reading to learn more!
Friday, November 27, 2020
nerfnet: Wireless Networking over nRF24L01 2.4GHz Radios
I recently picked up a set of nRF 2.4GHz radio transceivers. These are low-cost radios with a SPI interface that allow exchanging 32 byte packets across a radio link that can run at up to 2MBit on-air data rates. They are popular among hobbyists who want to introduce wireless to their Arduino-flavored projects. I was able to buy ten of these radios with trace antennas for just $11 and three more with SMA-connected antennas for $18.
![]() |
NRF24L01 Radios |
My first inclination is to try something a bit more extreme with this hardware. There is a GitHub project named RF24Audio that allows transmitting audio data over these radios. I wondered if video could be possible and started brainstorming about how a video transport over this link would look. The further I got into the specifics of streaming video the more convinced I was that an abstract link that could carry any form of data would be more fun.
This led me to build nerfnet: a simple application that allows sending network frames over NRF24L01 radios. This is implemented by exploiting the TUN/TAP virtual network device API under Linux on a Raspberry Pi. The code is available on GitHub for you to review and use.
I was able to demonstrate nearly 90kBit throughput as measured by iperf. I suspect this is the first time that iperf has been used to characterize a link composed of these radios.
1 2 3 4 5 6 7 8 | andrew@andrew-pi:~/Projects/nerfnet $ iperf -c 192.168.10.2 ------------------------------------------------------------ Client connecting to 192.168.10.2, TCP port 5001 TCP window size: 43.8 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.10.1 port 34490 connected with 192.168.10.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.1 sec 110 KBytes 89.4 Kbits/sec |
Continue reading or watch the video to learn more about how I pulled this off.
Friday, September 25, 2020
Plaid Model S Excitement
![]() |
The Resistor Network Plaid Model S :] |
Tuesday, July 28, 2020
Amateur Radio from 2900ft. on Mount Diablo | 146.520MHz FM Simplex
![]() |
View from Mount Diablo with Antenna on Trunk |
![]() |
First QSL Card Design: Lick Observatory |
Tuesday, February 12, 2019
datvideo: Storing Video on Digital Audio Tape (DAT)
![]() |
Big Buck Bunny from DAT Tape |
I wrote a small tool called datvideo that allows storing arbitrary binary data on the tape. This tool is used to grab raw audio binary data from a sound card, search for frames of binary data, decode them and emit them into another file. This can be assembled into a pipeline to feed video data into a player such as mplayer. How cool is that?
![]() |
Sony DTC-690, below Marantz Blu-Ray, AV Receiver and New-Old-Stock DAT Tapes |