serielle schnittstellen (uarts) - darc.de · der usb-sbuchse, die als serielle schnittstelle...
TRANSCRIPT
30.05.14 Serielle Schnittstelle 1
Serielle Schnittstellen (UARTs)
25.10..2013 A.Schultze, DK4AQ
● Serielle Signale● Serielle Schnittstellen am Arduino Nano● Serial Library für Hardware UARTs● SoftSerial Library für Software-UARTs● Der Baustein FT232● Breakout Boards mit USB-Seriell-Konvertern● Experiment TestSoftSerial● Anhang ASCUII-Tabelle● Anhang USB Signale und Protokolle
30.05.14 Serielle Schnittstelle 2
Für viele Aufgaben werden serielle Schnittstellen benötigt. Sie stellen eine ziemlich alteForm der seriellen Kommunikation dar. Die ersten Anfänge stammen aus der Zeit dermechanischen Streifenschreiber 1930er-Jahre).Es handelt sich um eine asynchrone serielle Datenübertragung mit Start- und Stop-Bits.
Quelle:wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
Signalform Serielles Signal (a)
30.05.14 Serielle Schnittstelle 3
Als Zeichensatz wurden internationale Codes verabredet. Einer diese Code-Sätze warder ASCII-Code (American Standard Code for Information Interchange). Er konnte fürden englischsprachigen Raum alle benötigten Zeichen für eine schriftlicheKommunikation darstellen. Fernschreiber (Teletypes, TTY) wurden zu Beginn derComputerentwicklung als Ein-Ausgabe-Geräte verwendet und daher arbeitet dieComputertechnik noch heute mit diesem bzw. angepassten Zeichensätzen beiZeichen-orientierten Daten. Der PC-Zeichensatz ist ein angepasster ASCII-Zeichensatz. (siehe Anhang)
Die Zuordnung der logischen Zustände zum Leitungspegel wurde über denamerikanischen EIA-Standard RS-232 geregelt. Ursprünglich wurden für den Wert „1“-3V...-15V definiert, für den Wert „0“ waren es +3...+15V. Die Daten wurden über 3Leitungen übertragen ( RXD,TXD,GND)RS-232 definierte auch zusätzliche Steuersignale, die zum Aufbau einer Verbindungüber ein Telefonnetz dienten und ausserdem einen Überlauf des Empfängersverhinderten. (DTE,DCS,RTS, CTS). Solche Schnittstellen waren bis zu den PCs derletzten Generation noch Standard-Schnittstellen.
In der Mikrorechnertechnik wird die serielle Kommunikation noch häufig verwendet,jedoch häufig mit logischen Pegeln (z.B. 0V, 5V). Die Signale werden meist vonspezieller Hardware erzeugt (UART, Universal Asynchronous Receiver Transmitter).Man kann jedoch durch entsprechendes Schalten von Port-Pins auch per Softwaresolche Signale erzeugen oder Lesen
Signalform Serielles Signal (b)
30.05.14 Serielle Schnittstelle 4
Startbit Stopbit„1“„2“„4“„8“„1“„2“„4“„8“
2 3lowhigh
32h ASCII-Character „2“
Serielle Daten auf TTL-Level
5V = „1“
0V = „0“
30.05.14 Serielle Schnittstelle 5
Microcontroller haben bis auf wenige Ausnahmen solche UARTs an Bord. Die beiArduino verwendeten Prozessoren haben mindestens eine UART, teilweise mehrere.
Der Arduino Nano hat eine hardwaregesteuerte serielle Schnittstelle auf dem Chipverfügbar (Atmega328).
Für dieses Hardware-Schnittstellen gibtes Libraries, die eine einfache Nutzungermöglichen.
Benötigt man mehr serielle Schnitt-stellen, dann gibt es die Möglichkeit perSoftware alle verfügbaren Digital-IO-Pins als RX/TX-Leitungen zu verwen-den.
Hardware-UARTs sind eigenständigabeitende HW-Automaten, die nachÜbergabe ohne Software-Zutun 1 Bytesenden oder empfangen können.Software-UARTs benötigen Rechenzeit und Speicher, sind also langsamer.Ausserdem kann immer nur eine Software UART gleichzeitig hören !!!
Hardware-/Software-UARTs
30.05.14 Serielle Schnittstelle 6
Funktion Bedeutung Rückgabewertif (Serial[x]) Anfrage ob die spezifizierte Schnittstelle x
betriebsbereit ist. (Nano UART: x weglassen)True: Schnitt-stelle vorhanden
available() Kontrolle ob Zeichen empfangen wurden AnzahlempfangenerZeichen
begin(baudrate) Start der Schnittstellensoftware mit Einstellungder Baudrate
keiner
end() Stoppen der Schnittstellensoftware keinerfind(string) Durchsuchen der empfangenen Zeichen nach
einem StringTrue: Stringgefunden
findUntil(string,terminator)
Durchsuchen der empfangenen Zeichen nacheinem String oder nach einem Terminator-String
True: String oderTerminatorgefunden
flush() Programm wartet bis alle Zeichen aus demSendepuffer gesendet wurden
keiner
parseFloat() Sucht nach dem ersten gültigen Float-Wert GefundenerFloat-Wert
parseInt() Sucht nach dem ersten gültigen Int-Wert Gefundener Int-Wert
Serial Library für Hardware UARTs (1)
30.05.14 Serielle Schnittstelle 7
Funktion Bedeutung Rückgabewertpeek() Lesen eines Zeichens aus dem
Empfangspuffer ohne Zeichen dort zulöschen
Erstesempfangenes Byte
print(x,Zahlensyst) Sendet einen Wert im gewähltemZahlensystem oder Character. Character wirdin Hochkomma gesetzt (' ')
Anzahl dergesendetenzeichen
println() Ausgabe eines Wertes im gewähltemZahlensystem oder String mitanschließendem CR/LF
Anzahl dergesendetenzeichen
read() Liest einen empfangenes Byte Erster gelesenerWert oder -1 (leer)
readBytes(Puffer,Länge)
Liest empfangene Bytes in einen Puffer mitmaximaler Länge
Anzahl dergesendeten Bytes
readBytesUntil(Terminator, Puffer, Länge)
Liest empfangene Bytes in einen Puffer mitmaximaler Länge bis ein Terminator-Werterscheint
Anzahl dergesendeten Bytes
setTimeout(Zeit) Setzen einer Timeout-Zeit bei allenOperationen, die auf einen Terminator warten
keiner
Serial Library für Hardware UARTs (2)
30.05.14 Serielle Schnittstelle 8
Funktion Bedeutung Rückgabewertwrite(x) Senden von Bytes, Strings oder Puffer mit
vorgegebener LängeAnzahl dergesendeten Bytes
serialEvent(routine) Nutzung des Empfangs-Interrupts, mit derRoutine kann das(die) Zeichen abgeholtwerden
= häufig verwendet Funktionen
Diese Library wurde für die Hardware-UARTs der Arduino-Boards entwickelt.Alle Aufrufe werden unter Vorsatz von „Serial.“ aufgerufen. Damit erreicht man die UARTder USB-SBuchse, die als serielle Schnittstelle genutzt wird. Auf Boards mit mehrerenHardware- UARTs kann man „Serial1.“ „Serial2.„ oder „Serial3.“ verwenden..
Serial Library für Hardware UARTs (3)
30.05.14 Serielle Schnittstelle 9
Funktion Bedeutung RückgabewertSoftwareSerial(rxPin,txPin)
Deklaration eines Objektes vom TypSoftwareSerial. SoftwareSerial mySerial =SoftwareSerial(rxPin, txPin);
True: Schnitt-stelle vorhanden
available() Kontrolle ob Zeichen empfangen wurden AnzahlempfangenerZeichen
begin(baudrate) Start der Schnittstellensoftware mit Einstellungder Baudrate
keiner
isListening() Test, ob die spezifizierte serielle Schnittstelle aktiv auf Eingangssignale hört
True: Schnittstellehört zu
overflow() Kontrolle, obseit dem letzten Lesen der eineÜberlauf des Empfangs-Puffers passiert
True: Überlauf istpassiert, ungültigerPufferinhalt
peek() Lesen eines Zeichens aus demEmpfangspuffer ohne Zeichen dort zu löschen
ErstesempfangenesByte
print(x,Zahlensyst) Sendet einen Wert im gewähltemZahlensystem oder Character. Character wirdin Hochkomma gesetzt (' ')
Anzahl dergesendetenzeichen
SoftSerial für Software-UARTs (1)
30.05.14 Serielle Schnittstelle 10
Funktion Bedeutung Rückgabewertprintln() Ausgabe eines Wertes im gewähltem
Zahlensystem oder String mitanschließendem CR/LF
Anzahl dergesendetenzeichen
read() Liest einen empfangenes Byte Erster gelesenerWert oder -1 (leer)
write(x) Senden von Bytes, Strings oder Puffer mitvorgegebener Länge
Anzahl dergesendeten Bytes
listen(serielles Objekt) Nur eine Software-UART kann gleichzeitighören. Wenn Zeichen bei anderen UARTseintreffen, dann werden si nichtaufgenommen !
keiner
Serial Library für Hardware UARTs (2)
30.05.14 Serielle Schnittstelle 11
Übertragung serieller Daten über USB-Verbindungen zum PC
Wenn man eine serielle Verbindung zum PC herstellen will und es heutzutage an PCskeine seriellen Schnittstellen gibt, verwendet man meist die mehrfach vorhandenenUSB-Schnittstellen. Dazu werden Seriell-zu-USB-Umsetzer verwendet. Auf derÜbertragungsleitung wird mit USB-Kabeln und USB-Protokoll übertragen. Auf derEmpfangsseite werden die übertragenen Daten wieder umgesetzt und über COM-Treiber dem PC zur Verfügung gestellt. Über diese COM-Treiber können alleProgramme auf die Daten zugreifen, die für serielle Schnittstellen geschrieben wurden.Ein Beispiel dafür sind Programme, die ein Datenterminal emulieren, z.B. Arduino´sSerial Monitor , Terminal-Emulatoren sind z.B. HyperTerminal , TeraTerm und PuTTY.
Beispiel für einen Serial-USB-Umsetzer ist der Schaltkreis FT232 Er kann auf der einenSeite USB-Signale und auf der anderen Seite serielle Signale mit logischen Pegelnverarbeiten. Auf der USB-Seite liefert er Kennungen, die mit dem zugehörigen Treiberder Herstellerfirma einen Verbindungsaufbau zu einer COM-Schnittstelle am PCerlauben.
Eine so installierte Verbindung wird unter Windows genau wie eine echte serielleSchnittstelle sichtbar. Will man also kontrollieren, ob eine serielle Schnittstelle desArduino funktioniert, dann braucht man so einen Konverter.
30.05.14 Serielle Schnittstelle 17
Von vielen verfügbaren Anschlüssen braucht man glücklicherweise meist nur die
mit * gekennzeichneten Anschlüsse
Anschlussbelegung FT232
30.05.14 Serielle Schnittstelle 18
SparkfunBreakout Board for FT232RL USB to SerialBOB-00718
Schaltung
30.05.14 Serielle Schnittstelle 19
TXD
DTR RTS
VCC
IOR
XD RI
GN
DD
SRD
CD
GN
DTX
LED
RXL
EDVC
CV3
.3C
TSSL
EEP
TXD
ENPW
REN
SparkfunBreakout Board for FT232RL USB to SerialBOB-00718
Anschlüsse
30.05.14 Serielle Schnittstelle 21
Anwendung von Hardware- und Software-UART
Es wird die eingebaute serielle Schnittstelle mit FT232-Umsetzer der Arduino Nanoverwendet und zusätzlich eine serielle Schnittstelle, die such die Pins D2 und D3 gebildetwird und mit der Library SoftSerial betrieben wird. Es soll auf beiden Seiten ein Terminal-Programm laufen und die Terminals sollen miteinander kommunizieren können.
30.05.14 Serielle Schnittstelle 22
Allgemeine Anmerkung:Der FT232 kann auf der Seite der Seriellen Schnittstelle mit 3,3V oder 5V arbeiten.Einige Boards sind festgelegt auf eine der Spannungen, andere haben Lötbrücken oderwie in diesem Falle einen Umschalter. Die Boards haben ebenfalls festeAusgangspegel. Es besteht nun die Gefahr, dass ein auf 3,3V konfiguriertes FT232-Board mit 5V Signalen gespeist wird, was zur Zerstörung führen kann ! 2 Widerständein den Signalleitungen bieten da einen gewissen Schutz und erlauben eine Messungmit dem Oszilloskop, ob das Signal am Eingang des FT232 begrenzt wird.Die Speisung der Bausteine ist ebenfalls eine Gefahr. Die beste Lösung ist, dass hierbeide USB-Konverter vom angeschlossenen Gerät gespeist werden.
FTDI Breakout Reloadedhttp://www.watterott.com/de/FTDI-Breakout-Reloaded-V11
Auch mit diesem Konverter Board kann man die Seriell-USB-Umsetzung durchführen.Bei eigenen Projekten kann man den Konverter-Chip mit auf die Leiterplatte bringen..
Das Board kann mit dem gleichen Programm betrieben werden.
30.05.14 Serielle Schnittstelle 26
Auf dem Serial Monitor auf COM1 wird ein Text eingegeben (Textfenster) und mit Returnabgeschickt. Das Terminal PuTTY auf COM6 empfängt die Zeichen von der Software-gesteuerten UART. Das funkltioniert auch in die andere Richtung.
COM1
COM6
COM6
Textübertagung vonTerminal zu Terminal
30.05.14 Serielle Schnittstelle 29
[Quelle: ftp://ftp.ccc.de/congress/2004/papers/080%20USB-Unbekannter%20Serieller%20Bus.pdf]
[Quelle: Wikipedia.org]
Leitungssignaleund ihreBedeutung
Anhang: USB Signale und Protokolle (a)
30.05.14 Serielle Schnittstelle 30
[Quelle: ftp://ftp.ccc.de/congress/2004/papers/080%20USB-Unbekannter%20Serieller%20Bus.pdf]Empfehlenswerte Gesamtdarstellung :
Anhang: USB Signale und Protokolle (a)
Protokollschichten
30.05.14 Serielle Schnittstelle 31
[Quelle: http://www.tu-chemnitz.de/informatik/RA/news/stack/kompendium/vortraege_97/usb/protokol.html]
Anhang: USB Signale und Protokolle (c)
30.05.14 Serielle Schnittstelle 32
[Quelle: http://www.tu-chemnitz.de/informatik/RA/news/stack/kompendium/vortraege_97/usb/protokol.html]
Anhang: USB Signale und Protokolle (d)