Jon Thomasson's Build Log


I’ve used built in SD card modules in the past (using things like the Quartus system builder thingy). Sounds like you’re on the right path, I like that you have an intermediate step here to get it decoupled from the desktop. Keep it up!


Thanks Chris for the encouragement. Your comment about having intermediate steps reminds me of the movie What About Bob. I’m not sure if you’ve seen the movie, but in it a psychiatrist Dr. Leo Marvin (Richard Dreyfuss) tries to help a new patient Bob Wiley (Bill Murray), who suffers from a host of phobias. Dr. Marvin prescibes his newly released book entitled “Baby Steps” to Bob in hopes that it’ll help him with his problems. Of course, as the name suggests, the book aims to help patients find relief from their troubles by giving them a series of small bite sized goals (baby steps) on their road to recovery. I have found the same approach to be helpful with both software and now hardware design. The end goal is to have a finished thing that works, but getting to that goal you can have a series of smaller goals that you can accomplish along the way. So for example with this current NES project, the small goals might include 1.) getting VGA to work 2.) adding the TFT LCD 3.) adding the controller 4.) adding the menu …etc. Anyway, all that to say, it’s a great movie if you haven’t seen it. :grinning:


I love that movie! One of the classics :slight_smile:


After recovering from turkey coma’s and holiday festivities, I managed to do a bit of soldering recently. I had the need for a LIR2032 coin cell charger to power a few projects. Unfortunately (or fortunately depending on how you look at it) , the charger I had ordered off Amazon didn’t work, so I decided to build my own. I took the guts of the Solder Sniffer 9000 project, which consisted of a MCP73831 for the charge controller, and modified it a bit to charge an LIR2032.

The main change needed was the value of R3, which is responsible for setting the max charge current. For the LIR2032, the max charge current is 35mA. By using the supplied formula in the MCP73831 datasheet (I = 1000V/R) I was able to find that a 28K resistor would give me the charge current needed.

To get a decent connection to the USB socket, I tinned each of the pads a bit.

Here’s a picture of it in action.


Nicely done! Good use of the form factor too.


I had the opportunity to solder up another board recently. I’ve been wanting to play around with OLED displays for a bit, and was looking to buy a breakout board. I found this 1.5" 128x128 color OLED board on Adafruit that looked promising, however it didn’t provide access to the parallel interface pins of the SSD1351 driver. In order to drive the display at a high frame rate I wanted to connect to the parallel interface of the OLED, so I decided to make my own board.

I started searching around to see if I could find another similarly sized OLED display with the SSD1351 driver. I ended up finding this one from Looking at the datasheet, it seemed basically identical to the OLED on Adafruit, so I decided to buy one to test it out.

I used the schematics of the Adafruit board as a jumping off point, but made a few changes. I took out the SD card holder, since I didn’t really need that functionality. I took out the 3.3v regulator and level shifter, since I wanted to power the board directly with 3.3v. I broke out all of the control pins to a header where they could easily be plugged into a breadboard for prototyping. I left in the FAN5331SX boost converter which boosts the 3.3v to the 13v that the OLED requires.

Here’s the finished schematic:

After soldering the board together, to test basic functionality, I wired BS0 and BS1 to ground to enable 4 wire SPI and used the Adafruit SSD1351 library loaded with the test example.


Nice job. I have not quite reached the OLED stage. I hope to get on to OLEDs sometime soon.


Thanks Steve. It’ll be fun to see what’s possible with these in the future.


I’m glad I looked through your old posts because I was looking to build a fume extractor and it looks like your Solder Sniffer would be a great little project. I also wanted something that would run on a spare 18650 that I have laying around. Thanks for adding all the info on GitHub and may post questions in the future when I get around to ordering the parts. I believe I also have a spare 120mm fan so will probably just use a prototype board or create a new PCB.


Thanks @BlakeL! The Solder Sniffer is by far my most used project. If you were thinking of ordering boards to build one, I can just send you one of my extra boards since my original shipment came with 10. Just a fair bit of warning - depending on your comfort level with soldering SMD components, there may be one or two components that are a bit challenging, like the SOT23 and MicroUSB. I wasn’t sure there would be that much interest in this project, but now that I know there is, I may revise it a bit to make it a little easier to solder. I know for starters I could extend the pads out a bit on the components to get a little more wiggle room for the iron.


Thanks, that would be very helpful. I can message you my address. The board can probably be adapted to a 120mm fan or if I put it inside a wooden enclosure, I could mount the board inside. The SMD parts I know will be difficult but I’ve watched quite a few videos and all I think I need is to buy some flux.


I cleared off enough room on the workbench to do some more testing on my spartan mini fpga board with the end goal of completing this handheld NES project. Of course to be truly portable, I didn’t want to have to reprogram the NES core into the FPGA each time I wanted to play a game. It would be nice to persist the FPGA configuration off to the external SPI flash attached to the Spartan 6, and have it load in that configuration automatically when it starts up.

Here’s the pertinent part of the spartan mini schematic, showing the connections to the SPI flash:

The spartan 6 provides a way to read configuration data from an attached SPI flash. The Xilinx Impact software is used to program the SPI flash via an indirect programming method. This all seemed pretty simple and straightforward, at least on paper. But my friend Murphy likes to show up and tell me that I can mess up even the simplest of things.

After squandering what seemed like countless hours of my life, messing around with the Impact software, I was getting nowhere. I was getting the error message “spi device not found, id check failed”. That’s odd I thought, I see it right there in front of me, why can’t it find it? I ignored everything Chris had taught about whipping out the logic analyzer and checking the signals on the board. My every failed instinct seemed to take me further down the rabbit hole. I went to the schematic to see if maybe I had set the wrong mode configuration on the fpga. Then I went to check the schematic for the flash, to make sure it looked ok. I looked for clues from the manufacturer datasheet on what I was doing wrong.

Finally, when I had exhausted every last possible resource I could think of, I fished out the logic analyzer from the garage storage and clamped some probes onto the circuit :). I hooked up the probes to the chip select, data, and clock lines. To my astonishment, not a whole lot was going on. The clock was cycling a few times, but no other communication was really happening. This prompted me to start probing with the multi meter. The voice of Dave Jones echoed in my head “Thou shalt check voltages”. After confirming the voltages looked ok, I started checking for continuity between the various spi pins to the fpga. It was at this step that I found that there was no continuity between the chip select pin on the flash and the fpga. Aha! Finally I was getting somewhere. Looking at the schematic I saw that there was a 0 ohm resistor(R18) in series with the chip select pin, so I checked for continuity to it, but got nothing. Thinking it may be just a bad solder joint, I was about to grab the iron to re-flow the solder, when the multi meter probe glanced off of R20, a 10k pull-up resistor, and to my surprise I got a chirp indicating that there was continuity between that and the chip select. I pulled up the board file for these 2 resistors to see what was happening.

When I selected R18 in pcbnew, the problem became obvious. The R18 and R20 reference designators were swapped. So instead of soldering in a 0 ohm resistor on R18, I had seen the misplaced reference and placed a 10K resistor in its place. Mystery solved! After switching the resistor values, I fired Impact up, and was able to save the configuration off to the spi flash without a hitch. I guess there’s a few lessons I want to take away from this whole experience. First, make sure to pay extra attention when placing those references, that they’re next to the right component. And second, don’t wait so long to reach for the trusty logic analyzer or oscilloscope when problems arise. This may be one of the classic “trap for young players” that Dave mentions on occasion.


Spent some more time soldering the final handheld NES project. Just like in routing PCB traces, the majority of the time seems to be in getting the placement of the components just right. For this particular project it wasn’t too bad. My main concern was just aligning the components so that they wouldn’t hinder the connection between the FPGA board and the proto shield. I wired in a Parallax Propeller Mini board to save on space. Here’s what the finished placement looks like:

I cut a small slot for the lcd cable to enter through the board and connect to the led driver. I ended up desoldering the screw terminals from the audio amp board in order to save room for the usb plug.

The only connections missing now are the speaker, sd card, and joypad buttons. The plan right now is to mount this to a larger board where i’ll have a bit more room to work with.


I finished up the Spartan Mini NES project today. This is a project developed around my Spartan 6 FPGA development project. The end goal of this project was to learn Verilog and FPGA design, while also creating a handheld NES gamepad. I left off last time with the wiring done to the perfboard shield that connects to the FPGA board. Since there wasn’t enough room on that board to place the display and all the buttons I decided to bolt the shield to a larger perfboard that would fit all the components needed. I ran some measurements on the largest perfboard I had and mounted the shield to the board.

From there I wired up the joypad buttons, the SD card, speaker, and the Prop Plug connector for flashing the propeller board. For the speaker I bought one of these PCB mount varieties from Adafruit.

For the power supply I used 4 AA batteries wired in series and plugged directly into the barrel jack on the Spartan Mini board. I found that by placing the battery packs on the outer edge of the board, they could double as handle grips. I used velcro to hold down both the display as well as the battery holders. I did this in the hopes that it would be easier to modify or repair the board if it was needed in the future.

Here’s the finished project.

I’m going to swap out the Alkaline batteries for some NiMH 2100mAh rechargeable batteries. The total current drain of this project as measured by my power supply was around 400mA, so hopefully that should give me around 5 hours or so of operation before recharge. All in all I’m happy with how this project turned out. It was a lot of fun diving into FPGA’s and being challenged by aspects of electronics that I hadn’t encountered before.



This looks great! Nice work. Hey, I wonder if you could use 2 x 18650 batteries. They would be around 3000mah each and 3.7V nominal each. They should take up less space too.


Any chance you have more of those Solder Sniffer boards left? I really need a fan for soldering, and this seems more fun than buying one…


Thanks @hedrickbt! That’s a great idea with the 18650 batteries. I could stick 2 of those in parallel and get even longer run times. Maybe I’ll add those in a future revision!


@jgalak, Unfortunately I’m all out of the Solder Sniffer boards. I wasn’t expecting them to be so popular. I’ll let you know if I get more of them.


No worries, I can make some up easy enough.


I’ve been meaning to play around with RF circuits for awhile now, but always felt a bit intimidated. However, I recently watched an amazing talk by Michael Ossmann which inspired me to give a simple RF transceiver circuit a try. My immediate goal is to see if I can build a working RF transceiver. If that goal succeeds then I’d like to see if I could take it a bit further and make a digital voice handheld transceiver or possibly something like a video transmitter for an RC plane. For those interested, here’s a link to the talk.

Mr. Ossmann gives 5 simple rules to follow for RF design. These are the rules he recommends if you want to delve into RF pcb design without having to buy expensive test gear and read mountains of books:

  1. Use 4 layers.
  2. Use integrated components.
  3. Use 50 ohms everywhere.
  4. Follow manufacturer recommendations.
  5. Route RF first.

The first rule, use 4 layers, is fairly self explanatory. By having 4 layers, it’s possible to have a stack up with a dedicated ground and power plane and a separate layer for RF signals. Here’s the recommended stack up mentioned in the video:
---------------------RF signals

The second rule is to use integrated components. The idea here is to use chips that have the RF magic baked in wherever possible. For my project I opted to use a Semtech SX1238 transceiver. I discovered this chip through the digikey parametric search. Some feature’s I like about this particular transceiver is obviously it’s got an RF transmitter/receiver built in, 50 ohms output, good documentation, a built in power amplifier on the transmit(up to 27dB) as well as a low noise amplifier on the receive end. This particular transmitter has a frequency range between 868MHz and 915MHz in the ISM band.

The third rule speaks about using 50 ohms everywhere, which refers to impedance matching. So ideally you’d have 50 ohm outputs and 50 ohm transmission lines etc. In the video Mr. Ossmann uses Oshpark’s 4 layer stack up and an online pcb calculator to determine the trace width needed for 50 ohms impedance. I was planning on using Oshpark anyway, so I used the same numbers he used for his calculation. Here’s the link to Oshpark’s 4 layer board specs. By plugging in the pertinent numbers from the Oshpark website to the pcb calc we find out that in order to get a 50 ohm microstrip we need a 12 mil trace.

Rule number four states that we should follow the manufacturer recommendations. Of course, this is usually a good idea. For this rule I looked at the datasheet for the SX1238 and copied over the recommended schematic and components for the transceiver. Here’s my finished schematic:

The fifth and final rule is to route RF first. The idea is to optimize the top layer of the PCB for RF. Michael Ossmann specifies that in general for this rule, you should keep traces short and direct and keep other signals away from RF. For this rule I tried to keep the RF specific traces on the top layer and route the other traces on the bottom layer. This went pretty well, although the giant ground pad underneath the SX1238 made it difficult at times to route traces close to the component. One other problem I ran into was attaching the ground traces from the transceiver to the giant ground pad. At first I had one large pad specified in the footprint for the transceiver. But the problem with this was pcbnew wouldn’t let me route the traces out to the pad. I ended up just breaking up the pad into smaller pads and squishing them all together as can be seen below. This allowed me to route the ground traces without a hitch.

Here’s the finished routed board:

And finally, the 3d money shots. I added an optional shield over the RF components. I saw the “Designed with Kicad” graphic used by @ChrisGammell and @Steve_Mayze and really liked it, so I stuck it in a boring part of the board to give it some zest.