Auf der Überholspur mit Teensy 3.2

Der Pragmatische Architekt  –  0 Kommentare

Neben der Arduino-Familie gibt es inzwischen eine ganze Menge Boards, die Arduino-Kompatibilität auf ihre Fahnen schreiben. Ein cooles Beispiel mit kleinem Formfaktor und kleinem Preis sind die Boards der Teensy-Produktfamilie. Von denen soll die Version 3.2 exemplarisch zur Sprache kommen.

Nachdem die letzten Folgen überwiegend konkreten Beispielprojekten mit Lichteffekten gewidmet waren, möchte ich diesmal nach langer Zeit wieder ein Mikrocontroller-Board vorstellen. Neben der Familie der Original-Arduinos gibt es eine ganze Reihe von Boards aus anderer Quelle, die ein Programmieren unter der Arduino IDE erlauben. Etwas leistungsfähigere, aber auch teurere Boards gibt es zum Beispiel von Intel.

Wer es preisgünstiger bevorzugt, findet speziell an Boards mit ARM-lizenzierten Prozessoren Gefallen. Sie offerieren ein gutes Preis-Leistungs-Verhältnis und kleinere Formfaktoren. Konkret möchte ich diesmal eines der Boards aus meinem Mikrocontroller-Rennstall in einem Kurzüberblick vorstellen: das Teensy 3.2 von PJRC.

Hinweis in eigener Sache

Ich habe in jüngster Vergangenheit zwei weitere interessante Boards beschrieben.

  • Das Board Particle Photon, das neben einem Mikrocontroller auch eine WiFi-Komponente integriert, und sich hervorragend für IoT-Projekte eignet: zum Artikel.
  • Das Arduino-Eigengewächs MKR1000, das speziell IoT-Funktionalitäten integriert: zum Artikel.
Teensy 3.2 als Teil einer Produktfamilie
Ein Teensy 3.2 ist für Maker/IoT-Projekte gut bestückt

Das kleine US-Unternehmen PJRC.com hat dieses leistungsstarke Arduino-kompatible Board kreiert. Wer sich über den Firmennamen PJRC wundern sollte: der steht für die Firmengründer Paul J. Stoffregen und Robin Coon. Stoffregen ist in Arduino-Kreisen für seine engagierte Unterstützung der Arduino-Community bekannt.

Teensy 3.2 als Nachfolger von Teensy 3.1 ist ein komplettes Mikrocontroller-Entwicklungssystem auf Basis von USB für einen recht günstigen Preis von rund 19,80 US-Dollar.

Wie sein Bruder Teensy LC ist auch Teensy 3.2 ein 32-Bit-Board. Im Gegensatz zu diesem liegt ihm ein 72-MHz-Cortex-M4-Mikrocontroller zugrunde. Es lässt sich, nebenbei bemerkt, problemlos mit 96 MHz übertakten. Interessant ist der M4 vor allem wegen seiner Zusatzfunktionalitäten für DSP (Digital Signal Processing), ein für IoT-Geräte bzw. Mikrocontroller wichtiges Merkmal.

Die 32-Bitter Teensy 3.2, 3.1 und LC sind aber nicht die einzigen Vertreter der Teensy-Familie. Darüber hinaus existieren noch die 8-Bit-Teensy-Boards Teensy 2.0 und Teensy++ 2.0 mit Atmel-AVR-Prozessoren. Auf die geht der Artikel aus Platzgründen nicht näher ein, weil sie sich eher im Preis- und Leistungsspektrum konventioneller Arduino-Boards bewegen.

Der Fokus liegt also ganz auf der momentanen Rennmaschine unter den Teensies, dem Teensy 3.2.

Ein-und Ausgänge

Die Pins des Teensy 3.2 erwarten 3,3-V-Signale, sind aber gegenüber 5 V tolerant. Insgesamt verfügt das Board über 34 I/O-Ports, darunter 21 analoge Eingänge und 12 mit PWM-(= Pulsweitenmodulation-)Unterstützung. Mit 256 K Flash und 64 K RAM bietet das Board ein Mehrfaches der Ausstattung eines Arduino Mega. Dazu kommen noch 2K EEPROM-Speicher. Zur Kommunikation befinden sich drei UARTs on Board, dazu zwei I2C-Busse und ein SPI-Bus. Im Gegensatz zu Arduino-Boards verfügt das Teensy-3.2-Board zusätzlich über einen CAN-Bus-Anschluss.

Teensy 3.1/3.2 Frontalsicht auf die Pins
Teensy 3.2 Sicht von unten

Erster Eindruck: Ein Teensy 3.2 besitzt also auch für komplexere Projekte reichlich Potenzial.

Programmierung

Mittels teensyduino lässt sich Support für Teensy Boards leicht in die Arduino IDE integrieren


Um Teensy 3.2 unter der Arduino IDE verwenden zu können, müssen Sie zuerst die Software teensyduino installieren. Ich setze voraus, dass Sie zuvor bereits die Arduino IDE installiert und mindestens einmal benutzt haben. Ansonsten funktioniert die Installation von teensyduino nicht. Unter Windows brauchen Sie noch einen zusätzlichen Treiber für Teensy 3.2.

Nach der Installation sind im Arduino IDE Menü Tools | Boardsauch die Teensy-Systeme verfügbar. Zusätzlich finden sich im Beispielmenü spezielle Sketch-Beispiele für die Boards.

Sie können mit Files | Examples | Blink das obligatorische Blink-Programm auf den Teensy 3.2 flashen. Anschließend sollte die orangefarbene LED des Boards rhythmisch blinken.

Während des Flashens erscheint auf dem Hostrechner ein kleines Fenster mit dem Titel "Teensy". Hierbei handelt es sich um den sogenannten Teensy-Loader:

Der Teensy-Loader erlaubt auch das manuelle Flashen auf Teensy-Boards

Normalerweise läuft das Flashen von Sketches automatisch über die Arduino IDE. Sie können aber auch mittels Teensy-Loader alle Aktivitäten manuell gestalten und beispielsweise Sketche als Hex-Dateien auf das Board laden. Mehr Details dazu befinden sich dazu auf dieser Seite.

Komplexeres Beispiel

Ein etwas umfangreicheres Beispiel soll illustrieren, wie sich der Teensy-Board für Projekte im Bereich kleinerer eingebetteter Systeme nutzen lässt. Dazu schließen wir an das Board ein OLED als grafisches Display an. Im Beispiel kommt ein Adafruit SSD1306 zum Einsatz, das in etwa die Größe eine mittelgroßen Briefmarke besitzt. Diese Art von OLEDs gibt es sehr preisgünstig (ab 6 bis 7 Euro) in den einschlägigen Online-Verkaufsportalen. Eine Suche nach "0.96" (für 0,96 Zoll Größe) und "OLED" genügt.

Das Display existiert in mehreren Varianten:

  • mit I2C- oder mit SPI-Anschluss
  • mit 32 oder 64 Zeilen
  • mit unterschiedlichen Display-Farben
Anschluss eine Adafruit SSD1306 OLED Displays an Teensy 3.2 (Bild: pjrc.com)

Im Beispiel sehen Sie ein 128 x 32 I2C-Board. Viele der besagten I2C-OLED-Boards besitzen 4 Pins (Vcc, GND, SDA, SCL). Das abgebildete OLED hat zusätzlich einen RESET-Pin.

Wegen des Trägheitsgesetzes für Informatiker schreibe ich keinen eigenen Sketch, sondern verwende ein Beispiel aus einer Arduino-Bibliothek von Adafruit. Um es ebenfalls zu nutzen, benötigen Sie folgende Bibliotheken in der Arduino IDE, die Sie allesamt über Sketch | Include Library | Manage Libraries... importieren können:

  • Adafruit GFX Bibliothek: Grundlegende Funktionen für die Ansteuerung von Grafikdisplays
  • Adafruit SSD1306 Bibliothek: Treiber für die verwendeten SSD1306-Displays

Das OLED habe ich in der Schaltung über den 3,3-V- (erlaubt bis 100 mA) und den GND-Ausgang des Teensy 3.2 angeschlossen. Den SCL-Pin des Displays habe ich mit Port 19 des Teensy 3.2 und den SDA-Pin mit Port 18 des Teensy 3.2 verbunden.

Code-Fragmente

Für das mir vorliegende OLED verwende ich aus dem Menü-Pfad File | Examples | Adafruit SSD1306 den Sketch ssd1306_128x32-i2c. Er adressiert Arduino-Boards, läuft aber genauso auf dem Teensy 3.2. Der Code ist ziemlich ausführlich, weshalb ich mir und Ihnen das langweilige Abtippen ersparen möchte. Nur einige interessante Aspekte im Code kommen jetzt zur Sprache.

Am Anfang des Sketches erfolgt der Import der entsprechenden Bibliotheken:

#include <Wire.h>                     // I2C
#include <Adafruit_GFX.h> // Grafikbibliothek
#include <Adafruit_SSD1306.h> // Treiber für OLED
#define OLED_RESET 4 // Reset-Pin festlegen
Adafruit_SSD1306 display(OLED_RESET); // Zugriffsvariable fürs OLED

Die loop()-Methode des Sketches von Adafruit enthält keinen Code. Alles Interessante spielt sich stattdessen in der Methode setup() ab. Anfangs des Sketches sehen Sie das Adafruit-Logo als Splashscreen. Die Bibliothek hat dieses Image in den Image Buffer geladen, weshalb es beim ersten Aufruf von display.display()erscheint:

// ... in setup ....
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C Adresse 0x3C
display.display(); // Image Buffer anzeigen => Adafruit-Logo erscheint
display.clearDisplay(); // Display-Inhalt löschen
testdrawline(); // Liniendemo
...

Die Methode testdrawline()zeichnet Linien:

void testdrawline() {  
// Linien von links oben (0,0) zu Punkten am
// unteren horizontalen Rand zeichnen:

for (int16_t i=0; i<display.width(); i+=4) { // alle 4 Pixel
display.drawLine(0, 0, i, display.height()-1, WHITE);
display.display();
delay(1);
}
...
display.clearDisplay();
...

}

Die Methode testdrawchar()gibt alle ASCII-Zeichen mit den Codes 0 bis 167 am Bildschirm aus:

void testdrawchar(void) {
display.setTextSize(1); // Einfache Textgröße
display.setTextColor(WHITE); // die tatsächliche Farbe weicht ab
display.setCursor(0,0); // Cursor auf linke, obere Ecke

for (uint8_t i=0; i < 168; i++) { // ASCII Codes 0 .. 167
if (i == '\n') continue; // Zeilenvorschub übergehen
display.write(i); // Zeichen ausgeben
if ((i > 0) && (i % 21 == 0)) // pro Zeile 21 Zeichen ausgeben
display.println(); // dann auf nächste Zeile
}
display.display(); // alles anzeigen
delay(1);
}

Durch die Kombination eines leistungsfähigen Teensy-3.2-Boards mit einem OLED-Display sind alle möglichen Anwendungen realisierbar, die eine grafische Ausgabe benötigen, etwa Messstationen oder Spiele-Anwendungen.

Da das Teensy-Board mit Arduino-Sketches läuft, erübrigen sich mangels großer Aha-Effekte weitere demonstrative Sketche. Einzig die Pins sind vereinzelt in Sketches zu verändern. Zum Beispiel befindet sich die Onboard-LED bei Arduino-Boards am Ausgang 13, beim Teensy 2.0 an 11, beim Teensy++ 2.0 an 6, und bei den Teensy 3.x-Boards am gewohnten Ausgang 13.

Sparkfun Shield Adapter

Teensy 3.2 fügt sich mit seinen Features sehr gut in das Arduino-Ökosystem ein, speziell was das Thema Software betrifft. Es wäre allerdings wünschenswert, könnten Entwickler auf der Hardwareseite existierende Arduino-Shields für das Board benutzen. Genau das erlaubt das Sparkfun Teensy Adapter Shield.

Das Adaptershield von Sparkfun erlaubt den Teensy-Boards 3.1 und 3.2, Arduino-Shields zu nutzen (Bild: sparkfun.com)

Es bringt unter anderem Folgendes mit:

  • Arduino-R3-Schnittstelle
  • Echtzeituhr
  • JST-Anschluss für LiPos
  • Netzteilanschluss
  • I2C Jumpers
  • ICSP-Stiftleisten
  • DAC-Stiftleisten

Dadurch kann Teensy 3.2 auch am Hardware-Ökosystem des Arduino partizipieren.

Blick in die Kristallkugel

Stoffregen bleibt gewohnt umtriebig. Er ist immer auf der Suche nach der nächsten Herausforderung. Im Augenblick sucht er erfolgreich über Kickstarter nach Sponsoren für die Entwicklung der Teensy-Boards 3.5 und 3.6.

Die Zukunft: Teensy 3.6 (Bild: pjrc.com)

Diese beiden Boards werden das Leistungsspektrum des Teensy 3.2 nochmals erheblich steigern.

So enthält das geplante Teensy-3.6-Board einen 180-MHz-ARM-Cortex-M4 plus Gleitkommaprozessor, ein MByte Flash, 192 KByte RAM und 4 KByte EEPROM. Es gibt einen USB-Highspeed-Port mit 480 Mbit/sec Durchsatz. Zur Verfügung stehen des Weiteren 32 allgemeine DMA-Kanäle, 2 CAN-Bus-Ports, 4 I2C-Buseinheiten, 3 SPI-Ports, Digitale Audio Ein- und Ausgabeports, 11 Ports für Touchsensoren, 62 I/O-Pins mit 25 analogen Eingängen, 14 Hardware Timer, eine Kryptographie-Einheit, ein Zufallszahlengenerator, eine Komponente für CRC-Berechnungen, ein Micro-SD-Kartenleser, ein Ethernet-Anschluss mit 100 MBit/sec und eine Echtzeituhr. Das aber nur als unvollständige Zusammenfassung.

Die Auslieferung der Boards an die Unterstützer der Kickstarter-Kampagne ist für Oktober 2016 vorgesehen.

Daneben möchte Stoffregen in Zukunft auch einige Ideen in Richtung Bibliotheken umsetzen, etwa eine leistungsfähige Audio-Bibliothek, eine Arduino Event Processing API und Musikvisualisierung über LEDs, um nur ein paar Beispiele zu nennen.

Zusammenfassung

Wer eigene Projekte durchführen möchte, ohne das Rad ständig neu zu erfinden, braucht Bibliotheken. Auf der Website listet PJRC eine ganze Menge von Bibliotheken, die Teensy-Boards unterstützen. Es ist schließlich auch das ausgesprochene Ziel von Stoffregen, die jetzigen und zukünftigen Teensy-Boards möglichst nahtlos in das Arduino-Ökosystem einzufügen. Für Maker dürften die Boards deshalb auf jeden Fall eine interessante Option darstellen.

Sofern dieser Artikel oder das Teensy 3.2 Ihr Interesse geweckt hat, sollten Sie sich jetzt an eigene Experimente wagen. Weitere hilfreiche Informationen wie Tipps & Tricks, Beispielprojekte und weitere Details zu den diversen Boards finden sich dazu auf dieser Seite.