paul's blog

Sturdy Pots on Breadboards

Often I throw together a quick demo for the bi-weekly DorkbotPDX meetup, usually involving one or more pots to adjust parameters.  Finally, I've come up with a pretty good way to put pots on solderless breadboards.

Click "Read more" for details and the shared PCB....

Teensy Audio Library Gets S/PDIF Support

Thanks to the amazing effort of Frank Boesing, the Teensy Audio Library now has native S/PDIF output.

Using a $1 TOSLINK connector, or just a red LED, you can get optical S/PDIF digital audio output.

Optical output is useful for projects where Teensy connects to grounded equipment.  There are lots of ways to simply play sounds, but the Teensy Audio Library gives you Arduino-sketch controlled synthesis, mixing, effects & filters, analysis and much more.  Sketch controlled sound is most useful when you connect more hardware to Teensy & use other Arduino libraries for inputs.  But often that other hardware comes with ground connections that cause audio-corrupting ground loop problems with analog audio, like the DAC pin or the audio shield.  Optical S/PDIF give you perfect digital audio output for those projects!

Click "Read more" for much more detail about the S/PDIF development....

Ten Watt RGB LEDs

Spent a good portion of the weekend fiddling with insanely bright 10 watt RGB LEDs.

Trying to make very low-cost DMX protocol control, of course for a Burning Man project that's planning to use 150 of them!

Control Voltage (CV) to Analog Input Pin

Often I've been asked how to get synth control voltage (CV) into an analog input pin.  Teensy 3.1 has 13 bits effective analog resolution, good enough for many CV applications, but the stable internal reference is only 1.2V with analogReference(INTERNAL).

This simple circuit converts the -5V to +5V CV signal range to the 0 to 1.2V ADC input range.

Edit: here's a discussion about this circuit's details and limitations (fancy opamp-based circuits can be better).

VS1053 Troubleshooting

Last night, I looked into why Adafruit's VS1053 only works with Teensy 3.1 at 24 MHz, but not 48, 72 or 96 MHz.

Turns out, the library depends SD.begin() to reconfiguring SPI.  It also runs data transfer code from both main program & interrupt context (causing havoc if the interrupt occurs at the wrong moment).  Pretty amazing it's worked on AVR for so long, but apparently it does crash sometimes.  Faster processors increase the opportunity for the problem to strike.

Hopefully my edits from last night will fix these problems for good.

Improving Arduino's Serial Monitor Performance

Today I worked on the toughest Arduino bug... keeping the serial monitor from locking up or crashing with maximum speed printing from Teensy 3.1 and Arduino Due.

Here's Technical details and mini rant about Java performance.  Hopefully this (and other good work) will lead to future Arduino versions with a serial monitor that doesn't suck.

Six Years of USB Development

Six years ago, in early Deceber 2008, I left the simple world of serial-based development behind and went native USB, releasing Teensy 1.0.  So much has happened and I've learned a lot in just 6 years.  I used to do everything by 9 pin RS-232 serial ports.  Those days seem so distant.

I'm now working on new and really awesome USB features for 2015...

Better SPI Bus Design in 3 Steps

Most Arduino SPI tutorials show this simple but poor SPI bus design:

A much better SPI bus design can prevent conflicts.  3 simple improvements are needed:

  1. Use pullup resistors on all chip select signals.

  2. Verify tri-state behavior on MISO: use a tri-state buffer chip if necessary.

  3. Protect bus access with SPI.beginTransaction(settings) and SPI.endTransaction().

Click "Read more" for details on these 3 steps.

Making nRF8001 (Bluetooth LE) and SD cards play nice together

Been working on making Adafruit_nRF8001 and the SD library work together.  Details are on this forum thread, and also this one.

Windows 10 Preview Build 9860 *finally* fixes USB Serial

I am happy to report Windows 10 Preview build 9860 fixes the long-standing USB serial bugs, which impact nearly all Arduino compatible boards.

  • The driver loads automatically.  No 3rd party INF is required.
  • The surprise removal bug is finally fixed (was present in build 9841, is fixed in 9860)
  • The seconds-long pause when detecting a new USB device for the very first time appears to be gone.

Windows 10 is finally going to support all class-compliant USB serial (eg, CDC-ACM) as well as Linux and Mac OS-X.  Very exciting.

Syndicate content