This was the first project that actually went towards my final project. I had originally planned to do a project based on step response that went towards my previous ideas for final projects, such as cubes that detect which faces are touching or a pen that reads its position in 3D space. But then, as you can read in the finals page, my plans had to change due to shit hitting the fan. But in the glorious aftermath of the fecal spray, I got a fun project idea, and I've had a lot of fun fiddling with the data from the microphone!
I don't want to spend too much time talking about the design process. I used KiCAD because that was what I learned for Week 4. I remembered to change the design rules first, so that was pretty nice. Also, we got via rivets!!!!! And double sided FR1!! I wanted this for a long time because I was annoyed by having to place so many 0Ω resistors to bridge everywhere, and having a ground plane would hopefully change that. I started with Neil's sample mic board and combined it with his serial bus bridge board so I could reuse this board for the networking project.
With the design completed it was time for me to actually make the circuit. And to help me was the new rivet machine! Gavin and I opened the box for the first time and set up the machine. And it was quite easy to use too! You just put the rivet through the bottom such that the non-lipped end points upward, align it with the machine, and press.
And the multimeter confirms that the connection between the sides is good, which means I can go forth and solder my materials. The next obstacle to making my board was soldering on the MEMS analog microphone. The contacts were all on the back, so it needed to be reflow soldered. I assumed it would be so much more difficult, but I actually found it pretty easy. You simply put some of the paste onto the leads, stick it on, and apply a concentrated heat gun. Gavin suggested I use tweezers, but I was able to get it to work without them.
Next was to try to program it. After reading more of the datasheet (hint: just look up the registers that are mentioned in Neil's code to see what each of them do), I got a pretty good sense of what his code does. So much so that I could probably explain to a friend what each line does (with reference to the datasheet of course). When Gershenfeld says to just read the datasheet, I really agree with him (but moreso on a need-to-know basis. Reading all of it at once is crazy). At first all I did was have the board constantly send information via serial, and then read it off via rx.py and hello.SPU0414HR5H.py . What I eventually just did was rewrite rx.py to write the data to a .txt file and then plot it. After recording me alternating between a high pitch and a low one, I got the following plot:
Afterward, I set the ADLAR bit in the ADMUX register to 1 so I could just read off one register for 8-bit ADC accuracy, because I realized (after reading the datasheet) that the ADC gave 10-bit accuracy, and I was reading from two 8-bit registers, one of which would consistantly give me constant-ish values. I might want to change this because the values it reads are consistantly high, and reading the lowest bits gives me a more reasonable range of values.