06/22/2021 at 02:30 •
I've received this question a lot, so instead of answering it in random comment threads I'll just do it here. I'm referring to research I did a year ago and didn't bother to look anything up for this to get any hard numbers. Take the things I say here with a grain of salt, because to be honest I'm not particularly learned in the ways of the FPGA. But I did learn enough to know that I don't need to learn any more about them for this project (one day I will have a project that actually needs one and isn't just crammed in for no reason, and I'm looking forward to it)
I considered something like this early on, but it turns out FPGAs won't work well for this particular use case. But on a super high level, breadWare is sort of an FPAA (Field Programmable Analog Array) built out of a bunch of discrete chips to make it work the way I had originally imagined they would.
Here are some fun facts about FPGAs (that weren't so fun when I learned them because it meant the design was going to be waayy more complicated):
-Although we think of them as routing signals through a bunch of logic gates, how they actually work is by sending the signals through LookUp Tables, so it basically simulates a logic gate by just reading places in memory that you've programmed with a bitstream. The LUTs are connected by a crossbar switch internally, but they know exactly how it's going to be used so they can simplify out a lot of the things that would make it "general-purpose." From what I understand, the input signals always go through a large set of LUTs (which is fine in a purely digital world, because they can just map 1 to 1 and 0 to 0 ) before they can go through the crossbar switch. So it's more like a Star Trek teleporter where it just scans and reassembles you on the other side.
-Nowadays it's really rare to find FPGAs with inputs that are even 5V tolerant, most are only like 2.8V tolerant, so you'd either need to be super careful with the connections or have 60 separate level shifters.
-You need analog signals to make even the simplest of digital circuits work, for example a 555 timer needs to read the voltage on a capacitor to generate a clock signal.
-I got really excited when I heard about FPAAs, but turns out they're basically unobtanium for less than $100 per chip, and they're usually only a few analog blocks thrown into a regular FPGA. Apparently JPL made a chip in-house for spacecraft, but I can't imagine a regular person could buy one.
So now I have a microcontroller and a digital potentiometer do those extra things, and the ATmega4809 I'm using does have a built-in hardware logic gate they call a "Configurable Custom Logic" cell, as well as a ton of other fun things to mess around with.
But yeah, an FPGA version could probably do some awesome things that this one can't.
06/16/2021 at 12:18 •
After seeing that a single MT8816 would work, I wanted to make sure you could route a connection through 2 of them and still have a reasonably good connection. Because using a single 32x32 crosspoint wasn't gonna happen, I think they actually might exist (it's been a while since I looked into it), but they're in the few hundred dollar range per chip, and they're generally for HDMI switching so they don't really have the qualities you'd want in a general purpose analog switch.
I also wanted to make it not take up the whole breadboard so I could actually test it on real things.
Disclaimer: what I wrote above is a lie, the real reason I made this is because I had just discovered the joys of wire-wrap wire and I needed an excuse to use it.
What follows is basically a slideshow of me building this thing.
This is the pinout for the rows of wires going to the Arduino Nano Every
Control Lines (top to bottom) (left side of board)
Address Lines (left to right) (bottom of board)
06/16/2021 at 11:40 •
Here are some photos and videos of early proofs of concept to make sure you could actually use a crosspoint switch to make a reasonable stand-in for a physical jumper. I was expecting this not to work, but surprisingly, it did.
Here's the 555 test setup. I'm using a DIP version of the MT8816 which was really handy for this early testing stuff.
and here it is working here's the code for this
What I'm doing here is using the crosspoint switch to change the resistors and capacitors in the 555 circuit to change the frequency.
That other 8 pin chip on the left is a charge pump to make the -9v power rail.
Then I realized I should probably do something more intuitive for the students so I set this up with LEDs