Angetestet: Arduino Due
Seite 2: Ein- und Ausgänge
I/O: Ein- und Ausgänge
Die einfachste Verbindung mit der Außenwelt (sprich: weiteren elektronischen Bauelementen) stellt der Due über die zahlreichen I/O-Pins her, die auf der Platine deutlich durchnummeriert sind. Wie beim Mega stehen 54 Pins zur Verfügung, die man in der IDE mit dem Befehl pinMode
als digitalen Ein- oder Ausgang definieren kann. Per digitalRead
und digitalWrite
kann man dann den logischen Zustand (0 oder 1) messen oder setzen. So kann man an einem Eingang z.B. die Stellung eines Schalters feststellen oder eine LED ein- und ausschalten. Die Pins 2 bis 13 sind außerdem PWM-fähig, können also sehr schnell zwischen Ein- und Ausschaltzustand wechseln. Über diese "Pulsbreitenmodulation" kann man z.B. LEDs dimmen. Auch Servomotoren aus dem Modellbau erhalten darüber ihre Positionsinformation. Die Arduino-Standard-Auflösung von 8 Bit setzt man beim Due über den Befehl analogWriteResolution
auf 12 Bit hoch.
An der unteren Anschlussleiste liegen Arduino-typisch die Analog-Eingänge, von denen der Due 12 Stück mitbringt. Die hier anlegbare Spannung kann von Potentiometern oder zahlreichen anderen Sensoren kommen, die eine physische Größe messen. Bisherige Arduinos hatten nur einen 10-Bit-Wandler an Bord, beim Due wird mit einer Auflösung von 12 Bit digitalisiert. Die Funktion analogRead
kann also eine Zahl zwischen 0 und 4095 zurückliefern, wenn man über den neuen Befehl analogReadResolution
die Auflösung hochsetzt.
Noch ein Feature der Analog-Eingänge: Sollten die 54 digitalen Pins nicht ausreichen, kann man auch die analogen Pins digital nutzen und in der IDE mit den Pin-Nummern 54 bis 65 ansteuern.
Besonders bei den Analog-Pins muss man bei der Verwendung bisheriger Arduino-Peripherie darauf achten, dass sich beim Due alles zwischen 0 und 3,3 Volt abspielt: Ein Sensor, der bei Vollausschlag klassisch 5 Volt in den Eingang leitet, wird diesen wahrscheinlich beschädigen.
Serielle Kommunikation
Wie bei allen Arduinos läuft die serielle Kommunikation mit dem Computer über die Pins 0 und 1 alias TX0 und RX0. Sie sind auf der Platine mit dem kleinen USB-Kommunikationschip (ATmega16u2) verbunden und sollten daher bei eigenen Verschaltungen nicht benutzt werden. (Auf den kleinen Arduinos wurden manchmal die Pins knapp und daher diese zwei Leitungen auch benutzt, auf Kosten der USB-Verbindung. Die große Anzahl von Anschlüssen am Due macht solche Tricksereien in fast allen Fällen unnötig.) Für die serielle Kommunikation hat der Due dafür drei weitere UART-Anschlusspaare an Bord, TX/RX 1 bis 3. Sie liegen auf den Digitalpins 14 bis 19.
Das Kommunikationsprotokoll I²C wird von Atmel als TWI ("Two Wire Interface") bezeichnet. Der Due hat zwei I²C-Kanäle: SDA und SCL liegen auf Pins 20/21, SDA1 und SCL1 ganz links an der oberen Anschlussleiste neben dem Anschluss AREF. (Dort liegt auch beim Uno, Mega2560 und Leonardo der I²C-Bus, sodass entsprechende Shields das Signal dort von allen aktuellen Arduino-Modulen abgreifen können.) Die Arduino-Library zur Ansteuerung des I²C-Busses heißt Wire.
Ein weiterer serieller Standard ist SPI, der bei allen Arduinos auf der sechspoligen Stiftleiste in der Mitte der Platine anliegt. SPI benötigt drei Leitungen, MOSI, MISO und SCK sowie für jeden angeschlossenen Slave eine weitere Leitung zur Aktivierung (SS). Über dieses Protokoll kommunizieren fast alle Arduino-Shields mit SD-Kartenslots und Ethernet-Anschlüssen, auch die offiziellen Shields von Arduino. Ältere Shields, die noch am Uno (und Vorgängern) liefen, werden am Due möglicherweise schweigen: Sie greifen die SPI-Leitungen nicht über den mittleren Anschluss (meist mit ICSP bezeichnet) ab und bekommen daher keine Verbindung.
Der SAM3X-Prozessor des Arduino Due stellt zudem im Vergleich zu früheren Arduinos einen erweiterten SPI-Funktionsumfang zur Verfügung, der die Konfiguration der Slave-Geräte (Aktivierung, Taktrate, Datenmodus) automatisch vornimmt. Die SPI-Library, die mit der Arduino-IDE Version 1.5 ausgeliefert wird, wurde entsprechend erweitert.
Erstmalig findet sich auch ein CAN-Bus direkt auf einem Arduino: Das serielle Bussystem wird vor allen zur Vernetzung der Systeme in Autos eingesetzt, kommt aber auch in der Automatisierungstechnik und bei der Steuerung von Modell-Eisenbahnen zur Anwendung. Auf der Platine ist nur ein Bus mit CANRX und CANTX gekennzeichnet, auf zwei weiteren Pins liegt aber noch ein zweiter Bus (DAC0 und D53). Bisher gibt es jedoch noch keine Unterstützung für das Protokoll durch die Arduino-Software, die Entwicklung hat im Arduino-Forum aber bereits begonnen.