Jon Thomasson's Build Log


#41

Amazing how different search results can be for different keywords. I was searching for “active charcoal filters” and it just wasn’t giving me what I wanted. I didn’t think about searching for “solder fume filter” or anything like that.

PCBs are quite strong. I haven’t worried about bending or damaging them too much in a long time after I had to put together an old Intel CPU + Heatsink and the board was getting mega flexed. They can take a lot of beating up for sure.


#42

I have 7 more boards if anyone else wants one. I’m throwing in the resistors too since I bought those in bulk they’re basically nearly free to me. There may be some countries I can’t send them to, but I’ll definitely give it a try. I don’t mind paying for shipping since the boards are so tiny. I’m stationed in California for reference. Anyway, send me a PM with an address where to send it if you’re interested. I’ll just post back here if I run out at some point.


#43

Got most the parts today, minus the battery and the PCB. I’ve never noticed how aUSB micro connector is soldered. It’s quite intense. Not sure how I’m supposed to solder it.

Also I noticed that the pictures of your board aren’t present anymore @jonthomasson.

Looking forward to killing myself on the 0805 parts though :smiley:


#44

Wow, that’s great! My guess is the PCB should arrive either Wednesday or Thursday. With regards to the USB micro connector, yeah that’s pretty much the hardest thing to solder on that board. The good news though is that the only pertinent pins you need to solder are pins 1 and 5 since we’re only using the 5v and ground pins for powering the charge circuit. So the 3 pins in the middle shouldn’t matter if they get bridged etc. Then you can just solder in the through hole pins on each side to give it some structural support. There are 2 pads under the connector, but you don’t need to worry about those unless you have a hot air gun to heat the solder under the component.

That’s weird the pics are missing. If you want to check them out on my hackaday page you can: https://hackaday.io/project/24508-solder-sniffer-9000. All of the pics are there in addition there’s some 3d views and the pcb view. Let me know how it goes or if you run into any snags.


#45

A post was split to a new topic: Missing pictures from posts


#46

I re-uploaded my pics this morning for the Solder Sniffer. I’m not sure why they went missing.


#47

Finally got time to solder the board up! I haven’t done that small of parts before and man do they look horrible! :blush:

But I was able to get enough solder on the USB connector and on the U1 and U2 ICs. :slight_smile: I had one mistake where I bused a couple of the pins on U1 together and had to cut the bridge. Overall it went okay. I took a picture of where I got last night and then one of it completed. It works great!

Just need to clean up the filter’s edges and maybe tape them off? Also need to think about what to do with the leads of the fan. For now I’ll just wrap them around the fan as is.

On a side note, man that red LED is super bright!


#48

Awesome job! I’m glad you were able to get it all working. I really like the look of that fan too! For the filter I just trimmed it down with a pair of scissors. I didn’t think about taping the edges, but maybe that would keep the edges clean. For the wires, you can either just trim off the excess or I folded them up and stuffed them in the small area between the battery and the fan. It’s seriously cool to see someone else build one of these! You made my week! These things really come in handy. I had to do some work in the attic last week and I used it to keep cool.


#49

:grin: I’m glad I got it working too. I was worried about burning out U1 when I was soldering it, but it seems to be fine.

Yeah I trimmed down the filter too, I just did a really poor job on it it seems. I think I need to get some thinner screws since they don’t want to go into the fan holes. I should have some somewhere, but I’ll have to look later.

I’m thinking I’ll tape the wires against the side to keep them folded nicely. That’s a good idea to use it as a portable fan. I might have to get it a little more ruggedized before I use it for something like that.

Glad I could make your week! The fan is an Antec brand. They do have some nice ones out there for sure.


#50

I finally had some time to solder together a project I designed a few months back. It’s a simple little fpga development board that I code named the Spartan Mini.

I had the yearning to create this little fella when I was trying to learn verilog towards the beginning of the year. At the time I had a Digilent Nexys 3 development board that I had purchased off ebay and I was going through this neat little book called FPGA Prototyping By Verilog Examples. It was an older book, so it didn’t teach System Verilog, but I really enjoyed the style of writing and it was very practical in that it provided plenty of homework examples that you could work through and put into practice what was taught. I started thinking that it’d be fun to try and make a small development board that I could use in other projects, and the rest is history.

I decided to use the Spartan 6 FPGA because it was the one I had used in the Nexys 3 board, as well as it had the option of a less intimidating TQFP footprint, vs the BGA package that seems to be more common with the newer designs. There was also a ton of documentation and support behind it which really helped me out. There were numerous examples of projects I found online that I pulled from. None of them had everything I wanted, but they helped me in verifying I was hooking everything up correctly. Some of those projects were the Papilio and the Numato Mimas board.

For the feature set, I wanted a board that had a dedicated power switch, and various powered options. The final design can either be powered via a micro USB, 3.7-6v wall wart, a li-ion battery via an optional JST-PH connector, as well as a VIN jumper. The board can either be programmed via the USB, as well as the JTAG connection. For the USB controller I’m using an FT2232, which provides both a JTAG and RS232 link to the FPGA. The board also has 8Mb of PSRAM (pseudo-static ram). I discovered PSRAM with the Nexys 3 board. The benefit of PSRAM is that the FPGA can interface with it like normal SRAM. Under the hood however, the chip uses DRAM, but takes care of the refresh circuitry automatically. Because of this, PSRAM has the ease of use of SRAM, but essentially at a lower cost similar to DRAM.

Other than that I have 8 programmable Leds, 2 buttons, and a slide switch connected to the physical board. I found with the Nexys board that I was constantly using the Leds on the board to display not only the status of registers, but it also makes it really easy to display a byte of data when debugging. To facilitate expansion and prototyping I added 5 PMOD (short for peripheral module) ports, which seem to be a growing standard with FPGA boards. The nice thing with these connectors is there’s already a slew of useful peripherals that companies have developed that can be plugged in directly to the board.

In a later revision of the board I thought it might be neat to have the option of adding a Kicad template that would allow easy creation of daughter boards or shields that would connect via the PMOD connection points. I started playing around with creating templates in Kicad and built a little expansion board template.

Using the template I created a simple little proto board type shield that I’m hoping will make prototyping designs easier.

I discovered that there’s just enough room to squeeze a skinny breadboard between the headers, to provide for some more prototyping options:

Here’s a link to the github repo.


#51

Got some new boards back from oshpark. One is a li-ion coin cell charger, and the other a breakout board for a 1.5" oled. Now I just need the time to assemble and test. :slight_smile:


#52

Let us know how that connector soldering goes. Drag soldering ftw!


#53

Yep, drag soldering is a somewhat magical experience. Just need enough heat and flux and anything is possible :grin:. I’ve noticed that the solder bridges have become increasingly harder to detect though the older my eyes get. What I’m really scared of at this point are BGA components where the solder joints are hidden. When I get to that point though maybe I’ll invest in a reflow oven.


#54

USB microscopes are cheap too, that could help detect if you created bridges


#55

That’s a good idea. This one may fit the bill. It’s only 2 megapixel, but maybe that’s enough for this application. Christmas is right around the corner.


#56

I’ve been fortunate recently to have a few rainy days where I can further test my fpga board. I decided it would be fun to try and port an NES core to my board. I chose to try out this core built by Brian Bennett. This one seemed pretty well structured, and simple enough that I could hopefully add onto it in the future.

The first step for me was to update the constraint file of the project to map to the pins I had configured on the Spartan Mini. This was relatively straightforward. Next I plopped on my bread board shield and began to build up the connections needed to display the vga video. The way this core works is it uploads rom files from the computer to the fpga via the usb to uart link. After fiddling with the app for a bit, I was able to get games to load and display on the monitor. :slight_smile:

Next I thought it would be fun to swap out the VGA connection for a small TFT pixel clocked LCD I bought at Adafruit. I used the TFT Friend board Adafruit sells to connect the TFT display. The connection was fairly straightforward. The 8 bit rgb signal was wired into the most significant bits of the display, along with the hsync, vsync, data enable, and pixel clock pins. The video sync module was modified to allow for an 800x480 display area to accommodate the resolution of the TFT. To center the image in the display I’m just shifting the x value of the sync module by 80 pixels in order to compensate for the wider screen.

For the audio, I used an Adafruit PAM8302A amplifier board to run the sound output to an old pc speaker. The last piece I needed was the controller. The project was setup to use an original NES controller, which I didn’t have. I decided to try and build my own controller on a breadboard and get it working that way. The actual build of the controller was pretty simple, I just arranged some tactile buttons with pull down resistors on a breadboard in a way that resembled an NES controller.

The inner workings of an NES controller are fairly simple, basically the 8 buttons are hooked to a parallel to serial shift register which is mapped to the memory location $4016. Writing to that address latches out each individual button state. In my controller module i have 2 8 bit registers to hold the state of my buttons. Whenever $4016 is read the bits are shifted out one per clock cycle onto the data bus. To test the controller out I found a Controller Test rom online that was simple to use. It basically just lights up the buttons as they’re pressed.

Here’s the finished prototype:


#57

Fantastic! Love seeing the older games on new hardware.


#58

Nice work @jonthomasson!


#59

Thanks @ChrisGammell and @hedrickbt. I have a soft spot for the NES since that was the system I grew up with. Can’t believe it’s been 30 years ago. Time sure flies!


#60

I spent a little time decoupling the NES FPGA system from the computer recently. Instead of needing a program running on the computer to upload games, I really wanted to have the ability to upload games via an SD card on the board itself.

The way this worked previously was you would open a program on the computer to navigate to an NES rom file, and select it. The rom would be sent via the serial USB link to the FPGA. To facilitate this same functionality, I would need to replicate how the computer program was sending packets, and in what sequence on a microcontroller connected to an SD card loaded with roms.

I chose to use the Parallax Propeller microcontroller to do the heavy lifting between the SD card and the FPGA. The Propeller has a somewhat different architecture than the traditional micro. It has essentially 8 cores, or what Parallax calls cogs, running on the chip. Each of these cogs can run tasks independently of the other cogs. So, for my application I’m using one cog to access the SD card, one cog to provide a serial link to display the file contents, one cog to provide a serial link for streaming the rom packets, and one cog that runs the main program loop. I used the FLiP module Parallax sells to provide easy access to the Propeller on the breadboard.

To duplicate the serial packets that the software was using involved looking through the source code and analyzing how it was sending the data. The program started out by sending commands to tell the FPGA to disable the PPU (picture processing unit) of the NES, then it would send over the iNES header of the rom. The iNES header basically holds information on which mapper to use for the game, as well as the size of the program and PPU rom. After sending this data, it would send a command letting the FPGA know that it would start receiving the actual game packets. Next it would send the address to start writing the data to, as well as the size of the packet (in this case the packets were 1KB). Finally, when the last packet was received, the program retrieved the reset vector from the rom and issued a command to the cpu to let it know where to start executing the code.

In order to make sure the Propeller sent the correct data exactly as the original software had done, I used this program called Advanced Serial Port Monitor to spy on the usb serial port and log the bytes that were being sent. This way I could step through the code and see which bytes were being sent in relation to which commands and that the packets were being sent correctly.

In order to facilitate displaying the menu on the FPGA, I setup an 80 column by 30 row tile map. Each tile was made up of an 8x16 pixel grid. I also setup a rom image to store the font of each individual character type that would be displayed as it was received from the serial port. I added a menu toggle button on the controller to facilitate toggling from the menu display back to the game display. The menu is pretty basic for now, it displays the game title, the size of the rom, as well as the total number of games, and current page. By using the up/down/right/left and select buttons on the controller while in menu mode you’re able to scroll up and down and forward and backward to different pages in order to select the game you want.

Next, I need to figure out how to get the FPGA to load the bit file via the attached SPI flash so I no longer need to load it via the USB to JTAG link. Then, who knows, maybe I could cobble together some perfboard and make a proper handheld prototype.