paul's blog

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.

Embrace Heart Lighting

Earlier this summer, I worked on a tiny piece of the Embrace sculpture, for Burning Man 2014.

Inside were 2 hearts, one made here in Portland by Lostmachine Andy & other burners at Flat Rat Studios.  I made electronics to gradually fade 4 incandescent light bulbs in heart beating patterns.

Click "Read more" for technical details and many more wonderful photos (taken by Sarah Taylor)....

Node-RED Hacking - Audio Library Front-End

When I started the Audio library, a nice GUI (like Puredata or Max/MSP) seemed an impossibly distant dream.  Then, in this forum thread, I learned of the open source Node-RED project.

Over the last few days I've been coming up to speed on modern Javascript tools like jQuery and D3, to hack Node-RED into a GUI front-end.  Much work still needs to be done before this is usable, but I'm pretty excited about the possibilities!

Update: a live demo page is now available.  :)

Display & SPI Optimization

Recently I've been working on an optimized ILI9341 display library, to take advantage of Teensy 3.1's more capable SPI hardware.  Here's a quick video demo, so you can see how much of a difference it makes.

In the transition from 8 to 32 bit microcontrollers, on-chip SPI ports usually gain more sophisticated features.  Special programming is needed to fully levergage these more powerful features.  Merely recompiling code designed for simple SPI hardware on 8 bit hardware rarely acheives the best performance.  As you can see in the video, optimizing for these features makes a pretty dramatic improvement.

Click "Read more" for the all the technical details...

SPI Transactions in Arduino

For the last several weeks, I've been working on SPI transactions for Arduino's SPI library, to solve conflicts that sometimes occur between multiple SPI devices when using SPI from interrupts and/or different SPI settings.

To explain, a picture is worth 1000 words.  In this screenshot, loop() repetitively sends 2 bytes, where green is its chip select and red is the SPI clock.  Blue is the interrupt signal (rising edge) from a wireless module.  In this test, the interrupt happens at just the worst moment, during the first byte while loop() is using the SPI bus!

Click "Read mode" for lots more detail.....

Syndicate content