Jon Thomasson's Build Log


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.


That board (and that render!) look fantastic!

Is that a custom shield/can on top?

Also I assume from the part number you’re jumping into the LoRa world!


Thanks Chris! The shield is an off the shelf variety from Wurth Electronics. It has two parts, the frame and the cover. One feature I liked about this shield is that the outer cover can be removed if necessary to gain access to the RF components underneath. It was also one of the only shields I could find with decent documentation and test results matching the frequency and power rating of my transceiver.

Although this transceiver is made by Semtech who produces the LoRa transceivers, I opted to not use a LoRa transceiver for this project. One of the main reasons for this was I wanted a transceiver with a higher data rate for possibly sending digital voice or video. If this works out though, I have a few project ideas for where I could use LoRa in the future.

If anyone is interested, here is a link to the github repo for this project.


Very cool! I’ve never designed in a shield before, though i’m sure some of my designs could have benefitted from one :smiley:

It’s like making a quiet little room for your sensitive electronics!


Is the 3D render from KiCad? If so, how did you model the shield?


Yep, the 3D render is all done in Kicad. A lot of times the distributor will have CAD files that go along with the component. For example on Digikey they had the .step file available from the shield page where I could just click on it and download it.

You can also use the parametric search on Digikey to search for components that have CAD or EDA models. Sometimes if I have 2 components that have all the same specs/price, but one has access to the 3D model, I’ll choose the one with the model so I can use it in the PCB.
enter image description here

If the distributor doesn’t have them, a lot of times the product manufacturer will have something available on their website. Or you can also download models from online repositories like or

Once you have the model file, you can attach it to a footprint in Kicad by opening up the Footprint Editor for the component and navigate to Edit-> Edit Properties. Then click Add 3D Shape in the 3D Settings tab to add the model you downloaded.

You may need to adjust some of the rotation/offset parameters to get the model to line up on your footprint. Then to view the model on the finished pcb, in pcbnew you would go to View->3D Viewer (or Alt+3). By default the viewer is set to render with OpenGL, but to get the really sharp, detailed renders I use Raytracing. To set Raytracing go to Preferences->Render Engine and select Raytracing.


Cool, thanks! I didn’t realize that sort of model was available through digikey.


Trace Parts Online also has a lot of parts. Not sure how many electrical parts they would have, but they do have a lot of connectors/plates/etc.

Digikey is certainly adding more, which is a great idea. Used them while I was doing a simple rebuild/redesign of a board for a customer and it was nice to check the connector fit to a front panel with step exports :slight_smile:


I was able to make a little bit of progress on the SX1238 rf transceiver module recently. I have to admit that I was nervous just thinking about hand soldering these boards, given the close proximity of several small 0402 components and the large ground pad under the transceiver chip. For this reason I thought it would be a good time to try out a solder paste stencil. After seeing how well @Steve_Mayze’s boost regulator project turned out I decided to give oshstencils a test run.

Since I hadn’t done a stencil before, there was a bit of a learning curve. I found some resources that helped me get started. The first was this page from rheingold heavy which introduced some of the parameters needed, such as the solder paste clearance, to get the gerber files ready to send to oshstencil. The second resource was from this forum post by @ChrisGammell on the forums. Specifically this picture helped me visualize how the pad mask parameters in Kicad worked :slight_smile: :
enter image description here

The first step for me was to determine which pads on the PCB required a stencil. At first I was thinking about just including all the SMD components. But after giving it some more thought I opted to leave out the SMA connector and shield, since I wanted to be able to test the circuit out first before sealing it in its metal house. And the SMA connector would require some hand soldering to get a good connection.

Now that I knew which SMD pads I wanted to exclude from the stencil, I took those pads out of the stencil by unchecking the F. Paste layer (the front solder paste layer) from the Technical Layers area of the Footprint Editor. This disassociates the pad from the front solder paste layer. It looks like F. Paste is checked by default whenever you create a new SMD pad.

The next thing I learned was that there should be a little bit of clearance between the solder paste and the edge of the pad. This clearance is aptly named “Solder Paste Clearance” and is illustrated on the picture above. This property can be adjusted on a per pad level on the pad properties page, or on a global level. To set the clearance for the entire PCB you navigate to Dimensions -> Pads Mask Clearance from the Pcbnew screen.


On the Pads Mask Clearance screen, there are 2 options for adjusting the solder paste clearance. You can either choose to set the clearance a fixed amount from the edge of the pad, or you can set the clearance to be a ratio based on the size of the pad. I chose to give the clearance a ratio of -5%. After adjusting these properties, the only thing left to do was to generate the gerber files which will be sent to oshstencils. When you go to generate the gerbers, you only need to select the solder paste layer as well as the edge cuts layer, since those are the layers that oshstencils care about.

I was surprised at how quickly I received the stencil back. It seemed like it only took 2-3 days from the time of order to having the stencil in my hand! Besides the stencil, I also ordered a little jig to hold the stencil in position while applying the paste. I found out you can also just use unpopulated PCB’s to fashion your own jig. Here’s a pic of what I came up with:

Once the jig and PCB are in place, you lay the stencil over the PCB until all the pads match up and are visible through the appropriate cutouts of the stencil. Then you tape the stencil down on one side.

From here, my pictures were a little too blurry to share, but I basically followed the same procedure for applying the paste presented in this Sparkfun video. The important thing I learned from all of this was to make sure to clean up the solder paste from the stencil and anything else you want to keep right away. Otherwise it really gets tough to clean up, and it manages to get everywhere!

To reflow the solder paste after I had placed the components I simply used a hot air rework gun. I did have some solder bridges around one of the transceiver chips, but nothing a little drag soldering couldn’t fix. Here’s the finished boards (with a quarter for size reference):

Edit: I noticed that the image for this post went missing. So I uploaded it again.


Just as a fun little aside, I was completely fascinated by the tiny 0402 sized inductors for the RF transceiver. If you look close enough on the board you can kinda see little windings of copper wire. So I thought it would be fun to borrow my daughters microscope and get a closer look at one.

This is blown up about 40x magnification. This one obviously isn’t connected to the board. It’s on its side in this picture. You can see the copper wire bonded to the pads on either end. And some kind of translucent blue goop covering the top. I don’t know, I just thought it was cool. :slight_smile:

Edit: I noticed that the image for this post went missing. So I uploaded it again.


The RF transceiver boards passed the initial magic smoke test. I brought the boards up with a current controlled power supply and to my surprise no magic smoke escaped! After that I wired up the SPI bus to an 3.3v Arduino pro mini to see if I could communicate with the transceiver.

I wrote a simple sketch that reads/writes to various registers. The idea here is that if the SPI bus isn’t working, it’s pointless to do any further testing until that can get sorted out. The sketch simply reads the register data to a serial console so I can check it with the default parameters of the datasheet. Here’s the results from the SPI testing:

It looks like the register values match! Cool, so onto transmitter testing next…


Awesome! Are you going to borrow from the Radiohead library? I’ve used that in the past for LoRa stuff. I’m a bit of two minds about it. I feel like having a feel for the registers is very important…but I’m also very lazy :smiley:


Thanks Chris! There doesn’t seem to be a library currently available that’s tailored specifically for the transceiver that I’m using (the SX1238). Although I have been working on adapting code from this library from low power lab.

The low power lab library is built around the SX1231 transceiver, but it seems to be very similar to the SX1238. The main difference is the SX1238 has an extra LNA on the receive and an extra power amp on the transmit. They do share a lot of the same registers, but most of them have different addresses, and a few registers have been added or removed.

I do agree though, ideally I would use a prebuilt library for something like this. The low power lab library I think will give me a lot of what I need. And the rest will be a bit of a treasure hunt. It does feel like I’m in a bit of uncharted territory, which is both exciting and terrifying at the same time. :slight_smile:


Ah, didn’t realize the Radiohead library was for the SX12xx family of parts. Cool, well keep us updated on how it goes! Hopefully it’s well documented on the chip side of things.