Eu tenho um projeto de máquina de vending semi-completo, em execução no UTC do Atmel, que quero portar para o Pi.
Para conversar com periféricos, como o aceitador de moedas, ele deve suportar o barramento multi-drop, que possui uma interface de porta serial de 9 bits (mais os bits de início, parada e paridade).
Aprendi da maneira mais difícil com a diretoria da Atmel que hacks sugeridos na rede, que dependem do uso do bit de paridade, já que o nono bit de dados pode causar problemas de tempo ruim - difíceis de detectar e corrigir (por isso, não consulte-me para isso , ou similar. Obrigado).
Alguém sabe se / onde eu posso comprar uma verdadeira porta serial de 9 bits para o Pi (pontos de bônus se, de alguma forma, funcionar com o Pi zero).
Existe, talvez, um chapéu disponível? Ou eu poderia facilmente (eu tenho o / as cara, com pouco conhecimento de h / w) usar outra placa para lidar com o UART de 9 bits e controlar isso de um Pi?
Respostas:
Minha biblioteca pigpio suporta a leitura e gravação de dados seriais de 9 bits. Ele usa bit bang para que você possa usar qualquer GPIO disponível.
Se bem me lembro, qualquer velocidade de 19,2 kbps ou mais lenta era bastante estável.
Quais bits por segundo você precisa?
Ler ( C , Python ) é um pouco mais fácil do que escrever ( C , Python ).
fonte
Fui designado a um projeto para executar uma máquina de venda automática de lanches que usa o protocolo MDB para pagamento e concluí o projeto usando Pi Zero (laranja).
Eu tentei bibliotecas seriais de hardware e software de 9 bits e tive problemas de temporização no Pi Zero. A comunicação serial de 9 bits do MDB se tornou uma dor. O protocolo MDB diz que os periféricos devem ter tolerância de% 5 para o tempo de comunicação serial, no entanto, diferentes fornecedores de periféricos têm tolerâncias diferentes, não compatíveis com o protocolo MDB. Quando você pensa que concluiu a comunicação serial, mas tenta um periférico de pagamento de outro fornecedor, simplesmente não funciona. Portanto, não confie na folha de dados do protocolo MDB. Fiquei cansado de implementar o controlador MDB para fornecedores de buggy. Além disso, alguns periféricos podem drenar quantidades excessivas de corrente dos pinos uart durante o processo de inicialização interna e podem danificar a camada de comunicação serial. Então, é melhor você usar uma abstração. Os acopladores ópticos estão bem, mas eu ainda não Recomenda o manuseio da comunicação serial MDB usando o Pi Zero. A melhor maneira é usar uma abordagem de camada intermediária usando um AVR.
Em vez de usar o Uart no Pi Zero para comunicação MDB, usei um AVR Atmega328 para manipulação, pesquisa etc. do MDB. O Atmega328 controla os periféricos do MDB usando a biblioteca Serial de Software e envia dados legíveis para o Pi Zero na série de hardware. Todo esquema eletrônico, fontes e imagem Pi Zero Armbian, código Python para operações de venda automática estão disponíveis aqui:
http://eliverse.com/content/vendiverse/
Você pode verificar a página da wiki para obter mais detalhes sobre o controle de motores, sensores de entrega de produtos, resfriadores e displays LCD de caracteres. É um projeto completo de controlador de máquina de venda automática e está sendo usado por alguns produtores de máquinas de venda automática.
fonte
Também fiz uma demonstração completa da emulação UART de 9 bits (com base na paridade ímpar / par). Você pode encontrá-lo http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Todas as fontes disponíveis no git.
Você pode adaptá-lo facilmente ao seu dispositivo. Espero que você goste.
fonte
Todos os dados seriais são por definição, 1 bit. Cabe às interfaces que leem e escrevem esses dados como chegar a um acordo sobre como eles interpretam os bits de e para dados significativos.
Se você deseja 9 bits de dados, um bit de paridade e um bit de parada e início. Cabe a você converter seus dados para esse formato e interpretar os dados que você lê nesse formato. O módulo pigpio mencionado em outra resposta fornecerá a interface de hardware necessária ou você poderá escrever sua própria. Se você estiver desenvolvendo em python, sugiro dar uma olhada no módulo bitString.py de Scott Griffiths como uma biblioteca que facilita bastante a manipulação de dados baseados em bits.
fonte
Definitivamente, prefiro o UART de hardware à implementação de software, como o pigpio.
Você pode usar o bit de paridade para comunicação de 9 bits. Há um pequeno problema: o kernel atual não tem suporte ao CMSPAR (paridade de espaço / marca).
Mas você pode alternar a paridade ímpar / ímpar para obter o valor do nono bit desejado, mesmo com o kernel atual, por exemplo:
Melhor abordagem O IMHO é usar o pequeno patch do kernel para suporte ao CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Ele adiciona suporte de paridade de marca / espaço, o que permite que o código seja um pouco mais simples.
PS: Eu implementei MDB sobre serial com essa abordagem. Funciona perfeitamente no Pi.
O patch do PPS foi aprovado e o CMSPAR funcionará imediatamente, começando com o kernel 4.6.
fonte
Você não pode CONFIÁVEL RPI conexão em série directamente para o autocarro MDB devido ao formato de 9 bits e horários MDB estritas. As mensagens entre o MDB periférico e o RPi precisam ser convertidas on-the-fly e em tempo real. Verifique este link para ajudar: DIY MDB-UART converter
fonte
A resposta aceita, que usou um processador Atmel com URT de dados de 9 bits verdadeiros que se comunica com um Pi, parece ter sido abandonada ou adotada como comercial.
Então, eu estou indo com https://www.vendingtools.ro/en para Eur 70, e isso fará a interface do meu Pi com o barramento de dados MDB 9.
[Atualizar]
Veja também
https://www.qibixx.com/en/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
fonte