Forum: Mikrocontroller und Digitale Elektronik MDB Kommunikation


von Johannes S. (johannes_s20)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier vor mir ein G-40.4000 Geldwechsler von NRI und versuche 
nun schon seit Tagen eine Kommunikation mit diesem aufzubauen.
Leider bekomme ich nichts von dem Gerät zurück was irgendwie wie eine 
Antwort aussieht.

Zur Kommunikation benutze ich ein ATMega16 auf einem STK500.
Spannungsversorgung vom Geldwechsler ist hier 24VDC.
Meine Schaltung ist wie im Anhang Aufgebaut.
Der AVR ist mit 9600Baud und im 9-Bit-Modus initialisiert.

Ich bin mir nicht sicher ob der Geldwechsler auf einen RESET Befehl auch 
ein ACK zurückgibt, aber wenn ich ein RESET sende, bewegt sich mal was 
an dem Gerät. Ich dachte wenn ich den Geldwechsler im 100ms Takt POLLe, 
sollte ich eine Antwort bekommen aber leider kommt nichts zurück.
Hier mal mein Progrämmchen:
1
#include <avr/io.h>
2
#include "uart.h"
3
#include <util/delay.h>
4
5
/*
6
02H Changer feature level
7
00H Country code for USA
8
01H Country code for USA
9
05H Coin scaling factor
10
02H Decimal place
11
00H Coin type routing
12
07H Coin type routing
13
01H Coin type 0 has value of 1 scaling factor
14
02H Coin type 1 has value of 2 scaling factor
15
05H Coin type 2 has value of 5 scaling factor
16
14H Coin type 3 has value of 20 scaling factor
17
FFH Coin type 4 is a token
18
-------------------------------------------------
19
12CH Therefore the CHK byte would be equal to 2CH
20
*/
21
22
int _reset()
23
{
24
    USART_Transmit(0x108);    //Adresse, reset, Modebit gesetzt
25
    _delay_us(50);
26
    USART_Transmit(0x08);    //Chkbyte
27
    _delay_ms(350);
28
}
29
30
int _poll()
31
{
32
  USART_Transmit(0x10B);
33
  _delay_us(50);
34
  USART_Transmit(0x0B);
35
}
36
int main(void)
37
{
38
   uart_init();
39
  _delay_ms(3000);
40
  _reset();
41
    
42
    while(1)
43
    {
44
        
45
    //_poll();
46
    _reset();
47
    _delay_ms(8000);
48
    
49
    }
50
}

Hat jemand vielleicht ein Tip was ich vorher noch senden muss?
Ob das überhaupt so funktioniert? Vielleicht hat ja auch jemand schonmal 
so etwas gemacht und hat vielleicht einen passenden Code?

Gruß

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Hallo Johannes,

wir haben zwar bislang noch nie mit dem G-40.4000 von NRI gearbeitet 
(eher RR6 von Comestero, wenn es um Geldwechsler geht), aber zumindest 
MDB ist mir (leider) durchaus bekannt.

> Ich bin mir nicht sicher ob der Geldwechsler auf einen RESET Befehl auch
> ein ACK zurückgibt, aber wenn ich ein RESET sende, bewegt sich mal was
> an dem Gerät. Ich dachte wenn ich den Geldwechsler im 100ms Takt POLLe,
> sollte ich eine Antwort bekommen aber leider kommt nichts zurück.

Auch auf den Reset-Befehl muss ein ACK kommen. Was macht das Gerät denn 
genau und wie kontrollierst du das ganze (Oszilloskop oder 
Logic-Analyzer vorhanden?)?

> Hier mal mein Progrämmchen:

Sieht eigentlich ok aus.

> Hat jemand vielleicht ein Tip was ich vorher noch senden muss?

Für den Reset-Befehl eigentlich nichts. Da muss zumindest ein sauberes 
ACK kommen.

> Ob das überhaupt so funktioniert? Vielleicht hat ja auch jemand schonmal
> so etwas gemacht und hat vielleicht einen passenden Code?

Wie gesagt, bei anderen Geräten durchaus, bei diesem noch nicht. Meine 
Empfehlungen:

- Hersteller anschreiben und nach Log-File fragen. Alle MDB-Geräte sind 
irgendwie eigen, da hilft es zu sehen, was da Gerät erwartet. Nur mit 
der NAMA-Spezifikation ist das richtig nervend.

- Pegel auf dem Logic-Analyzer oder besser Oszilloskop kontrollieren, 
durch die Optokoppler-Geschichte verschleifen auch schnell mal die 
Flanken, wenn die Werte der Pull-Up-Widerstände beispielsweise nicht 
passen.

- Verkabelung prüfen. Viele Geldwechsler arbeiten je nach angeklemmten 
Kabel auch als MDB Master oder Executive-Gerät.

- Nerven bewahren - MDB ist im Vending-Bereich eins der nervigsten 
Protokolle, das dummerweise am weitesten verbreitet ist. Ähnlich schlimm 
ist eigentlich nur Executive...

von Johannes S. (johannes_s20)


Angehängte Dateien:

Lesenswert?

Erstmal Danke für die ausführliche Antwort.
Im Geldwechsler ist eine Status-Led installiert.
Wenn diese 3 mal blinkt, heißt das laut Datenblatt das der Geldwechsler 
keine Kommunikation zum MDB findet. Wenn ich jetzt mein Reset-Befehl 
sende, blinkt der Geldwechsler nur noch 2 mal (Automat sperrt G-46). 
Also ist das ja schon mal schön das sich was ändert :) aber er blinkt 
halt auch nur 2x2 mal.
Und irgendwie hab ich die Vermutung das sich der Geldwechsler ab und zu 
aufhängt. Zwischenzeitlich kommt es vor das diese Status-Led einfach 
leuchtet. Das ist leider im Datenblatt nicht beschrieben und der 
Geldwechsler zieht einfach für ca. 140ms seine Sendeleitung auf Masse.

Ich habe hier ein Oszilloskop zur Verfügung.
Im puls.jpg sieht man wie der Geldwechsler einfach auf gar nichts 
reagiert und nur so vor sich hin pulsiert...
Im 140ms.jpg sieht man wie der Geldwechsler schon irgendwie reagiert nur 
die Zeit die er dafür braucht und das was er macht erschließt sich mir 
nicht.
In beiden Bildern ist CH1 die Tx Leitung vom AVR und CH2 die Rx Leitung.

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> Und irgendwie hab ich die Vermutung das sich der Geldwechsler ab und zu
> aufhängt. Zwischenzeitlich kommt es vor das diese Status-Led einfach
> leuchtet. Das ist leider im Datenblatt nicht beschrieben und der
> Geldwechsler zieht einfach für ca. 140ms seine Sendeleitung auf Masse.

Meine Vermutung: Der Geldwechsler wechselt immer wieder in den 
MDB-Master-Mode und versucht dann einen Bus-Reset (Master-Sendeleitung 
>100ms auf Masse). Versuche mal den Hersteller zu kontaktieren. NRI 
gehört ja inzwischen zu Crane, deren deutsche Niederlassung ist in 
Buxtehude.

Geht es nur um den einen Geldwechsler oder wird das ein größeres 
Projekt?

von Johannes S. (johannes_s20)


Lesenswert?

Erstmal geht es nur um den Geldwechsler. Der kommt nachher wieder in 
einen Colaautomaten rein aber da hab ich eigentlich nicht so die 
Bedenken das das nicht funktionieren wird mit der Auswertung von dem 
Teil. Es soll wieder ein funktionierender Colaautomat werden der quasi 
komplett von einem AVR gesteuert wird.

Ja dann werde ich mich mal bei denen melden und mal sehen was die dazu 
sagen. Danke erstmal für deine Hilfe und den Tipp mit dem Master Mode. 
Vielleicht gibt ja das Datenblatt noch was dazu her.

Hast du vielleicht ein kleines Projekt wo du sowas in die Richtung 
schonmal mit einem AVR realisiert hast? Vielleicht ein paar 
Codeschnipsel?

Gruß und danke

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> Hast du vielleicht ein kleines Projekt wo du sowas in die Richtung
> schonmal mit einem AVR realisiert hast? Vielleicht ein paar
> Codeschnipsel?

Nichts kleines, nur komplette (Kunden-) Projekte, wo aber in der Regel 
auch immer noch ganz andere Komponenten mit dranhängen. Wenn man den 
UART mit 9bit und 9600baud zum Laufen gebracht hat, ist das Hauptproblem 
aber wirklich die Frage, was die Geräte erwarten. Das steht leider nicht 
im MDB-Manual sondern ist meist doch recht spezifisch. Daher würde Code 
für einen anderen Geldwechsler wahrscheinlich auch nicht wirklich 
helfen.

von Johannes S. (johannes_s20)


Lesenswert?

Alles klar und Danke.
Dann versuche  ich mal mein Glück bei NRI und dann seh ich mal weiter :)

von Jürgen Schneider (Gast)


Lesenswert?

Auch wenns schon ein paar Tage her ist:

Ich würde 8 Datenbits, 1 Stopbit und Parity auf dem Modebit probieren, 
dann sollte das auch klappen mit der grundsätzlichen Kommunikation. Wenn 
Du 8N1 fährst, wirst Du keine brauchbaren Ergebnisse bekommen, denn der 
Wechseler erwartet auf jeden Fall eine Parity, damit er weiß, welches 
Bit das Erste usw. ist.

Zum Reset:

Je nach Modus kann es sein, dass der Wechsler dann auch den Reset-Befehl 
zweimal braucht. Du bekommst als Antwort auf Reset normal ein Just-Reset 
und wenn das ausbleibt, würde ich versuchsweise den Befehl ein zweites 
Mal absenden.


Vielleicht hilft es Dir, wenn Du dir erstmal die Mühe machst, und mit 
Deinem Aufbau mitschneidest und beobachtest, welche Befehle in welchen 
Zeitfenstern vom Automaten kommen, damit Du weißt, was Du deinem AVR 
mitgeben musst. Bauanleitungen für rudimentäre Sniffer gibt es Zuhauf 
:-)

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.