J'ai un projet de distributeur automatique à moitié complet exécuté sur un Atmel UTC, que je souhaite porter sur le Pi.
Afin de parler aux périphériques, tels que l'accepteur de pièces, il doit prendre en charge le bus multipoint qui possède une interface de port série à 9 bits de données (plus les bits de démarrage, d'arrêt et de parité).
J'ai appris à la dure avec la carte Atmel qui pirate ce que l'on trouve suggéré sur le net, qui repose sur l'utilisation du bit de parité car le 9ème bit de données peut causer de mauvais problèmes de synchronisation - difficiles à détecter et à corriger (donc, s'il vous plaît ne le faites pas me référer à cela , ou similaire. Merci).
Est-ce que quelqu'un sait si / où je peux acheter un vrai port série 9 bits pour le Pi (points bonus s'il peut en quelque sorte fonctionner avec le Pi zéro).
Y a-t-il peut-être un chapeau disponible? Ou pourrais-je facilement (j'ai en tant que / w guy, avec peu de connaissances en h / w) utiliser une autre carte pour gérer l'UART à 9 bits de données et contrôler cela à partir d'un Pi?
Réponses:
Ma bibliothèque pigpio prend en charge la lecture et l'écriture de données série 9 bits. Il utilise le bit banging pour que vous puissiez utiliser n'importe quel GPIO disponible.
Si je me souviens bien, les vitesses de 19,2 kbps ou plus lentes étaient assez stables.
De quels bits par seconde avez-vous besoin?
La lecture ( C , Python ) est légèrement plus facile que l'écriture ( C , Python ).
la source
On m'a confié un projet pour gérer un distributeur automatique de collations qui utilise le protocole MDB pour le paiement et j'ai terminé le projet en utilisant Pi Zero (Orange).
J'ai essayé des bibliothèques matérielles et logicielles série 9 bits et j'ai eu des problèmes de synchronisation sur Pi Zero. La communication série 9 bits de MDB est devenue une douleur. Le protocole MDB indique que les périphériques devraient avoir une tolérance de 5% pour le calendrier de communication série, mais différents fournisseurs de périphériques ont des tolérances différentes, non conformes au protocole MDB. Lorsque vous pensez que vous avez effectué une communication série mais essayez un périphérique de paiement d'un autre fournisseur, cela ne fonctionne tout simplement pas. Ne vous fiez donc pas à la fiche technique du protocole MDB. Je suis tombé malade et fatigué d'implémenter le contrôleur MDB pour les vendeurs de buggy. Certains périphériques peuvent également drainer des quantités excessives de courant provenant des broches uart pendant leur processus de démarrage interne et peuvent endommager votre couche de communication série. Donc, il vaut mieux utiliser une abstraction. Les optocoupleurs sont bien mais je ne le ferais toujours pas Nous vous recommandons de gérer la communication série MDB à l'aide de Pi Zero. Le meilleur moyen est d'utiliser une approche de couche intermédiaire à l'aide d'un AVR.
Plutôt en utilisant Uart sur Pi Zero pour la communication MDB, j'ai utilisé un AVR Atmega328 pour la gestion, l'interrogation, etc. Tous les schémas électroniques, les sources et l'image Pi Zero Armbian, le code Python pour les opérations de vente sont disponibles ici:
http://eliverse.com/content/vendiverse/
Vous pouvez consulter la page wiki pour plus de détails sur le contrôle des moteurs, des capteurs de distribution de produits, des refroidisseurs et des écrans LCD à caractères. Il s'agit d'un projet complet de contrôleur de distributeur automatique et il est utilisé par quelques producteurs de distributeurs automatiques.
la source
J'ai également fait une démo complète pour l'émulation UART 9 bits (basée sur la parité paire / impaire). Vous pouvez le trouver http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Toutes les sources disponibles sur git.
Vous pouvez facilement l'adapter à votre appareil. J'espère que vous aimez.
la source
Toutes les données série sont par définition de 1 bit. C'est aux interfaces qui lisent et écrivent ces données comment se mettre d'accord sur la façon dont elles interprètent les bits vers et à partir de données significatives.
Si vous voulez 9 bits de données, et un bit de parité, et un bit d'arrêt et un bit de début. Ensuite, c'est à vous de convertir vos données dans ce format et d'interpréter les données que vous lisez dans ce format. Le module pigpio mentionné dans une autre réponse vous donnera l'interface matérielle dont vous avez besoin, ou vous pouvez écrire le vôtre. Si vous développez en python, je vous suggère de jeter un œil au module bitString.py de Scott Griffiths comme une bibliothèque qui facilite la manipulation des données basées sur les bits.
la source
Je préfère définitivement l'UART matériel à l'implémentation logicielle comme le fait pigpio.
Vous pouvez utiliser un bit de parité pour une communication 9 bits. Il y a un petit problème: le noyau actuel ne prend pas en charge CMSPAR (parité espace / marque).
Mais vous pouvez changer la parité paire / impaire pour obtenir la valeur de 9ème bit souhaitée même avec le noyau actuel, par exemple:
Une meilleure approche à mon humble avis est d'utiliser un petit patch de noyau pour le support CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Il ajoute un support de parité marque / espace, ce qui permet au code d'être un peu plus simple.
PS J'ai implémenté MDB sur série avec cette approche. Cela fonctionne parfaitement sur Pi.
Le correctif PPS a été approuvé et CMSPAR fonctionnera prêt à l'emploi à partir du noyau 4.6.
la source
Vous ne pouvez pas FIABLE série de connexion IPD directement au bus MDB dû au format 9 bits et les horaires de MDB strictes. Les messages entre le périphérique MDB et RPi doivent être convertis à la volée et en temps réel. Vérifiez ce lien, cela vous aidera: Convertisseur DIY MDB-UART
la source
La réponse acceptée, qui utilisait un processeur Atmel avec de vraies données URT de 9 bits communiquant avec un Pi, semble avoir été abandonnée ou commercialisée.
Je vais donc avec https://www.vendingtools.ro/en pour Eur 70, et cela interfacera mon Pi au bus de bits de données MDB 9.
[Mettre à jour]
Voir également
https://www.qibixx.com/en/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
la source