Probleme mit UART

Hi,
ich habe das MDB Protokoll implementiert um damit mit einem Münzwechsler und einem Scheinleser der Firma Coinco zu kommunizieren (der Arduino stellt dabei den VMC dar).
Solange ich nur den Münzwechsler anschliesse funktioniert alles tadellos, wenn ich jedoch versuche den Scheinleser dazuzuschalten oder den Scheinleser einzeln zu betreiben bleibt die RX Leitung durchgehen auf 5V.
Daher meine Frage, wie kann das zustande kommen? Ist der Pull-UP Widerstand falsch gewählt? habe aktuell 10k habe es aber auch schon mit den Werten 100k, 1k und 220 Ohm versucht. Der Scheinleser ist völlig in Ordnung, habe ihn extra nochmal eingeschickt um das zu bestätigen. Kann es sein dass die Stromstärke des Signals dass der Arduino sendet zu gering ist? Habe keine Ahnung an was es noch liegen könnte. Der Code ist in diesem Fall ja unerheblich da der Geldwechsler ohne angeschlossenen Scheinleser tadellos funktioniert, er es mit diesem angeschlossen jedoch wohl nicht mehr schafft die Leitung low zu setzen.
Deshalb kann der Fehler eigentlich nur an der Schaltung liegen.

Würde mich freuen wenn jemand einen Tipp oder eine Idee dazu hat.

Tarcontar

Und was genau soll der Opto-Koppler am Seriellen Anschluss machen ?
Wie hast du denn die zwei Geräte angeschlossen. Ich sehe nur einen Anschluss

Zum einen sehe ich den Zweck des Oprokopplers nicht ein, wenn Du den Pull-up direkt zu den 5V führst und den gleichen GND verwendest.

Die 5V am RX-Pin würde ich erwarten, wenn die Slaves keine Daten schicken (dafür ist ja der Pull-up da). Könnte es also sein, dass die TX-Daten nicht mehr ankommen, wenn Du den Scheinleser anschliesst?

Du solltest Links zur verwendeten Hardware posten, es kann ja sein, dass dort etwas nicht hundertprozentig standard-konform ist.

Hi, danke schonmal für die Antworten.
Der Optokoppler ist im Prinzip nur dafür da das Signal zu invertieren, da das vom Arduino ja standardmässig active low ist ich in diesem Fall aber active high brauche.

http://www.coinco-gmbh.de/products.php

Die verwendete Hardware findet ihr im Link.

Angeschlossen werden sie über ein Y- Kabel, dass die Signalleitungen einfach aufspaltet.

Ja es könnte sein dass die Signale nicht mehr ankommen wenn ich den Scheinleser anschließe, ich habe nur keine Ahnung wie das zustande kommt da dies ja auf einen Defekt des Scheinlesers schließen lassen würde, dieser allerdings einwandfrei funktioniert.

Tarcontar

da das vom Arduino ja standardmässig active low ist ich in diesem Fall aber active high brauche.

Woher hast Du das? Soweit ich weiss, ist auch beim TX-Signal 5v = 1 und 0V = 0. RX und TX können nicht unterschiedlich sein, sonst könnte man zwei Arduino's nicht über's Kreuz miteinander verbinden.

Die verwendete Hardware findet ihr im Link.

Welches dieser Geräte verwendest Du (Typ oder direkter Link)?

Tarcontar:
Angeschlossen werden sie über ein Y- Kabel, dass die Signalleitungen einfach aufspaltet.

Die serielle Schnittstelle (UART) ist kein Bussystem, du kannst da def. nur ein Gerät daran anschließen.
Nimm eine zweite UART des Mega, der hat ja "genug" davon.

Die serielle Schnittstelle (UART) ist kein Bussystem, du kannst da def. nur ein Gerät daran anschließen.
Nimm eine zweite UART des Mega, der hat ja "genug" davon.

Das ist zwar grundsätzlich richtig, aber beim MDF wird die UART-Schnittstelle per Pull-up-Widerstand in einen Bus verwandelt. Da die Kommunikation klar Master/Slave ist und der Slave auf der schreibenden Leitung hochohmig sein muss, wenn er nicht angesprochen wurde, sollte das funktionieren.

pylon:
Das ist zwar grundsätzlich richtig, aber beim MDF wird die UART-Schnittstelle per Pull-up-Widerstand in einen Bus verwandelt. Da die Kommunikation klar Master/Slave ist und der Slave auf der schreibenden Leitung hochohmig sein muss, wenn er nicht angesprochen wurde, sollte das funktionieren.

Ok, dann sollte es so funktionieren.
Danke, wieder was dazu gelernt.

So war auch mein Gedanke, deswegen dachte ich dass der Wert des Pull-Ups eben nicht stimmt und der Scheinleser es eben nicht schafft die Leitung low zu ziehen.
Sorry mein Fehler, ist natürlich active high, was ich dann in ein active low umwandle mit dem optokoppler.

Scheinleser:
http://www.coinco-gmbh.de/products.php?productId=40

Münzwechsler:
http://www.coinco-gmbh.de/products.php?productId=47

Also ein pull-up allein schafft es nicht, ein Bussystem aus den seriellen Leitungen zu machen. Da müssen alle Sender die entsprechenden Ausgangspins noch auf "hochohmig" schalten, damit dies dann tatsächlich funktioniert.
An sonsten gewinnt immer der "stärkere"!

Der Lieferant ist leider sehr sparsam mit Informationen, nicht einmal eine Pin-Belegung der Schnittstelle ist vorhanden. Woher hast Du diese Information? Hast Du ein technisches Dokument bekommen?

Also ein pull-up allein schafft es nicht, ein Bussystem aus den seriellen Leitungen zu machen. Da müssen alle Sender die entsprechenden Ausgangspins noch auf "hochohmig" schalten, damit dies dann tatsächlich funktioniert.

Ziemlich genau, was ich beschrieben habe... :slight_smile:

https://www.namanow.org/images/pdfs/technology/mdb_version_4-2.pdf

Hier der Link zur Spezi des MDB Protokolls.

Steht soweit eigentlich alles drin, und eigentlich müsste der Scheinleser ja 1:1 so funktionieren wie der Münzwechsler. Wenn der Scheinleser einzeln funktionieren würde und die beiden nur zusammen Probleme machen würde wäre es wieder was anderes, aber ich bekomme wenn ich den Scheinleser alleine anschließe nicht mal ne Antwort von ihm, obwohl Adresse usw passen.

Tarcontar

Steht soweit eigentlich alles drin, und eigentlich müsste der Scheinleser ja 1:1 so funktionieren wie der Münzwechsler. Wenn der Scheinleser einzeln funktionieren würde und die beiden nur zusammen Probleme machen würde wäre es wieder was anderes, aber ich bekomme wenn ich den Scheinleser alleine anschließe nicht mal ne Antwort von ihm, obwohl Adresse usw passen.

Deshalb habe ich nach technischen Infos für das spezifische Teil gefragt, am besten wären Schemas. Ich nehme an, dass das Teil den MDB-Hardware-Teil nicht einhält, also den TX-Ausgang nicht hochohmig schaltet, wenn es nicht angesprochen wurde. Aber das sind Vermutungen und es könnte z.B. auch eine falsche Pin-Belegung sein (5V auf dem TX-Anschluss) oder ähnliches.

habe da leider auch keine Schemas etc, da coinco aber die Entwickler von MDB sind und ich den Münzwechsler und den Scheinleser extra nochmal von ihnen überprüfen lassen habe muss es eig an meiner Schaltung liegen, kann mir aber keine Reim drauf machen und weiss auch nicht an was der Fehler liegen sollte ausser dem Pull Up....

... bleibt also noch zu überprüfen, ob die Sendepins tatsächlich hochohmig sind.

wie genau mache ich das?
Widerstand zwischen GND und TX am Scheinleser messen?

Nur Spannung auf den Scheinleser, an den TX des Scheinleser einen 100 kOhm (evtl auch weniger, aber auf jeden Fall über 10kOhm) jeweils auf GND oder VCC halten. An dem TX sollte dann der entsprechende Pegel zu messen sein (sonst gibt's da einen "internen" Widerstand zu versorgung oder GND, alternativ ist der Ausgangstreiber noch aktiv, also nicht hochohmig!)

Ok vielen Dank, werde das so bald wie möglich ausprobieren.

Hi,
also habe das soeben ausprobiert, bekomme aber weder bei GND noch VCC einen vernünftigen Wert für den Widerstand bei eingeschaltetem Scheinleser.... habe 68k verwendet als Widerstand.

Bin langsam echt ratlos was mit dem Teil nicht stimmt...

Tarcontar

Pegel = Spannungspegel, sorry, hab' mich unglücklich ausgedrückt.

Nochmal (wie im andderen Topic auch:)
Bitte mal einen link zu den Spezifikationen von MDB, sowohl hard- wie auch softwaremässig.
Ich hab' so das Gefühl, dass hier nicht mit den üblichen Spannungspegeln gearbeitet wird, und damit die Funktion mit nur einem Gerät eher zufällig ist....