Forum: Mikrocontroller und Digitale Elektronik Geldscheinleser Noteacceptor NV9 USB+ Serielle Kommunikation ESP32 TX Problem


von An S. (reddi)


Lesenswert?

Hey!

Ich habe einen gebrauchten Geldscheinleser NV9 USB+ in Verwendung und 
plötzlich funktioniert er nicht mehr. Ich bin der Meinung, dass ich nur 
Softwareänderungen gemacht habe... Kurzform: Ich bekomme keine Daten am 
ESP32 (Serial, RX-Port) mehr, aber der Leser reagiert auf alle Befehle, 
die ich via TX (Serial ESP32) sende.

Programmiert habe ich den ESP32 mit der Arduino IDE. Eingeleitet ist der 
Code mit "Serial2.begin(300, SERIAL_8N2, 4, 17);" Die Baudrate, der 
Serial-Typ 8N2 und die Ports sind korrekt (4 RX vom ESP mit TX1 des 
Lesers und 17 TX/ESP mit RX5 des Lesers verbunden. Kabel sind auf 
Kabelbruch geprüft. Die Pins habe ich auch schon testweise getauscht, 
aber das Verhalten ändert sich nicht. Einen anderen ESP32 habe ich auch 
getestet. Er kann meine Befehle seriell empfangen (z.B. Sperren von 
einzelnen Scheinen), liefert aber keine Rückmeldung, dass Schein x 
gesperrt oder welcher Schein eingelegt wurde.

Im Code, wo die Rückmeldungen sein sollten, kommt einmal zum ESP-Start 
eine 0 und das war's. Früher kamen sämtliche Codes (Welche Banknote, 
Status,...), die ich auswerten konnte:

if (Serial2.available()) {
  byte byteInNoteAcceptor = Serial2.read();
  Serial.print("---IN-");
  Serial.print(byteInNoteAcceptor);
  Serial.println("---");
}

Kann ich die RX/TX PINs messen? Konkret wenn ja, was ich wo messen 
müsste und welches Ergebniss sollte ich erhalten? Zum Messen hätte ich 
ein Siglent SDM3065X-SC da und theoretisch ein altes OWON SDS7102V, 
wobei ich eher ein Noob bin und nur rudimentäres Hobby-Halbwissen habe - 
ich weiß wo der Ein-Schalter ist. ;D

Vielleicht hat ja der ein oder Andere eine Idee für mich, was ich wie 
messen könnte. Ein (SMD)Bauteil selbst zu tauschen, sollte nicht das 
Problem sein. :-) Wobei ich die große Hoffnung habe, dass im Leser nur 
ein Kondensator, Transistor o.ä. kaputt ist. :-/

VLG

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

An S. schrieb:
> Kann ich die RX/TX PINs messen? Konkret wenn ja, was ich wo messen
> müsste und welches Ergebniss sollte ich erhalten?

Im Ruhezustand haben Tx und Rx HIGH Pegel, die kannst du mit einrm 
Multimeter messen. Mit einem Oszilloskop kannst du die LOW Pegel und die 
Qualität der Signalwechsel kontrollieren. Mit einem Logic Analyzer 
kannst du die Signale aufzeichnen und Dekodieren. Mit dem Eingang eines 
UART Adapters kannst du die Signale mit-lesen.

Wer mit Seriellen Schnittstellen hantiert, sollte sich diese Werkzeuge 
besorgen und sich damit (an einem funktionierenden System) vertraut 
machen, damit man nicht im Blindflug unterwegs ist. Für 60€ kann man das 
alles schon bekommen.

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?

Bei mir:
#include <HardwareSerial.h>
HardwareSerial SerialGPS ( 2 );

const byte rx2Pin = 22;
const byte tx2Pin = 27;
SerialGPS.begin(9600,SERIAL_8N1,22,27);

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das Siglent ist doch schon ein halbes Oszi. Auf schnelle Rate stellen in 
der Trenderkennung und mal am TX Pin der Datenquelle (Geldscheindings) 
messen, während sie antworten soll.

: Bearbeitet durch User
von An S. (reddi)


Lesenswert?

Ich habe wie folgt gemessen:

OHNE Verbindung zwischen ESP und Leser:

ESP32 TX17 3,23V
ESP32 RX4 3,22V (oder <5mV wenn PullUP - deaktiviert)
LESER TX1 40mV
LESER RX5 4,01V

Wenn Leser und ESP32 jeweils mit passendem RX-TX verbunden sind, kann 
ich folgende Spannungen messen:

ESP32 TX17 - Leser RX5: 3,26V
ESP32 RX4 - Leser TX1: 3,29V (ohne PullUP <5 mV)


An diesen Code (in dem Video) hatte ich mich initial gehalten, der auch 
lange funktionierte... https://www.youtube.com/watch?v=M2E2yWcKJfc

Ein neues Banknoten-Set (mit Firmware) habe ich auch geflasht und die 
Programmierkarte (Serial/SIO, 300 baud...) habe ich auch 
höchstvorsorglich neu durchgeschoben. Ohne Erfolg. Die SIO Schnittstelle 
scheint ja auch korrekt konfiguriert, denn sonst würde er ja meine 
befehle tendenziell auch nicht annehmen können. :-/

VG

von Harald K. (kirnbichler)


Lesenswert?

Rüdiger B. schrieb:
> Bei mir:
> #include <HardwareSerial.h>
> HardwareSerial SerialGPS ( 2 );
>
> const byte rx2Pin = 22;
> const byte tx2Pin = 27;
> SerialGPS.begin(9600,SERIAL_8N1,22,27);

Da frag ich mich, warum Konstanten mit Namen angelegt werden 
(rx2Pin/tx2Pin), wenn die in der nächsten Zeile dann schon wieder nicht 
mehr verwendet werden ...

von An S. (reddi)


Lesenswert?

Matthias S. schrieb:
> Auf schnelle Rate stellen in
> der Trenderkennung und mal am TX Pin der Datenquelle (Geldscheindings)
> messen, während sie antworten soll.

Bei 2V, Aperture 0,5PLC, Input 10M im TrendChart sprang er bei 0-0,1V 
rum - nur am TX vom Leser verbunden. Auch wenn ich ein Schein reinwerfe 
und er per Serial eine Dezimalzahl (1 für ein 5er) senden müsste.

Gleiche Einstellung und mit TX vom ESP verbunden. Sobald ich Befehle 
Serial2.write(...); sende, kann ich im Chart einzelne Peaks sehen und 
das Level liegt bei 3,3V.

Ist TX am RX des ESPs dran, sind es ca. kontinuierliche 3V (Range von 2V 
auf 20V), wobei ich in dem Chart keine Peaks sehen kann.

VG

Ps: Am Rande: Kannst Du mir ein LA für Noobs empfehlen? Können die auch 
I2C auslesen?  Im Traum habe ich schon ein SDS2204XHD oder SDS3034XHD 
gesehen.

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?


von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Rüdiger B. schrieb:
> und saleae Software.

Da geht übrigens auch sigrok/Pulseview.

von Rüdiger B. (rbruns)


Lesenswert?

Harald K. schrieb:
> Da frag ich mich, warum Konstanten mit Namen angelegt werden
> (rx2Pin/tx2Pin), wenn die in der nächsten Zeile dann schon wieder nicht
> mehr verwendet werden ...

cut and paste und dann ein Error falscher Typ.

von Hmmm (hmmm)


Lesenswert?

An S. schrieb:
> Bei 2V, Aperture 0,5PLC, Input 10M im TrendChart sprang er bei 0-0,1V
> rum - nur am TX vom Leser verbunden.

Klingt danach, dass das entweder ein Open-Collector-Ausgang ist (sieht 
man bei UART-Anwendungen selten) oder der Ausgangstreiber defekt ist.

von Sascha W. (sascha-w)


Lesenswert?

Also,
LESER TX1 40mV
da ist schon mal was faul.
Den ESP kannst du ja einfach testen indem du TX mit RX verbindest.
Dein Leser scheint auch nicht mit 3.3V zu arbeiten, sonst währen da am 
RX nicht 4V zu messen. Das ist auf dem Weg vom Leser zum ESP nicht so 
gut. Allerdings würde da eher der ESP Schaden nehmen.
Wie werden die beiden Teile mit Strom versorgt? Datenleitung verbunden 
aber ein Schaltungsteil ohne Strom sollte auch vermieden werden.

Sascha

von An S. (reddi)


Lesenswert?

Also. Beim ESP habe ich die Pins mal testweise getauscht und auch beim 
zweiten ESP gehts ja nicht. Spannungsversorgung: Großteils hing er an 
einem Schaltnetzteil mit 12V und 5V Ausgang. Die Spannungen passen. Zum 
Testen hängt der Leser an einem UNI-T UDP3305S-E Labornetzteil. Die max. 
Ampere (vom Schaltnetzteil abgelesen) passen auch zum Datenblatt und zum 
früheren Verhalten. Der ESP ist zuletzt/aktuell per USB angeschlossen 
und es existiert und existierte immer eine GND-Verbindung zwischen dem 
ESP und dem Leser.

Zu den Interface Logic Levels habe ich folgendes in der Doku gefunden:
- Inputs Logic Low 0-0,5V / Logic High 3,7-12V
- Outputs with 2k2pullup Logic Low +0,6V / Logic High Pull-up Voltage of 
Host Interface
- Maximum Current Sink 50 mA per Output

Habe nochmal den Widerstand zwischen GND / 12V Anschluss und den 
jeweiligen RX/TX PINs gemessen, wo der Leser natürlich aus und keine 
Leitung angeklemmt ist:

GND - RX: 4,9k
GND - TX: OL
12V - RX: 330k
12V - TX: OL

Müsste ich gemäß der Manual (siehe oben) zwischen 12V und TX nicht 2,2K 
messen können? Oder ist das ein irrglaube meinerseits?

VG und an allen zwischendurch einen großen Dank für Eure Hilfe und 
vielen guten Tips!

von Björn W. (bwieck)


Lesenswert?

Der PullUp muss eigentlich extern angelegt werden.
Z.B. bei dir an TXD vom Prüfer und 3.3V vom ESP.

von Hmmm (hmmm)


Lesenswert?

An S. schrieb:
> Inputs Logic Low 0-0,5V / Logic High 3,7-12V

Damit ist die Ansteuerung mit 3.3V aus dem ESP32 schonmal ausserhalb der 
Spezifikation und das Funktionieren reine Glückssache.

An S. schrieb:
> Outputs with 2k2pullup Logic Low +0,6V / Logic High Pull-up Voltage of
> Host Interface

Also hat das Gerät tatsächlich einen Open-Collector-Ausgang, braucht 
also einen Pullup.

An S. schrieb:
> Müsste ich gemäß der Manual (siehe oben) zwischen 12V und TX nicht 2,2K
> messen können?

Sie meinen damit eher, dass die Gegenstelle diesen Pullup haben muss.

Und wenn Du den eingebaut hast, ist die Frage, ob der Ausgang die 
Spannung beim Senden runterzieht oder nicht. Am besten mal mit dem Oszi 
angucken, die Ruhelage ist High-Pegel, und jedes Byte beginnt mit einem 
Low-Pegel (Startbit).

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

An S. schrieb:
> LESER TX1 40mV

Kaputt oder (ungewöhnlich) open-collector. Da er virher funktionierte 
und jetzt nucht nehr  ist er vermutlich kaputt. Kann man mit Pullup und 
Oszilloskop schnell prüfen.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Kaputt oder (ungewöhnlich) open-collector ...

... oder Open-Collector ohne Pull-Up.

von An S. (reddi)


Lesenswert?

Ich werde morgen mal ein 2,2K (?) Pullup zwischen 3.3V und dem RX des 
ESPs werfen. Den SW-Pullup nehme ich dann raus? Ich muss gerade passen, 
ob ich einen SW-Pullup zu Anfang drin hatte - ein HW-Pullup definitiv 
nicht.

VG

von Rainer W. (rawi)


Lesenswert?

An S. schrieb:
> Den SW-Pullup nehme ich dann raus?

Was ist ein "SW-Pullup"?
Ein Widerstand in einer elektronischen Schaltung ist immer HW.

Ob du den rausnehmen willst, kannst du selbst entscheiden. Wie stark 
würde sich wohl der Gesamtwiderstand ändern, wenn der parallel zu 2.2kΩ 
liegt und wäre das ein nennenswerter Unterschied für die Funktion?
Wenn du allerdings nur 40mV misst, wo eigentlich H-Pegel vorhanden sein 
soll, ist wohl kein Pull-Up aktiv (oder der Ausgang wird falsch 
gesteuert). Wie groß wäre denn dein "SW-Pullup"?

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Rainer W. schrieb:
> Wie groß wäre denn dein "SW-Pullup"?

ca. 50k Ohm

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Im Handbuch Seite 13 steht, dass die Ausgänge Open Collector sind. Mach 
einfach einen Pullup von z.B. 10k dran und guck' was passiert.

Oder du probierst mal auf dem RX-Pin der Softserial vorher den 
eingebauten Pullup zu aktivieren.

Soviel ich weiss, gibt es extra für ESPs eine eigene Softserial-Lib, 
möglicherweise bietet diese von Hause aus einen solchen Parameter (im 
Gegensatz zur Standard-Soft-Serial)

Ich verwende den Note Acceptor auch, allerdings mit Arduino Nano, da gab 
es diese Probleme noch nie. Vielleicht ist der ESP da "kritischer" als 
die Arduinos.

https://www.coinoperatorshop.com/media/products/NV9%20Manual%20Deutsch.pdf

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Rainer W. schrieb:
> An S. schrieb:
>> Den SW-Pullup nehme ich dann raus?
>
> Was ist ein "SW-Pullup"?
> Ein Widerstand in einer elektronischen Schaltung ist immer HW.

Ein per Software aktivier/deaktiverbarer (eingebauter) Pullup am Pin des 
Mikrocontrollers. Als ob das so schwer zu verstehen wäre ...

von Rainer W. (rawi)


Lesenswert?

Frank E. schrieb:
> Ein per Software aktivier/deaktiverbarer (eingebauter) Pullup am Pin des
> Mikrocontrollers. Als ob das so schwer zu verstehen wäre ...

Deshalb bleibt es trotzdem Hardware.

Frank E. schrieb:
> Oder du probierst mal auf dem RX-Pin der Softserial vorher den
> eingebauten Pullup zu aktivieren.

Ein Open-Kollektor Ausgang für eine serielle Schnittstelle ist schon 
etwas exotisch. Da würde ich mir nur bedingt Hoffnungen machen, dass die 
Softserial da irgendetwas vorhält. Allenfalls kann man nach dem Öffnen 
der Schnittstelle den Pull-Up am Pin aktivieren. Eine Aktivierung des 
Pull-Ups vorher wird vermutlich von der Initialisierung überschrieben.

: Bearbeitet durch User
von An S. (reddi)


Lesenswert?

Ihr seid einfach nur GEIL! Vorab: Es funktioniert wieder alles.

Ihr habt so auf den Input-PullUp rumgeritten, so dass es mir nicht aus 
den Kopf ging.

Scheinbar habe ich bei irgendeinem Udate versehentlich und unbemerkt 
meinen SW-PullUP gelöscht. Im Rahmen der Recherche/Fehlersuche, habe ich 
den natürlich wieder ergänzt - korrekter Syntax/Pin. Nun ja, jetzt war 
ich nochmal auf den Dachboden, habe ein 10k rausgesucht und habe mich 
nochmal vor den Code gesetzt. Wir fiel auf, dass ich dummerweise den 
SW-PullUP-Befehl erst NACH dem Connect [Serial.begin()] eingefügt habe. 
Nach der Änderung (Reihenfolge) bekam ich sofort wieder Meldungen von 
dem Geldscheinleser.

Zur HW/SW Diskussion: Ich will mich mangels Fachwissen nun nicht so weit 
aus dem Fenster lehnen, aber es ist doch höchstwahrscheinlich klar, was 
ich damit meine. Vermutlich, ich weiß es nicht, sind IM Chip auch die 
passenden Widerstände, dessen Verbindungen SW-seitig (de)aktiviert 
werden. Und wenn es Chip-Intern anders gelöst ist, ist es auch super. 
Ich habe auch schon mal gehört, dass externe PullUP/DOWNs besser sein 
sollen, aber ob das stimmt, weiß ich genauso wenig.

FAZIT: Der "fehlende" (zuletzt falsch programmierte) pullUP-Widerstand 
war die Ursache und IHR SEID GEIL! :-D

VIELEN VIELEN DANK FÜR DIE SUPER TIPPS!


PS: Heute kam das neue Oszilliskop zur Fehlersuche, das noch im 
mittlerweile geöffneten Karton liegt. Und falls ich euch nie mehr mit 
Fragen auf den Keks geh', hat meine Frau den Preis herausgefunden... :-D

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

An S. schrieb:
> Ich habe auch schon mal gehört, dass externe PullUP/DOWNs besser sein
> sollen, aber ob das stimmt, weiß ich genauso wenig.

Grund 1)
Die internen Pull-Widerstände haben ungefähr 50 kΩ. Wenn da lange 
Leitungen (> 20cm) dran hängen, dann bilden diese zusammen mit der 
Leitungs-Kapazität einen Tiefpass, der die Signale erheblich verändert.

Grund 2)
Kontakte (von Tastern, Schaltern, Relais, ...) brauchen meisten einen 
gewissen Mindest-Strom, um langfristig fit zu bleiben. Bei zu wenig 
Belastung werden sie irgendwann unzuverlässig. Wenn das Datenblatt keine 
Angabe enthält, hat sich als "Hausnummer" für kleine Schalter 1 mA als 
Mindest-Strom bewährt. Die Pull-Widerstände liegen dann typischerweise 
im Bereich von 1 kΩ bis 4,7 kΩ.

Grund 3)
Hochohmig abgeschlossene Leitungen reagieren empfindlicher auf 
Radiowellen, als niederohmige. Gegen Radiowellen (mit Frequenzen die 
erheblich höher als das Nutzsignal sind) helfen auch Kondensatoren.

von An S. (reddi)


Lesenswert?

Vielen Dank für die sehr ausführliche Antwort. Ich werde, wenn ich 
Platinen planen sollte, künftig darauf achten, dass ich einen externen 
Pull-UP einplane. Gilt gleiche Argumentation auch für PullDOWNs oder nur 
für PullUPs? :-)

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

An S. schrieb:
> Gilt gleiche Argumentation auch für PullDOWNs oder nur
> für PullUPs?

Ja sicher

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.