Benutzer:Malzeit/Serial-IO-Expander

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Der Serial-IO-Expander stellt alle wichtigen Mittel zur Verfügung um eine Schnittstelle zwischen der elektronischen Welt und dem PC zu bilden. Die Kommunikation erfolgt über die serielle Schnittstelle (USB mit eigenen Treiber wäre nur unnötiger Aufwand). Für Ein- und Ausgabe stehen digitale Ports mit zur Verfügung und negative Flankenerkennung vereinfacht die Nutzung von Tastern. Ein besonderes Merkmal bildet der D/A-Wandler, um den sich vergleichbare Projekte gerne drücken und natürlich steht auch ein A/D-Wandler zur Verfügung. Das nächste Highlight stellt das Konzept zur Kommunikation über die serielle Schnittstelle dar, bei der ein Augenmerk auf schnelle und zuverlässige Kommunikation liegt.

Übersicht

Blockschaltbild


Port #1 und Port#2 verfügen über je 4 digitale Ein- und Ausgänge. Port #3 ist der analoge Eingang für 0..12V und liefert als Spannung 5 V und 12 V. Der analoge Ausgang stellt auch 5 V und 12 V am Stecker bereit und die Ausgangsspannung hat den Bereich 0..12V.

Serielle Kommunikation

Der IO-Expander kennt drei Befehle, die ID programmieren (wird später noch erklärt) sowie die IO auslesen und schreiben. Unmittelbar nach dem Schreiben der antwortet der Serial-IO-Expander in dem er den aktuellen Zustand der IO zurückmeldet.

Aufbau der Telegramme

Alle Werte hexadezimal in Kleinbuchstaben: "0123456789abcdef"

PC -> IO-Expander
>xx,xx,x,xx,xxx,xxx,xxx,xxx+xx\r
1         *         *         *
  • Header ">"
  • ID, zwei Zeichen
  • Version, zwei Zeichen
  • Packet-Counter, ein Zeichen
  • 2x Digital Ausgänge a 4-Bit, zwei Zeichen
  • 4x Analog Ausgänge a 12-Bit, jeweils drei Zeichen
  • 1x Prüfsumme, (+xx) zwei Zeichen
  • 1x Footer, "\r" -> binär 0x0d
IO-Expander -> PC
#xx,xx,x,xxx,xx,xx,xx,xxx,xxx,xxx,xxx,xxx,xxxx+xx\r
1        *         *         *         *         *
  • Header "#"
  • ID, zwei Zeichen
  • Version, zwei Zeichen
  • Packet-Counter, ein Zeichen
  • Zeit zwischen letztem Paket in ms, drei Zeichen
  • Status-Bits für IO-Expander
  • 2x Digitale Eingänge a 4-Bit, zwei Zeichen
  • 2x Digitale Eingänge Flankenerkennung (fallend) a 4-Bit, zwei Zeichen
  • 4x Analog Ausgänge a 12-Bit, jeweils drei Zeichen
  • Interne 12 V Spannungsüberwachung a 12-Bit, drei Zeichen
  • Frequenzzähler (TODO)
  • 1x Prüfsumme, (+xx) zwei Zeichen
  • 1x Footer, "\r" -> binär 0x0d
ID-Programmierung (PC -> IO-Expander)
>ff,xx,xx
  • Header ">"
  • ID "ff"
  • Version
  • Zu programmierende ID

Die ID innerhalb von 30 Sekunden nach dem Reset programmiert werden, danach aktiviert sich eine Sperre.

Prüfsumme

Dir Prüfsumme entsteht aus der Quersumme des binären ASCII-Wertes aller Zeichen ohne Header bis vor dem "+" der Prüfsumme.

Ablauf

TODO

Aufbau

TODO

Anwendungsbeispiel

TODO Perl, nicht optimal
Perl für kleine Helfer-Programme innerhalb von Linux&Co konzipiert

Features

  • Serielle Schnittstelle mit 8 Bit, keine Parität und 1 Stopbit
  • 8 digitale Ein- sowie 8 digitale Ausgänge
  • 4 analoge Ausgänge
  • 4 analoge Eingänge

Alternativen

Dateien

TODO

  • disable Taster
  • Frequenzzähler
  • ausführliche Fehlerbehandlung
  • Umsetzung in C (wird wahrscheinlich keine Zeit vorhanden sein :-\)

[[Kategorie:Projekte]]