Posts mit dem Label RS232 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label RS232 werden angezeigt. Alle Posts anzeigen

Dienstag, 10. April 2012

Eingepegelt – kommerzieller usb2serial Adapter

Bevor mir klar geworden war, daß mein Handy-Datenkabel ein perfektes USB-seriell Kabel ist, hatte ich mir irgendwann mal einen billigen USB-seriell TTL Adapter aus China bestellt - hatte den schon fast vergessen, aber heute ist er angekommen. So sieht er aus:

Abgesehen davon, daß er ein bisschen handgelötet ausschaut macht er einen guten Eindruck. Wie auch das Handykabel verwendet er einen PL2303; das hat mich etwas überrascht, denn die meisten Adapter die ich auf diversen Bastlerseiten und Zulieferern gesehen hatte bauen auf dem FTDI Chip FT232 auf, warum auch immer. Ansonsten fallen mir drei Dinge auf:
  1. Auf der Platine sitzt ein USB Typ-A Stecker. Das ist unpraktisch – eine Buchse vom Typ-B oder Mini Typ-B wäre besser, denn dann könnte man statt einer USB-Verlängerung ein normales USB-Kabel verwenden.
  2. Es gibt Pins für 5V und 3.3V
  3. Das Ding hat einen Jumper
Letzteres hat mein Interesse geweckt: Ob man mit dem Jumper zwischen den Signalpegeln für die beiden Spannungen wählen kann? Und wie sehen wohl die Pegel in den beiden Stellungen aus?

Also schauen wir uns das mal an. Zunächst habe ich die Versorgungsspannung an den Pins 5V und 3.3V nachgemessen und wie schon in anderen Posts bemerkt sind die 5V des USB-Ports bei mir nur 4.6V, während die 3.3V exakt stimmen. Ich habe, wie beim letzten mal, einfach einen Haufen Nullen auf das Interface geschickt und mich mit dem Oszi auf TX geklemmt. Hier zunächst mit Jumper "unten" (Vermutung: 5V Stellung):



Und nun "oben" (Vermutung: 3.3V):



Ich habe es auch bei ungesetztem Jumper probiert und glaubt mir, es sieht wieder exakt genauso aus. Scheinbar verlässt sich auch dieser Adapter darauf, daß 3.3V µCs 5V tolerante Eingänge haben. Aber wofür in aller Welt ist der Jumper dann gut? Hatte ich schon erwähnt, daß der Adapter ohne jede Dokumentation kam? Also diesmal kann mir niemand vorwerfen, ich sei nur zu faul zum Lesen gewesen ;-)

Also hab ich das Multimeter rausgeholt und die Verbindungen der drei Pins verfolgt - hier das Ergebnis:
  1  GND
2 RX
3 ??
Das verstehe ich nun wirklich nicht. In der oberen Stellung lege ich RX also auf Masse - wozu soll das gut sein? Jumper-Stellung für Leute die sich gerne selbst reden hören??? Und wenn Pin 3 eh nicht verbunden ist, warum dann ein Header mit 3 Pins? Normalerweise würde man sagen, damit der Jumperstecker ein Zuhause hat, aber chinesische Hersteller sind nicht gerade für Verschwendungssucht bekannt und da hätte man bestimmt 0.01 ¢ pro Modul sparen können!

Also weiterforschen. Einiges Herumprobieren ergab dann doch noch etwas Interessantes: offenbar sind die 3 Pins nicht einfach nur ein Jumper, sondern ein zweiter Header mir der Belegung
    1  GND
2 RX
3 TX
Und zwar für 3.3V Volt Schaltkreise. Hänge ich mich auf diesen TX-Pin bekomme ich dies:


Der high Pegel ist zwar nicht wirklich unter 3.3V, aber immerhin niedriger, als zuvor. Und wozu ist dann aber der komische Jumper? Nach einigem Denken und Rumlesen im Web bin ich zum Ergebnis gekommen, daß der evtl. zu Testzwecken dient: verbinde ich RX und TX mit dem Jumper kann ich natürlich jedes Zeichen, das ich im Terminalprogramm tippe sofort wieder empfangen (habe das mit den 5V und den 3.3V Pins getestet). Wieder was gelernt.

Freitag, 6. April 2012

Datenkabel einsatzfertig

Mein USB-seriell Datenkabel hatte ich ja vor ein paar Tagen vorgestellt. Funktioniert wunderbar, aber immer mit nackten Kabelenden rumhantieren fand ich lästig. Außerdem kann sich mein vorgealtertes Hirn immer nicht merken, welche Farbe nun gleich wieder welches Signal führt. Und so habe ich beschlossen, dem ganzen ein paar Header Pins und Buchsen sowie eine Legende zu verpassen. Nicht der anspruchvollste Blog-Beitrag der Geschichte, aber egal. Hier isses:

Montag, 2. April 2012

Serielles TTL Datenkabel

Um das vermaledeite Siemens Handy zu entsperren hatte ich mir ja extra ein USB Datenkabel besorgt – das ist nun arbeitslos. Also ist es an der Zeit auch das Kabel mal einer Obduktion zu unterziehen. Offenbar ist es nichts weiter als ein USB2serial Adapter auf PL2303 Basis – jedenfalls meldet es sich so beim Computer:
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Also frisch ans Werk und mal die beiden Stecker aufmachen, um zu sehen wie die verbunden sind:


Auf der USB-Seite findet sich erwartungsgemäß ein (leider vergossener) IC, ein Quarz (12MHz) und etwas Kleinkram. Die Terminals sind freundlicherweise beschriftet:
GND     weiß
RX grün
DTR –
TX blau
VCC rot
Auf der Handyseite landen die Kabel auf den entsprechenden Pins des Siemens-Lumberger Steckers.

Ich würde sagen, das werfe ich nicht weg – sowas kann man ja noch brauchen. Und wenn ich so darüber nachdenke, dann kommt mir eine Idee: Könnt Ihr Euch vorstellen, daß da wirklich ein RS232-Pegelwander a la MAX232 drin ist? Und im Handy dann noch einer? Ich nicht! Wenn ich Siemens wäre, hätte ich da einfach die TTL Pegel aufs Kabel gelegt und mir das Wandeln gespart. Bei den paar Zentimetern Kabel sollte das kein Problem sein. Wenn dem so ist, könnte das Teil recht nützlich sein. Zwar haben die Arduinos einen USB/RS232 Wandler an Bord, aber manche Clones, z.B. das ITeadStudio iBoard, das ich zufällig habe, oder ein nackter Aufbau mit einem Mikrocontroller haben das nicht, so daß ein TTL-Seriell Kabel hilfreich wäre. Nicht umsonst verkaufen diverse Anbieter passende Breakout-Boards. Bleibt die Frage, mit welcher Spannung hier zu rechnen ist. 5V? 3.3V? Also mal anstecken und ein wenig messen. Zwischen GND und VCC liegen 4.6V. Aber gilt das notwendigerweise auch für die Signalpegel? Versuch macht kluch, also habe ich mal das Oszi zwischen GND und TX geklemmt und dann das Interface mit Nullen geflutet:
cat /dev/zero > /dev/ttyUSB0
Das Ergebnis sah dann so aus:


Laut Wikipedia gilt an Eingängen: ≤ 0.8V ist low und ≥ 2.0V ist high. Das trifft übrigens sowohl für 5V, als auch für 3.3V TTL zu. CMOS will ≤1.5V bzw. ≥ 3.5V. Also ist unser Signal mit beiden TTL Varianten und CMOS kompatibel. Vorausgesetzt ein 3.3V TTL Baustein nimmt die überzähligen 0.4V nicht übel, was ich mir aber eigentlich kaum vorstellen kann. Zumindest das Datenblatt für den ATmega328p, der in den Arduinos verbaut ist sagt unter absolute maximum ratings: „Voltage on any Pin except RESET: Vcc + 0.5V“. D.h. für den wäre das OK.

Praxistest

Theoretisch sieht das ja schonmal gut aus, aber klappt es in der Praxis? Dazu habe ich das Kabel mal an einen Arduino angeschlossen (RX-TX, TX-RX, GND-GND) und irgendein Beispiel-Datenlogger-Programm draufgeladen. Und siehe da – ich konnte den Datenstrom über das alte Handykabel ebenso lesen, wie über die USB2RS232 Schnittstelle. Cool! :-)