Teensy-Arduino adapter shield

Ever since I discovered the Teensy 3.0 board from PJRC, I’m hooked up to it. It’s compatible with the Arduino programming language, but the microcontroller is so much more powerful than a regular Arduino or even the Arduino Due. The only downside is the limited amount of Teensy expansion shields. But what if you could hook up all your Arduino shields to the Teensy? You could then take advantage of both the powerful microcontroller as well as the variety of Arduino expansion shields. That’s why I developed the Teensy-Arduino adapter shield, which does just what it says on the tin: seamless compatibility between the Teensy 3.0 board and Arduino shields.

Main features:

  • Drop-in, pin-to-pin Arduino Rev3 compatible
  • Convert between Teensy and Arduino footprints: unlock the wealth of different Arduino shields for your Teensy projects
  • Interface Arduino 5V  levels (logic and even analog!) to Teensy 3.3V level: no need to make any change to your existing Arduino projects
  • Bidirectional logic buffers can source up to 50mA per digital output (up from 9mA per Teensy output)
  • Unity gain opamps on analog inputs improve accuracy and speed of analog-to-digital conversion
  • Run your Teensy from any 7-15V DC power supply
  • Select 3.3V logic levels with a simple switch to use your Teensy with 3.3V Arduino shields (in stead of 5V)
A Teensy 3.0 board mounted on the Teensy-Arduino adapter shield

A Teensy 3.0 board mounted on the Teensy-Arduino adapter shield

Status of the shield

Currently, I’m testing prototype versions of the shield, and I’ll be making some tweaks in order to enhance quality and usability. (e.g. offsetting the Teensy placement a bit more so the USB microconnector isn’t obstructed by the Arduino ICSP header). If you have any suggestions regarding the layout or features of the adapter shield, be sure to leave them in the comments.

I don’t yet know if I’ll put the board in volume production and up for sale or keep it as an internal product in our organization. This because it’s hard for me to estimate if there’s a real demand for this board. If you’re interested in this board, leave a reply in the comments or register your interest with the form below (your email will only be used to notify you if the board has gone into volume production). If I reach 50 interested people, I’ll let the fab churn the boards out.

Oh, the price you ask? Hard to tell, but I expect it to be somewhere around €20 to €30. A bargain considering you unlock the wealth of Arduino shields for your Teensy, right?

Why the Teensy-Arduino adapter shield?

I love Arduino. I really do. I use it almost all the time, at home or at work. Not only is it fun and easy to program with, there’s also an abundance of different expansion shields available.

My only beef with the AVR based Arduino’s is its limited processing and memory capacity. Although the AVR 8-bit microcontroller architecture has aged gracefully, it just isn’t suitable for today’s networked, data-intensive processing tasks anymore. Sure, Arduino now has the 32-bit Due, but at a ridicioulus large footprint and a tad too pricey. And worst of all: they neglected to take advantage of the built-in peripherals provided by the SAM3X chip. No Ethernet wiring, no DMA wiring. Booh!

Then I discovered the Teensy 3.0. A capable, cheap and small 32-bit ARM board. It offers advanced capabilities such as complex math processing. And it’s programmable with the Arduino IDE and language we all love so much! Unfortunately, the smaller footprint and different voltage levels meant I could throw away my amassed army of Arduino shields.

Or did I?

I wanted a board which would allow me to use all my existing Arduino shields without a second thought. I also wanted it to fix some of the ‘prototype-unfriendly’ features 32-bit micrcontrollers have compared to their robust 8-bit brethrens, such as low current sinking/sourcing capability and extreme sensitivity to reverse polarity or too high voltage levels. Hey, we all make some bad wiring decisions in our lifes, don’t we?

Since I design and manufacture a lot of PCB’s at work, I decided to build this adapter board. It interfaces the Teensy 3.0 board with Arduino shields. It takes care of all the logic level translations, increases the drive capability of the digital pins, offers pin input  protection, improves the ADC performance and even has it’s own built-in power supply so you can run the Teensy stand-alone. Just for fun, I also added a 12mm coin cell battery holder. It allows you to use the built-in RTC of the Teensy to keep the time, even without power.

But the main thing, of course, is the Arduino compatible footprint. Just place any Arduino shield on top of this board and use it like you would use with an Arduino board, but now with the power of the Teensy 3.0 under the hood.

An Arduino Ethernet shield mounted on the Teensy-Arduino adapter shield

An Arduino Ethernet shield mounted on the Teensy-Arduino adapter shield

What does it do?

Digital

  • Bidirectional level shifting between 5V (Arduino) and 3.3V (Teensy) logic levels on all digital, SPI and I²C pins
  • Increased current sinking/sourcing capability up to 50mA
  • +/-15kV ESD protection
  • Selectable 5V/3.3V output

The Teensy-Arduino adapter shield has two TXB0108PWR autosensing bidirectional level shifters taking care of the voltage level translations on the digital pins, including the SPI pins through the ICSP header (e.g. for use with the Arduino Ethernet shield).

Internally, the level shifters work with a single MOSFET transistor, using a clever trick first described by Herman Schutte when he worked at Philips Semiconductor (now NXP). Read the original application note.

As an extra, the level shifters act as a buffer, protecting the sensitive Teensy pins and improving the current sinking/sourcing capability.

The Teensy-Arduino adapter shield also has a VREF switch. This switch controls the output level of the level shifters. Leave it at 5V for use with most Arduino shields. However, when using 3.3V Arduino shields, move the switch to the 3.3V position. The level shifters will now work on a 3.3V level, and the IOREF pin will be now be at 3.3V. This of course degrades the level shifters to expensive 1:1 buffers, but maximizes compatibility with existing Arduino shields.

Note: keep in mind the level shifters will now be supplied 3.3V through the Teensy voltage regulator, so keep total current sourcing within 100mA!

Currently, the Teensy-Arduino adapter shield also has a communication header compatible with the popular Sparkfun FTDI breakout board. This is mainly for my own convenience, because I use a lot of UART communications in my projects and this way I can easily connect the FTDI converter to my Teensy.

Analog

  • 5V compatibility on analog inputs
  • Increased accuracy, stability and speed of ADC readings
  • Analog input protection

The Teensy-Arduino adapter shield uses a simple 18k/33k resistor divider to rescale 5V analog inputs to 3.24V (the closest you can get to 3.3V by using standard resistor values). The resistor divider has an accuracy of 1%.

To remove any input impedance mismatch between the resistor divider and the analog inputs, an LM358D opamp in unity gain mode is placed between the resistor divider and the analog input pin. Since this opamp has virtually no output impedance, it instantely charges the ADC input capacitor, (theoretically) removing the need to average multiple ADC readings.

The same resistor divider is also connected to the AREF input of the Teensy. By adding

analogReference(EXTERNAL);

in your sketch, you set the upper limit of the ADC to the maximum value the analog input can ever read through the resistor divider. When you apply 5V to the analog input, the Teensy will read 1023 (in 10-bit resolution), just like it would on a regular Arduino. You can desolder solder jumper SJ1 on the back of the board if you wish to use another external reference.

Note: because of the opamps, the analog inputs of the Teensy can no longer be used as digital outputs. This can be a problem when you use some (older) Arduino shields utilizing I²C communication on analog pins 4 & 5. If you want to use these shields, connect solder jumpers SJ7 and SJ8 on the back of the board. This will connect the I²C pins directly to analog pins 4 & 5, but render the analog input function on those pins void.
Newer Arduino shields use I²C communication on digital pins 16 & 17, and so should you!

Power

  • On-board 5V power supply
  • Automatic power supply selection (on-board 5V, USB 5V)
  • Use the Teensy stand-alone (without USB connection)
  • 3V back-up battery

The Teensy-Arduino adapter shield uses the same LD1117S50 linear regulator found on many Arduino boards and shields, providing clean 5V power from a DC input of 7-15V. The regulator can provide up to 750mA of current, which is more than enough to power the Teensy and a bunch of Arduino shields. The power supply is protected against reverse polarity, just in case.

All 5V logic is supplied through this regulator, unless no external power is connected at which instance it will be supplied through the 5V USB VCC. An opamp/MOSFET combo provides automatic power supply selection. When present, the Teensy-Arduino adapter shield will always run from an external power supply, even when a USB cable is connected to the Teensy.

To avoid circulating currents between the external power supply and the USB port, you should

  1. never connect an external power supply when the Teensy is connected to a USB port
  2. cut the trace connecting the USBVCC and VIN pins on your Teensy board (see tutorial).

Not respecting these rules may damage your Teensy and potentially open the Seven Gates of Hell. Don’t tell us we didn’t warn you!

As an extra, the Teensy-Arduino adapter shield has a 12mm coin cell holder for 3V LR221 batteries. The battery  is connected to the VBAT pin of the Teensy and can be used as a backup power source to keep the internal Real Time Clock going.
Don’tuse it as a backup power source to power your Teensy board, because holy priceless collection of Etruscan snoods, Batman, you would drain the battery in minutes!

Reset

  • Reset the Teensy board through a pushbutton
  • Compatible with reset buttons on Arduino shields

The Teensy-Arduino adapter shield has a reset button, which can pull the Teensy reset pin low through a CAT811 voltage supervisor controller. This button is connected to the RESET pin, meaning pushing the button or pulling the RESET pin to ground initiates a reset of the Teensy. The reset button on Arduino shields will provide the same functionality. This can come in handy, e.g. when resetting an Ethernet shield (pushing the reset on an Ethernet shield will simulteaneously reset the Teensy and the Ethernet chip). The CAT811 controller will also initiate a reset when the input voltage drops below 2.6V, preventing undefined states of the Teensy microcontroller.

Note: the reset button does NOT have the same functionality as the button on your Teensy board. The button on the Teensy board is used to bring the Teensy microntroller into programming mode, not to reset it.

Footprint

  • Arduino Rev3 compatible
  • Two mounting positions for the Teensy board

The Teensy-Arduino adapter shield uses the Arduino Rev3 layout, meaning it has a IOREF pin signaling the I/O voltage level and digital pins 17 & 18 dedicated for I²C communication.
The Teensy board can be mounted in two ways: on top or below the shield.
On top has the benefit of retaining a flat, stable underside of the board and providing easy access to the Teensy programming button. Below has the benefits of exposing the additional Teensy I/O SMD pads for further expansion.

teensy_arduino_shield_3

The Teensy-Arduino adapter shield running an Ethernet sketch

Things to do

  • Add the schematic
  • Add better pictures
  • See if the Teensy placement can be offset to the right
  • Check gain of the opamps
  • Check reset behaviour
  • Check performance of the TXB0108 with open drain I²C bus