Arduino MAX485 Library

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn

Letzte Artikel von swarkn (Alle anzeigen)

Hallo zusammen,

EDIT (05.05.2015): Projektseite mit mehr Details erstellt.

vor ein paar Tagen habe ich euch in meinem Blogpost über das „TTL to RS-485 module“ berichtet. Nun möchte ich euch gerne zeigen, wie Ihr damit über einfachste Methoden eine Kommunikation zwischen zwei Arduinos aufbauen könnt. Dazu habe ich eine „Arduino MAX485 Library“ (s. github) geschrieben, die euch dabei helfen kann.

Zu allererst stellt folgende Verdrahtung her:

Arduino MAX485 LibraryDas passt alles super auf ein Breadboard. Keine Angst wegen der fehlenden Widerstände. Auf diese Entfernung spielt das keine Rolle. Wenn ihr wie ich die großen TTL to RS-485 Module habt, kein Problem. Ich habe mir mit einem Testboard (s. Titelbild) ausgeholfen. Hier die Verdrahtung in tabellarischer Form:

Arduino LinksMAX485 Links
VIN5V
GNDGND
D8Pin2 (RE)
D9Pin3 (DE)
D10Pin1 (RO)
D11Pin4 (DI)
MAX485 LinksMAX485 Rechts
Pin8 (VCC)5V
Pin7 (B)Pin7 (B)
Pin6 (A)Pin6 (A)
Pin5 (GND)GND

Der rechte MAX485 muss natürlich analog des linken MAX485 aber mit dem rechten Arduino verbunden werden. Damit ist der Testaufbau beendet.

Verwenden der Arduino MAX485 Library

Ladet jetzt die MAX485 Bibliothek von uns aus github herunter. Diese eignet sich übrigens hervorragend, um eigene kleine anwendungsspezifische Protokolle zu schreiben. Extrahiert die ZIP-Datei in euren libraries-Ordner. Es müsste sich nun ein „MAX485-master“ Ordner darin befinden. Benennt diesen einfach in „MAX485“ um. Jetzt seid ihr startklar.

Programmiert den linken Arduino mit dem „EIA-485_Master“ Sketch. Den rechten Arduino programmiert ihr mit dem „EIA-485_Slave2USB“ Sketch.

Um die Funktion des Testaufbaus zu verfolgen, belasst den rechten Arduino via USB am PC verbunden und öffnet die serielle Konsole des USB-Ports. Die Ausgabe sollte ungefähr so aussehen:

Arduino MAX485 Library

Unter Umständen kann – wie auf dem Screenshot zu sehen – die Übertragung gerade bei den ersten Bytes nicht fehlerfrei verlaufen. Ein Grund, weswegen man sich bei eigenen Protokollentwicklungen sicher das ein oder andere zum Thema Error-Detection einfallen lassen muss.

Ich hoffe ihr findet den Artikel und meine einfache Arduino MAX485 Library irgendwie hilfreich. 🙂

Viel Spaß dabei,
Swarkn

pinterest

TTL to RS-485 module

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn

Letzte Artikel von swarkn (Alle anzeigen)

Hallo zusammen,

ich möchte euch heute gerne die Baugruppe „TTL to RS-485 module“ vorstellen.

EDIT (02.05.2016): Wiring ergänzt.
EDIT (03.05.2016): Einfache Arduino MAX485 Library geschrieben.
EDIT (05.05.2015): Projektseite mit mehr Details erstellt.

Die beschriebene Baugruppe selbst ist nicht brandneu. Wann sie allerdings das erste Mal erschienen ist konnte ich nicht herausfinden. Erste Schaltungsbeispiele kommen aber aus den 90er Jahren.

Sie ermöglicht Daten über Distanzen von bis zu 1.2km zu übertragen, welche mit I2C oder OneWire nie erreicht werden könnten. Im Grunde konvertiert sie Serielle Bit-Stöme und überträgt diese via dem technischen Standard RS-485 (eigentlich EIA-485) über eine Zweidrahtverbindung zu einem Empfänger.

Der EIA-485 Standard stellt bei Verbindungen zu anderen Geräten die physische Verbindungsschicht des OSI Schichtenmodells dar und beschreibt daher nur die physischen und elektrischen Spezifikationen einer Datenübertragung. Von einem Übertragungsprotokoll wie IP (OSI Schicht 3) oder TCP (OSI Schicht 4) sind wir hier mal ganz weit weg.

Trotzdem – wenn so vieles fehlt, warum kann die Baugruppe so interessant sein und wie kann sie in räumlich verteilten Projekten gut eingesetzt werden? Den Antworten auf diese Fragen möchte ich mich in der folgenden Baugruppenbeschreibung nähern.

Beschreibung „TTL to RS-485 module“

Baugruppe

NameTTL to RS-485 module
Revisionunbekannt
Designunbekannt
Herstellerunterschiedlich (z.B. LC Tech. Inc)

Beschreibung

Der Hauptzweck dient der Verwendung einer standardisierten physischen Verbindung von mehreren Busteilnehmern. Man würde sich für die Verwendung beispielsweise deshalb entschieden, um keinen eigenen Verbindungsstandard zwischen einzelnen Baugruppen oder Sensoren entwickeln zu müssen.

Der EIA-485 Standard sieht das Verbinden von bis zu 32 Slaves (Empfänger) an einen Master (Sender) vor. Dabei sind je nach Kabellänge Übertragungsgeschwindigkeiten von bis zu 12Mbps möglich.

Die Baugruppe bietet eine vollständige Schaltung eines EIA-485 Schnittstellentreibers/-Empfängers, welche direkt kompatibel zu der seriellen Schnittstelle eines Arduinos ist.

Schaltungsbeispiele eines Schnittstellentreibers findet ihr unter anderem in einem pdf-Dokument auf embeddedsys.com.

Wie man einen EIA-485 Bus aufbaut, findet ihr in einem sehr guten pdf-Dokument von Texas Instruments.

Übertragungsprotokolle

Da es keine spezielle Treibersoftware für diese Baugruppe gibt, möchte ich euch hier auf einige mögliche Protokolle zur Kommunikation zwischen Busteilnehmern hinweisen.

MODBUShttp://www.modbus.org

Download | Spezifikation

PROFIBUShttp://www.profibus.com

kein Download | Spezifikation

DMXhttp://www.esta.org (auch RDM)

Download | Spezifikation

Chipsatz

MAX485maxim integrated

Bilder der Baugruppe

 TTL to RS-485 moduleTTL to RS-485 module

 Das Wiring

Arduino UNO/NanoTTL to RS-485 module
GNDGND
5VVCC
RxD (digital Pin 0)RO (receiver output)
TxD (digital Pin 1)DI (driver input)

Das Wiring (Control Input Voltage)

is master, sending:
receiver output enable (RE)=HIGHreceiver output (RO) = disabled
driver output enable (DE)=HIGHY & Z mode: driver output
is slave, listening:
receiver output enable (RE)=LOWreceiver output (RO) = enabled
driver output enable (DE)=LOWY & Z mode: line receivers
is master, not sending:
receiver output enable (RE)=HIGHreceiver output (RO) = disabled
driver output enable (DE)=LOWY & Z mode: line receivers

Original Beispiel-Code

MODBUS/tree/master/examples/Basic/Basic.pde

Unser Beispiel-Code

 Leider gibt es aktuell noch keinen Beispiel-Code von uns. Möglich wäre aber:

– Netzwerk mehrerer Umgebungssensoren (Temperatur, Luftfeuchtigkeit, Luftdruck, etc.)

Viel Spaß!

swarkn

pinterest