Dieses Blog durchsuchen

Sonntag, 10. Februar 2013

[Projekt] Raspberry Pi UART und der Asuro

 Erforderliche Grundlagen: Console öffnen, Editor bedienen, Elektronik stecken können.

Hi.

Heute werden wir uns dem Thema UART des Raspberry Pi zuwenden. Ich habe hier seit einiger Zeit den Asuro von Arexx herumliegen und hatte, bis ich den Pi hatte, leider keine Verwendung dafür. Ich hatte ganz einfach das Problem, dass ich die Version mit dem RS-232 IR Transceiver habe. Leider hat mein PC, wie die meisten heutzutage, keinen RS-232 Anschluss mehr. Somit hätte ich zwar auf anderen Weg eine Schnittstelle wählen können (USB-UART Bridge), doch irgendwie hatte ich bisher keinen Antrieb. Dies änderte sich als ich den Pi in den Händen hielt. Endlich ergab alles einen Sinn ;) Ich verwende einfach die UART des Pi!

RS232 Modul des Asuro

Dazu müssen wir  uns ersteinmal der Seriellen Schnittstelle des Raspberry Pi zuwenden. Diese können wir nämlich nicht einfach benutzen wie wir es wollen.
Unsere kleine Himbeere ist ziemlich kontaktfreudig konfiguriert und gibt somit den gesammten Bootvorgang auch seriell aus. Weiterhin ist es möglich sich auf dem Pi über die serielle Verbindung anzumelden. Dies stört uns natürlich wenn wir den kleinen mit dem Asuro verbinden wollen. Also heist es erstmal:

UART Freimachen


In den Standardeinstellungen bekommt ihr folgendes Bild wenn ihr euch über die Serielle Verbindung mit dem Pi verbindet.



Pi konfigurieren


Dazu müssen wir uns nur zwei Dateien zuwenden.

/boot/cmdline.txt
/etc/inittab

CMDLine.txt
 
Wenden wir uns nun der ersten Datei zu. Die Datei /boot/cmdline.txt regelt den Bootvorgang des Pi und gibt ihm beim Booten die Optionen wo er zum Beispiel das Root Verzeichniss findet.
Unbearbeitet schaut die Datei folgendermaßen aus.

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Diese Optionen sagen dem Pi beim Bootvorgang nun das er auf der Console "ttyAMA0" die Bootlogs ausgeben soll. Die Option "root=....." sagt ihm wo er das root Verzeichniss findet. Wir müssen also nur den Bereich mit der Seriellen Schnittstelle bearbeiten. Dazu ändern wir

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1

in

dwc_otg.lpm_enable=0 console=tty1

ACHTUNG!!!

Die Einträge hinter "console=tty1" müssen alle bestehen bleiben!!! Sonst findet euer kleiner beim Hochfahren das root-Verzeichniss nichtmehr und bleibt beim Booten mit ner Kernel Panic hängen!!!

Somit schaut unsere cmdline.txt nun folgendermaßen aus.

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Wie aus nano gewohnt speichern wir die Datei mit "strg+o" und schliesen sie mit "strg+x"

Inittab 
 
Nun ist die Datei "/etc/inittab" an der Reihe. In ihr ist geregelt das die Serielle Schnittstelle zum Einloggen benutzt werden kann. Dazu Öffnen wir wieder die Datei und ändern den Eintrag:


#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

in

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


 Wir kommentieren die Zweite Zeile also einfach aus.
Wenn wir den Pi nun neustarten können wir die serielle Schnittstelle nach unseren Belieben nutzen.

Logik-Level-kovertieren


Um unsere Serielles modul nutzen zu können müssen wir natürlich ersteinmal das 3V3 Logiklevel unseres Pi's in ein für das Modul nutzbares konvertieren. Hierzu gibt es mehrer Ansätze. Zum einen kann man natürlich einen MAX3232 Levelshifter nehmen, oder man schaut sich ersteinmal die Anleitung des Asuro mit beiligender Schematik an.

Daraus wird ersichtlich das sowieso nur mit positiven logikpegeln gearbeitet wird und wir mit ein Paar kleinen änderungen 5V nutzen können. Da wir hier mit einem NE555 Timer arbeiten und dieser ziemlich tollerant ist, was die Versorgungsspannung betrifft, so können wir ihn einfach ohne Änderungen mit 5V betrteiben. Anders verhält es sich mit dem SFH5110-36. Dieser arbeitet grundsätzlich nur mit 4V5-5V5. Da R3 nun aber einen Widerstand von 470 Ohm hat würde bei 5V Betriebsspannung nicht mehr genug für den SFH übrigbleiben. Rein von der Theorie könnten wir ihn einfach Brücken. Wer sich mein Foto des RS-Moduls oben genauer anschaut wird den kleinen Widerstand an der Linken Seite entdecken. Dieser ist nicht Standard dort ;) Dabei handelt es sich um einen 68 Ohm Widerstand welcher zu R3 parallel geschaltet ist. Dadurch ergibt sich ein Gesamtwiderstand von rund 59 Ohm.


68 Ohm Widerstand paralell zu R3

Nun kann unser IR empfänger arbeiten.
Leider sind die GPIO-Pins des Pi nicht 5V tollerant, sodass wir uns etwas überlegen müssen.
Laut der Anleitung des Asuro sollen wir die Baudrate der Seriellen Schnittstelle auf 2400 Baud stellen. Das ist ziemlich langsam, sodass wir hier einfache Transistoren nutzen können um der Levelkonvertierung vorzumehmen. Die Schaltung hat außerdem den Vorteil das wir keine Logik negation brauchen, wie sie im PC vorgenommen wird. Bauen wir uns also folgende Schaltung.

Pegelwandler Schema
Gesteckt sieht dies dann in etwa so aus.
Ausschnitt

Gesteckter Pegelwandler

Wie ihr seht habe ich einfach ein Kabel aus einem altem PC-Gehäuse genommen.

Test


Schauen wir uns nun an ob alles funktioniert. Wir öffnen "Cutecom" und schauen ob wir die Zeichen die wir senden auch wieder vernünftig empfangen. Dazu einfach wie in der Asuro Anleitung beschrieben ein weißes Blatt mit etwas Abstand über das RS232 Modul halten. Sollte Cutecom bei euch noch nicht installiert sein so könnt ihr dies einfach mit

sudo apt-get install cutecom

erledigen.
Im Cutecom Fenster könnt ihr nun die Einstellungen für die Datenübertragung einstellen. Die Angaben entnehmt ihr einfach der Anleitung des Asuro. Wenn ihr nun im unteren Eingabefenster etwas eingebt so wird dies im Ausgabefenster oben erscheinen.


Betrachtet man das ganze mit einem Logik-Analysator sieht das ganze so aus.


Das wars auch schon. Wir sind nun in der Lage mit unserem Asuro zu kommonizieren und ihn vom Pi aus zu flashen.

MFG

Kai







1 Kommentar:

  1. Sehr gute Beschreibung! :)
    Wenn ich jetzt noch wüsste, wie man die tty defaultmässig auf 9600/7/E/1 eingestellt bekommt ...
    Vielen Dank

    AntwortenLöschen