Ich habe ein vorhandenes, halb vollständiges Verkaufsautomatenprojekt, das auf einem Atmel UTC ausgeführt wird und das ich auf den Pi portieren möchte.
Um mit Peripheriegeräten wie dem Münzprüfer zu kommunizieren, muss der Multi-Drop-Bus unterstützt werden, der über eine serielle Schnittstelle mit 9 Datenbits (plus Start-, Stopp- und Paritätsbits) verfügt.
Ich habe auf die harte Tour mit dem Atmel-Board gelernt, dass Hacks, die im Internet vorgeschlagen werden und auf der Verwendung des Paritätsbits als 9. Datenbit beruhen, zu schlechten Timing-Problemen führen können - schwer zu erkennen und zu korrigieren (also bitte nicht verweisen mich auf diese oder ähnliche. Danke).
Weiß jemand, ob / wo ich eine echte 9-Bit-serielle Schnittstelle für den Pi kaufen kann (Bonuspunkte, wenn es irgendwie mit dem Pi Null funktionieren kann).
Gibt es vielleicht einen Hut? Oder könnte ich einfach (ich habe als / w-Typ, mit wenig Wissen über h / w) eine andere Karte verwenden, um den 9-Datenbit-UART zu handhaben und das von einem Pi aus zu steuern?
Antworten:
Meine Pigpio- Bibliothek unterstützt das Lesen und Schreiben von seriellen 9-Bit-Daten. Es verwendet Bit Banging, sodass Sie jedes verfügbare GPIO verwenden können.
Wenn ich mich richtig erinnere, waren Geschwindigkeiten von 19,2 kbps oder langsamer ziemlich stabil.
Welche Bits pro Sekunde benötigen Sie?
Lesen ( C , Python ) ist etwas einfacher als Schreiben ( C , Python ).
quelle
Mir wurde ein Projekt zum Betreiben eines Snackautomaten zugewiesen, der das MDB-Protokoll für die Zahlung verwendet, und ich habe das Projekt mit Pi Zero (Orange) abgeschlossen.
Ich habe 9-Bit-Serien- und Software-Serienbibliotheken ausprobiert und hatte Zeitprobleme mit Pi Zero. Die serielle 9-Bit-Kommunikation von MDB wurde zu einem Problem. Laut MDB-Protokoll sollten Peripheriegeräte eine Toleranz von 5% für das Timing der seriellen Kommunikation haben, jedoch haben verschiedene Peripheriegerätehersteller unterschiedliche Toleranzen, die nicht mit dem MDB-Protokoll kompatibel sind. Wenn Sie der Meinung sind, dass Sie die serielle Kommunikation abgeschlossen haben, aber das Zahlungsperipheriegerät eines anderen Anbieters ausprobieren, funktioniert dies einfach nicht. Verlassen Sie sich also nicht auf das MDB-Protokolldatenblatt. Ich hatte es satt, MDB-Controller für Buggy-Anbieter zu implementieren. Einige Peripheriegeräte können während des internen Startvorgangs zu viel Strom aus den Uart-Pins ablassen und Ihre serielle Kommunikationsschicht beschädigen. Verwenden Sie also besser eine Abstraktion. Optokoppler sind in Ordnung, aber ich würde es trotzdem nicht tun Es wird nicht empfohlen, die serielle MDB-Kommunikation mit Pi Zero zu handhaben. Besser ist es, einen Middle-Layer-Ansatz mit einem AVR zu verwenden.
Anstatt Uart auf Pi Zero für die MDB-Kommunikation zu verwenden, habe ich einen Atmega328 AVR für MDB-Handling, Polling usw. verwendet. Atmega328 steuert die MDB-Peripheriegeräte mithilfe der Software Serial Library und sendet lesbare Daten an Pi Zero auf Hardware Serial. Alle Elektronikschemata, Quellen und Pi Zero Armbian-Bilder sowie Python-Code für Verkaufsvorgänge sind hier verfügbar:
http://eliverse.com/content/vendiverse/
Auf der Wiki-Seite finden Sie weitere Informationen zur Steuerung von Motoren, Produktlieferungssensoren, Kühlern und Zeichen-LCD-Anzeigen. Es ist ein komplettes Projekt zur Steuerung von Verkaufsautomaten und wird von einigen Automatenherstellern verwendet.
quelle
Ich habe auch eine vollständige Demo für die 9-Bit-UART-Emulation erstellt (basierend auf gerader / ungerader Parität). Sie finden es unter http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Alle Quellen auf Git verfügbar.
Sie können es einfach an Ihr Gerät anpassen. Hoffe du magst es.
quelle
Alle seriellen Daten sind per Definition 1 Bit. Es liegt an den Schnittstellen , die diese Daten lesen und schreiben, wie sie sich darauf einigen können, wie sie die Bits zu und von aussagekräftigen Daten interpretieren.
Wenn Sie 9 Datenbits und ein Paritätsbit sowie ein Stopp- und ein Startbit wünschen. Dann liegt es an Ihnen, Ihre Daten in dieses Format zu konvertieren und die in diesem Format gelesenen Daten zu interpretieren. Das in einer anderen Antwort erwähnte Pigpio-Modul bietet Ihnen die Hardware-Schnittstelle, die Sie benötigen, oder Sie können Ihre eigene schreiben. Wenn Sie in Python entwickeln, empfehle ich Ihnen, sich das bitString.py-Modul von Scott Griffiths als Bibliothek anzusehen, mit der sich bitbasierte Daten recht einfach bearbeiten lassen.
quelle
Ich bevorzuge definitiv Hardware-UART gegenüber Software-Implementierung wie pigpio.
Sie können das Paritätsbit für die 9-Bit-Kommunikation verwenden. Es gibt ein kleines Problem: Der aktuelle Kernel bietet keine CMSPAR-Unterstützung (Space / Mark-Parität).
Sie können jedoch auch mit dem aktuellen Kernel die gerade / ungerade Parität wechseln, um den gewünschten 9. Bitwert zu erhalten. Beispiel:
Besserer Ansatz IMHO ist die Verwendung eines kleinen Kernel-Patches für die CMSPAR-Unterstützung:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Es wird die Unterstützung für Mark / Space-Parität hinzugefügt , wodurch der Code etwas einfacher wird.
PS Ich habe MDB over Serial mit diesem Ansatz implementiert. Es funktioniert einwandfrei auf Pi.
Der PPS-Patch wurde genehmigt und CMSPAR funktioniert ab dem 4.6-Kernel sofort.
quelle
Aufgrund des 9-Bit-Formats und der strengen MDB-Timings können Sie RPi serial nicht ZUVERLÄSSIG direkt an den MDB-Bus anschließen. Nachrichten zwischen MDB-Peripheriegerät und RPi müssen im laufenden Betrieb und in Echtzeit konvertiert werden. Überprüfen Sie diesen Link, es wird helfen: DIY MDB-UART Konverter
quelle
Die akzeptierte Antwort, bei der ein Atmel-Prozessor mit echtem 9-Bit-Daten-URT verwendet wurde, der mit einem Pi kommuniziert, scheint entweder aufgegeben oder kommerziell angenommen worden zu sein.
Ich gehe also mit https://www.vendingtools.ro/en für Eur 70, und das wird meinen Pi mit dem MDB 9-Datenbitbus verbinden.
[Aktualisieren]
Siehe auch
https://www.qibixx.com/de/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
quelle