Verwendung von Breakout-Boards von Arduino zur schnellen Evaluierung von Sensoren und Peripheriebausteinen

Von Clive „Max“ Maxfield

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

Das Internet der Dinge (IoT) hat viele innovative Startup-Unternehmen dazu inspiriert, nach Anbindungsmöglichkeiten für weitere bedeutende Technologien zu suchen. Vielen dieser Startup-Unternehmen stehen jedoch nur kleinere und schlankere Designteams zur Verfügung, die sich immer kürzeren Markteinführungszeiten gegenübersehen. Einzelne Entwickler sind daher für mehrere Fachbereiche und Aufgaben zuständig, so etwa für analoge, digitale, drahtlose/drahtgebundene und Hochfrequenznetzwerke. Natürlich sind sie fortwährend auf der Suche nach Möglichkeiten, die Evaluierung von ICs, Sensoren und Peripheriebausteinen zu beschleunigen und die hierfür nötigen Ausgaben zu senken.

Eine mögliche Option stellt die Verwendung von Evaluierungs- und Entwicklungskits dar, die von IC-Anbietern als Unterstützung für ihre Lösungen angeboten werden. Geht man von einem guten Maß an Unterstützung aus, spricht absolut nichts gegen diesen Ansatz. Eine weitere Option stellt jedoch die Arduino-Plattform dar. Diese Plattform hat sich von einem „Spielplatz“ für Hobbybastler zu einer vollwertigen Design- und Unterstützungsplattform entwickelt.

Dieser Artikel zeigt, wie Entwickler mit Arduino ICs, Peripheriebausteine und Sensoren bereits in der Frühphase der Entwicklung evaluieren können, indem sie Open-Source-Hardware in der Form von Breakout-Boards (BOBs) für Sensoren und Peripheriebausteine zusammen mit Open-Source-Software in der Gestalt von Bibliotheken und Beispielprogrammen verwenden. Als Beispiel werden die Echtzeituhren (RTCs, Real Time Clocks) von Maxim Integrated und Breakout-Boards von Adafruit Industries herangezogen.

Der Aufstieg des IoT

Eines der ersten echten Beispiele für das IoT datiert auf die frühen 1980er Jahre zurück, als ein Coca-Cola-Automat an der Carnegie Mellon University so verdrahtet wurde, dass die Programmierer über das Internet prüfen konnten, ob Getränke verfügbar und gut gekühlt waren, bevor sie sich tatsächlich auf den Weg zum Automaten machten. Seine Bezeichnung als Konzept erhielt das IoT jedoch erst 1999.

Über den exakten Zeitpunkt der tatsächlichen Entstehung des IoT lässt sich jedoch streiten. Die beste Definition für den Zeitpunkt der Geburt des IoT, wie wir es heute kennen, ist vielleicht folgende: „Derjenige Zeitpunkt, an dem mehr „Dinge“ oder „Objekte“ als Menschen mit dem Internet verbunden waren.“ Auf dieser Grundlage wurde das IoT Schätzungen zufolge irgendwann zwischen 2008 und 2009 geboren, wobei das Verhältnis von Dingen zu Menschen von 0,08  in 2003 auf 1,84 in 2010 gestiegen ist

Der Aufstieg von Arduino

Die Entstehung des IoT fällt mit dem Aufstieg der Maker-Bewegung in den frühen 2000er Jahren zusammen. Die erste weltweite Bereitstellung der Arduino-Plattform fand 2005 statt. In diesem Jahr kam auch das Magazin Make auf den Markt und nur ein Jahr später fand die erste Maker Faire statt.

Seit ihren Anfängen hat die Arduino-Plattform Open-Source-Umgebungen mit anspruchsvoller Software und Hardware hervorgebracht. Diese gut unterstützten Umgebungen von Arduino mussten nunmehr für professionelle Entwickler zugänglich gemacht werden, um ihnen ihre Arbeit zu erleichtern und die Markteinführungszeit zu verkürzen.

Die Lösung hierfür ergab sich auf ganz natürliche Weise, denn die riesige Umgebung, die um die Arduino-Plattform herum wuchs, brachte einen unerwarteten Nebeneffekt mit sich: Professionelle Ingenieure fingen an, Arduino für die Evaluierung von Sensoren und Peripheriebausteinen zu verwenden, bevor sie diese in ihren eigenen Designs bereitstellten. Hierfür gibt es inzwischen zahlreiche Beispiele, wie etwa die Echtzeituhr (RTC).

Evaluierungsbeispiel für einen Peripheriebaustein unter Verwendung einer Echtzeituhr (RTC)

Fast jeder moderne 32-Bit-Mikrocontroller verfügt über eine integrierte Echtzeituhr. Selbiges gilt auch für viele 16-Bit- und sogar 8-Bit-Mikrocontroller. Obwohl dadurch weniger Platz auf der Leiterplatte benötigt wird, die Stückliste kürzer wird und die Kosten für das Endprodukt sinken, hat die Verwendung einer internen Echtzeituhr auch Nachteile.

Einer dieser Nachteile ist, dass der Mikrocontroller seine interne Echtzeituhr per Software aktivieren und deaktivieren muss. Wenn es also beispielsweise zu einer Unterbrechung der Stromversorgung kommt und der Mikrocontroller gesperrt wird oder sein Code Probleme verursacht, könnte die Echtzeituhr unbeabsichtigt deaktiviert werden. Im Vergleich dazu wird eine externe Echtzeituhr als robuster angesehen, da sie über eine separate Stromschiene und einen eigenen Quarz verfügt. Außerdem ist es weniger wahrscheinlich, dass sie von dem auf dem Mikrocontroller ausgeführten Code versehentlich deaktiviert wird. Des Weiteren wird bei der Implementierung der externen Echtzeituhr üblicherweise ein größerer Chip-Fertigungsprozessknoten als beim Mikrocontroller verwendet und ihr größerer Silizium-Footprint machen sie weniger anfällig für Bit-Flips, d. h. Single-Event-Upsets (SEUs), die durch Strahlung (z. B. kosmische Strahlung) verursacht werden.

Beispiele für RTC-ICs: DS1307 und DS3231 von Maxim Integrated

Zwei überaus beliebte RTC-ICs sind die DS1307 und die DS3231 von Maxim Integrated. Beide Komponenten verfolgen Sekunden, Minuten, Stunden, Tag, Datum, Monat und Jahr, sie passen sich automatisch an Monate mit weniger als 31 Tagen an, sie berücksichtigen Schaltjahre und sie unterstützen den 24- oder den 12-Stunden-Modus. Außerdem kommunizieren beide Komponenten über einen seriellen I2C-Bus mit dem Host-Mikrocontroller und sie enthalten einen Messkreis, der Stromausfälle erkennt und automatisch auf die Reserveversorgung umschaltet (üblicherweise eine Batterie), damit die Zeiterfassung aufrechterhalten werden kann (Abbildung 1).

Schaltplan: externe RTC DS1307 von Maxim IntegratedAbbildung 1: Die DS1307 ist ein gutes Beispiel für eine externe Echtzeituhr. Diese Echtzeituhren haben den Vorteil, dass sie über eigene Quarze und Stromschienen verfügen und es nicht zu Problemen mit dem Code kommen kann. Sie kommunizieren mit dem Host-Mikrocontroller über eine I2C-Schnittstelle. (Bildquelle: Maxim Integrated)

Selbstverständlich sollten unbedingt die Datenblätter betrachtet werden, um die Unterschiede zwischen diesen Komponenten zu sehen. Die DS1307 beispielsweise benötigt eine 5-Volt-Spannungsquelle sowie einen externen Quarz. Im Vergleich dazu kann die präzisere DS3231 mit einer Spannungsquelle von 2,3 V bis 5,5 V betrieben werden und sie ist mit einem integrierten temperaturkompensierten Quarz-Oszillator (TXCO) und einem Quarz ausgestattet.

Manchmal sind die Unterschiede zwischen diesen Komponenten nicht sofort erkennbar. Beispielsweise bieten beide Komponenten einen Rechteckwellenausgang, der, falls er per Software aktiviert wird, einen externen Pull-up-Widerstand benötigt. Für die DS1307 kann der Rechteckwellenausgang jedoch so programmiert werden, dass er ein Signal mit einer Frequenz von 1 Hertz (Hz), 4,096 Kilohertz (kHz), 8,192 kHz oder 32,768 kHz erzeugt. Im Vergleich dazu kann dieser Ausgang für die DS3231 so programmiert werden, dass er ein Signal mit einer Frequenz von 1 Hz, 1,024 kHz, 4,096 kHz oder 8,192 kHz erzeugt.

Bei der DS1307 ist die Genauigkeit der Uhr abhängig von der Genauigkeit des Quarzes sowie der Genauigkeit der Übereinstimmung zwischen der kapazitiven Last der Oszillatorschaltung und der kapazitiven Last, für die der Quarz geschnitten wurde. Im Vergleich dazu bietet die temperaturkompensierte DS3231 eine spezifischere Genauigkeitsangabe von ±2 Minuten pro Jahr von –40 °C bis +85 °C (Abbildung 2).

Schaltplan: temperaturkompensierter Quarzoszillator DS3231 von MaximAbbildung 2: Die DS3231 ist ein temperaturkompensierter Quarzoszillator mit einer Genauigkeit von ±2 Minuten pro Jahr für einen Temperaturbereich von –40 °C bis +85 °C. (Bildquelle: Maxim Integrated)

Wenn man also davon ausgeht, dass es bezüglich der Datenblätter zwischen diesen beiden Komponenten keine „Dealbreaker" gibt, wie würden Designer sie in der realen Welt bewerten? Eine Lösung wäre die Entwicklung und Erstellung kundenspezifischer Breakout-Boards (BOBs) sowie die zusätzliche Entwicklung des Codes, um sie anzusteuern. Schneller und kostengünstiger wäre die Verwendung serienmäßig produzierter Breakout-Boards und von Code, der im Rahmen der Hardware- und Softwareumgebungen von Arduino entwickelt wurde.

Beispiele für RTC-Breakout-Boards: Adafruit DS1307 und ChronoDot

Zwei beliebte Breakout-Boards für die ICs DS1307 und DS3231 sind das DS1307-Echtzeituhr-Breakout-Board 3296 (Abbildung 3) und das Breakout-Board 255 (ChronoDot Ultra-Precise Real-Time Clock V2.1) von Adafruit (Abbildung 4).

Abbildung: DS1307-RTC-Breakout-Board von AdafruitAbbildung 3: DS1307-RTC-Breakout-Board von Adafruit. (Bildquelle: Adafruit Industries)

Abbildung: Breakout-Board ChronoDot Ultra-Precise Real-Time Clock v2.1Abbildung 4: Breakout-Board ChronoDot Ultra-Precise Real-Time Clock v2.1. (Bildquelle: Adafruit Industries)

In Kombination mit einem geeigneten Microcontroller-Entwicklungsboard, beispielsweise dem Arduino Uno R3 und mithilfe von Open-Source-Bibliotheken und Beispielcode, der über das Internet heruntergeladen werden kann, können professionelle Entwickler von Embedded-Systemen und IoT-Geräten sofort mit ihrer Arbeit beginnen.

Sobald die Bewertungen der Entwickler abgeschlossen sind, können sie die entsprechenden Teile des Open-Source-Hardwaredesigns für die Breakout-Boards nehmen und direkt in ihre eigenen Designs integrieren. Auf ähnliche Weise können sie die Open-Source-Bibliotheken und den auf Basis der Open-Source-Beispiele entwickelten Code für ihre Produkte verwenden.

Tipps und Tricks zur Hardware für Softwareentwickler

Wie bereits erwähnt, kommunizieren sowohl die DS1307 als auch die DS3231 über einen seriellen I2C-Bus mit dem Host-Mikrocontroller. Einer der häufigsten Fehler, die Softwareentwicklern oftmals unterlaufen, ist, dass sie die für beide Signale (SCL und SDA) dieses Busses erforderlich Pull-up-Widerstände vergessen.

Weder das DS1307-Breakout-Board noch das DS3231-Breakout-Board (ChronoDot) von Adafruit sind mit diesen Widerständen ausgestattet, obwohl die ChronoDot über mit R1 und R2 gekennzeichnete Pads verfügt, an die sie angeschlossen werden können.

Der Grund dafür, warum keine Pull-up-Widerstände vorhanden sind, ist der, dass ein I2C-Bus mit mehreren Komponenten (ICs oder Breakout-Boards) verbunden werden kann. Der I2C-Bus verwendet eine 7-Bit-Adresse, für die 27 = 128 gilt. Die Adresse 0000000 ist jedoch eine Adresse für allgemeine Aufrufe, die zur Adressierung aller mit dem Bus verbundenen Komponenten verwendet wird, wodurch der Bus theoretisch 127 diskrete Komponenten unterstützen kann. In der Praxis wird die reale Anzahl der unterstützbaren Komponenten jedoch von der Kapazität des Busses vorgegeben, inklusive der Kapazität der Leiterbahnen und der Lasten, die auf insgesamt 400 Picofarad (pF) begrenzt ist.

Es gibt eine Formel, die von Hardwareentwicklern verwendet wird, um den Gegenwert mehrerer parallel geschalteter Widerstände zu berechnen. Für unseren Fall betrachten wir das folgende einfache Beispiel. Wenn zwei Komponenten identische Pull-up-Widerstände haben, ist der berechnete Widerstand halb so groß. Wenn vier Komponenten identische Widerstände haben, ist der berechnete Widerstand ein Viertel dieses Werts.

Ist bereits eine I2C-Komponente mit Pull-up-Widerständen vorhanden, ist kein weiteres Handeln erforderlich. Sind keine Pull-up-Widerstände vorhanden und ist sich der Entwickler absolut sicher, dass später kein Breakout-Board mit integrierten Pull-up-Widerständen hinzugefügt wird, sollten für die Pull-up-Widerstände am besten zwei Widerstände mit 4,7 Kiloohm (kΩ) verwendet werden. Wenn jedoch die Möglichkeit besteht, dass noch ein Breakout-Board mit Pull-up-Widerständen hinzugefügt wird, sollten an diesem Punkt zwei Widerstände mit 10 kΩ hinzugefügt werden, da diese sowohl vor als auch nach dem Hinzufügen des anderen Breakout-Boards zum Bus ihren Dienst verrichten.

Tipps und Tricks zur Software für Hardwareentwickler

Die Bibliothek „Wire“ ist eine Kommunikationsbibliothek, die die Zweidraht-Kommunikation mit I2C-Komponenten erleichtert. Für Arduino wird sie im Rahmen der integrierten Entwicklungsumgebung (IDE) bereitgestellt, sodass ein Entwickler am Anfang des Programms lediglich die Anweisung #include <Wire.h> hinzufügen muss.

Der wahre Trick besteht darin, eine geeignete RTC-Bibliothek zu finden. Die Bibliothek RTClib von Adafruit ist eine gute Wahl und kann von Github heruntergeladen werden. Fügen Sie als nächstes am Anfang des Programms die Anweisung #include "RTClib.h" hinzu.

Später, üblicherweise nach der Definition aller konstanten Werte, ist es an der Zeit, die Echtzeituhr mit der Anweisung RTC_ DS1307 RTC; oder RTC_DS3231 RTC; (abhängig vom verwendeten Breakout-Board) zu instanziieren.

Noch später, wenn alle Einstellungen im Programm vorgenommen werden (im Rahmen der Funktion setup() für einen Arduino-Sketch), müssen die Entwickler die Anweisungen Wire.begin(); und RTC.begin(); hinzufügen, um die I2C-Kommunikation und das RTC-Subsystem zu initialisieren.

Die auf der oben erwähnten Github-Seite bereitgestellten Beispiele ermöglichen es einem Designer im Handumdrehen, das aktuelle Datum und die genaue Uhrzeit einzustellen. Weniger offensichtlich ist, wie auf den Rechteckwellenausgang zugegriffen wird. Dieser Ausgang ist standardmäßig deaktiviert, um Strom zu sparen. Eine Möglichkeit, diesen Pin zu verwenden, besteht darin, ihn zu aktivieren und beispielsweise auf 1 Hz einzustellen. Dieses Signal kann dann verwendet werden, um am Host-Mikrocontroller einen Interrupt auszulösen.

Einem Softwareentwickler wird es keine Schwierigkeiten bereiten, alle hierfür erforderlichen Schritte im Bibliothekscode durchzuführen. Für einen Hardwareentwickler kann es jedoch problematischer sein, sich durch diesen Code zu arbeiten. Daher lautet eine kurze Zusammenfassung wie folgt:

Für die DS1307 müssen lediglich eine oder mehrere Anweisungen der Form RTC.Ds1307SqwPinMode(<option>); hinzugefügt werden, wobei die für „option“ unterstützten Werte ON, OFF, SquareWave1HZ, SquareWave4kHz, SquareWave8kHz und SquareWave32kHz lauten.

Ebenso müssen für die DS3231 eine oder mehrere Anweisungen der Form RTC.Ds3231SqwPinMode(<option>); hinzugefügt werden, wobei die für „option“ unterstützten Werte ON, OFF, DS3231_SquareWave1Hz, DS3231_SquareWave1kHz, DS3231_SquareWave4kHz und DS3231_SquareWave8kHz lauten.

Fazit

Aufgrund kleinerer Teams und immer kürzeren Markteinführungszeiten müssen sich die Entwickler mehreren Fachbereichen und Aufgaben widmen und dabei fortwährend nach Möglichkeiten suchen, die Bewertung von ICs, Sensoren und Peripheriebausteinen zu beschleunigen und die hierfür nötigen Ausgaben zu senken. Dies ist möglich durch die Verwendung von Arduino in Kombination mit Open-Source-Hardware in der Form von Breakout-Boards (BOBs) für Sensoren und Peripheriebausteine und Open-Source-Software in der Gestalt von Bibliotheken und Beispielprogrammen.

 
DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Max Maxfield

Clive „Max“ Maxfield

Clive „Max“ Maxfield erhielt 1980 seinen BSc in Regelungstechnik von der Sheffield Hallam University, England, und begann seine Karriere als Entwickler von Zentraleinheiten (CPUs) für Großrechner. Im Laufe der Jahre hat Max alles von Siliziumchips bis hin zu Leiterplatten und von Gehirnwellenverstärkern bis hin zu Steampunk-Prognosemaschinen (bitte nicht fragen) entwickelt. Darüber hinaus ist er seit mehr als 30 Jahren an der Spitze der Electronic Design Automation (EDA) tätig.

Max ist Autor und/oder Co-Autor einer Reihe von Büchern, darunter „Designus Maximus Unleashed“ (in Alabama verboten), „Bebop to the Boolean Boogie“ (Ein unkonventioneller Leitfaden zur Elektronik), „EDA: Where Electronics Begins“, „FPGAs: Instant Access“ und „How Computers Do Math“. Werfen Sie auch einen Blick auf seinen Blog „Max's Cool Beans“.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey