Mam istniejący, w połowie kompletny projekt automatu działającego na Atmel UTC, który chcę przenieść do Pi.
Aby rozmawiać z urządzeniami peryferyjnymi, takimi jak akceptor monet, musi obsługiwać magistralę Multi-Drop Bus z 9-bitowym interfejsem portu szeregowego (plus bity start, stop i parzystość).
Nauczyłem się na własnej skórze z płytką Atmel, która hakuje znalezione w sieci sugestie, które polegają na użyciu bitu parzystości, ponieważ 9-ty bit danych może powodować złe problemy z synchronizacją - trudne do wykrycia i poprawienia (więc nie rób skieruj mnie do tego lub podobnego. Dzięki).
Czy ktoś wie, czy / gdzie mogę kupić prawdziwy 9-bitowy port szeregowy dla Pi (punkty bonusowe, jeśli może on jakoś pracować z Pi zero).
Czy jest dostępny kapelusz? Czy mógłbym łatwo (mam jako / w faceta, z niewielką wiedzą na temat cz / w) użyć innej płyty do obsługi 9 bitów danych UART i kontrolować to z Pi?
Odpowiedzi:
Moja biblioteka pigpio obsługuje odczytywanie i zapisywanie 9-bitowych danych szeregowych. Wykorzystuje bit banging, dzięki czemu można użyć dowolnego dostępnego GPIO.
Jeśli dobrze pamiętam, prędkości 19,2 kb / s lub wolniejsze były dość stabilne.
Jakich bitów na sekundę potrzebujesz?
Czytanie ( C , Python ) jest nieco łatwiejsze niż pisanie ( C , Python ).
źródło
Przydzielono mi projekt uruchomienia automatu z przekąskami, który korzysta z protokołu MDB do płatności, i ukończyłem projekt przy użyciu Pi Zero (Orange).
Wypróbowałem 9-bitowe sprzętowe biblioteki szeregowe i programowe i miałem problemy z synchronizacją na Pi Zero. 9-bitowa komunikacja MDB stała się uciążliwa. Protokół MDB mówi, że urządzenia peryferyjne powinny mieć tolerancję% 5 dla szeregowego taktowania komunikacji, jednak różni dostawcy urządzeń peryferyjnych mają różne tolerancje, niezgodne z protokołem MDB. Gdy myślisz, że udało Ci się nawiązać komunikację szeregową, ale wypróbowałeś peryferyjne urządzenie płatnicze innego dostawcy, to po prostu nie działa. Więc nie polegaj na arkuszu danych protokołu MDB. Mam już dość wdrażania kontrolera MDB dla błędnych dostawców. Również niektóre urządzenia peryferyjne mogą pobierać nadmierne ilości prądu z pinów Uart podczas wewnętrznego procesu rozruchu i mogą uszkodzić szeregową warstwę komunikacyjną. Więc lepiej użyj abstrakcji. Transoptory są w porządku, ale nadal nie chciałbym Zalecam obsługę komunikacji szeregowej MDB za pomocą Pi Zero. Lepszym sposobem jest zastosowanie metody warstwy środkowej przy użyciu AVR.
Zamiast używać Uart na Pi Zero do komunikacji MDB, użyłem Atmega328 AVR do obsługi MDB, odpytywania itp. Atmega328 kontroluje urządzenia peryferyjne MDB za pomocą biblioteki Software Serial i wysyła czytelne dane ludzkie do Pi Zero na sprzęcie szeregowym. Cały schemat elektroniki, źródła i obraz Pi Zero Armbian, kod Pythona do operacji vendingowych są dostępne tutaj:
http://eliverse.com/content/vendiverse/
Możesz sprawdzić stronę wiki, aby uzyskać szczegółowe informacje na temat sterowania silnikami, czujnikami dostawy produktów, chłodnicami i wyświetlaczami LCD. Jest to kompletny projekt kontrolera automatu i jest używany przez kilku producentów automatów.
źródło
Zrobiłem też kompletne demo dla 9-bitowej emulacji UART (w oparciu o parzystą / nieparzystą parzystość). Możesz go znaleźć http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Wszystkie źródła dostępne w git.
Możesz łatwo dostosować go do swojego urządzenia. Mam nadzieję że ci się spodoba.
źródło
Wszystkie dane szeregowe są z definicji 1 bitowe. Interfejsy odczytują i zapisują te dane, jak uzgodnić, w jaki sposób interpretują bity do i od znaczących danych.
Jeśli chcesz 9 bitów danych i bit parzystości oraz stop i bit startu. Następnie to do Ciebie należy konwersja danych do tego formatu i interpretacja danych, które czytasz w tym formacie. Moduł pigpio wspomniany w innej odpowiedzi da ci interfejs sprzętowy, którego potrzebujesz, lub możesz napisać własny. Jeśli rozwijasz się w Pythonie, sugeruję przyjrzeć się modułowi bitString.py autorstwa Scotta Griffithsa jako bibliotekę, która dość łatwo manipuluje danymi opartymi na bitach.
źródło
Zdecydowanie wolę sprzętowy UART niż implementację oprogramowania, tak jak robi to Pigpio.
Możesz użyć bitu parzystości do komunikacji 9-bitowej. Jest jeden mały problem: bieżące jądro nie obsługuje CMSPAR (parzystość spacja / znak).
Ale możesz zmienić parzystość / parzystość nieparzystą, aby uzyskać pożądaną 9-bitową wartość, nawet z bieżącym jądrem, na przykład:
Lepsze podejście IMHO używa małej poprawki jądra do obsługi CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Dodaje obsługę parzystości znak / przestrzeń, co pozwala na nieco prostszy kod.
PS Z tym podejściem wdrożyłem MDB w wersji szeregowej. Działa na Pi bezbłędnie.
Poprawka PPS została zatwierdzona, a CMSPAR będzie działać od samego początku, począwszy od jądra 4.6.
źródło
Nie można NIEZAWODNIE podłączyć szeregowego RPi bezpośrednio do magistrali MDB ze względu na format 9-bitowy i ścisłe taktowanie MDB. Wiadomości między urządzeniami peryferyjnymi MDB i RPi należy konwertować w locie i w czasie rzeczywistym. Sprawdź ten link, pomoże: DIY konwerter MDB-UART
źródło
Przyjęta odpowiedź, która używa procesora Atmel z prawdziwym 9-bitowym URT danych komunikującym się z Pi, wygląda na porzuconą lub komercyjną.
Więc idę z https://www.vendingtools.ro/en dla Eur 70, a to połączy moje Pi z magistralą danych MDB 9.
[Aktualizacja]
Zobacz też
https://www.qibixx.com/en/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
źródło