진정한 9 비트 직렬 포트 데이터?


10

파이로 포팅하려는 Atmel UTC에서 실행되는 기존의 반자동 판매기 프로젝트가 있습니다.

코인 억 셉터와 같은 주변 장치와 통신하려면 9- 데이터 비트 직렬 포트 인터페이스 (플러스 시작, 중지 및 패리티 비트)가있는 멀티 드롭 버스 를 지원해야합니다 .

Atmel 보드를 사용하여 그물에서 제안한 해킹을 통해 어려운 방법을 배웠습니다 .9 번째 데이터 비트가 나쁜 타이밍 문제를 일으킬 수 있으므로 감지 및 수정하기가 어려우므로 패리티 비트를 사용하는 것이 좋습니다. 또는 이와 유사한 것을 참조하십시오 . 감사합니다).

Pi의 진정한 9 비트 직렬 포트를 구입할 수 있는지 여부를 아는 사람이 있습니까 (Pi Zero와 어떻게 작동 할 수 있는지 보너스 포인트).

아마도 모자가 있습니까? 아니면 다른 데이터를 사용하여 9 데이터 비트 UART를 처리하고 Pi에서 제어 할 수 있습니까?


1
GPIO에는 직렬 인터페이스가 있습니다-Raspbian 등의 이미지에는 Pi의 출력을 제공하도록 설정되어 있으므로 먼저 비활성화해야하지만 비트가 표준 범위에 있지 않은 문제가 있습니다. 포럼 의이 게시물도 도움이 될 수 있습니다.
Wilf

1
프로젝트에 하드웨어를 추가 할 수 있습니까? UART가 포함 된 쉴드는 하나를 만들기가 어렵지 않으며 필요한 것보다 더 많은 I / O를 사용할 수 있지만 필요한 것을 정확하게 제공합니다. 실제로 저가형 PIC CPU는 너무 많은 비용이나 과도한 작업없이 8 비트와 9 비트 직렬로 변환하도록 빠르게 프로그래밍 될 수 있습니다.
Michael Kohne

내가 어디서 살 수 있을까요?
Mawg는 모니카

답변:


7

pigpio 라이브러리는 9 비트 직렬 데이터 읽기 및 쓰기를 지원합니다. 사용 가능한 GPIO를 사용할 수 있도록 비트 뱅킹을 사용합니다.

정확하게 기억한다면 19.2kbps 이하의 속도는 꽤 안정적이었습니다.

초당 어떤 비트가 필요합니까?

읽기 ( C , Python )는 쓰기 ( C , Python ) 보다 약간 쉽습니다 .


1
100 * 확실합니까? 처음 개발을 시작했을 때, 나는 그러한 "해킹"에 대해 경고를 받았으며 타이밍 문제가있을 것이라고 말했습니다. 자판기로 누군가 시도해 본 적이 있습니까? en.wikipedia.org/wiki/Multidrop_buscoin-acceptor.com.cn/Upload/EditorFiles/technicalfile/... (I는 회사 방화벽이 같은 죄송합니다, 나는 sectoin 수를 줄 수)
Mawg는 분석 재개 모니카 말한다

3
내가 가지고있는 유일한 경험은 Pi와 USB 직렬 동글이있는 랩톱 사이의 라이브러리를 사용하는 것입니다. 내가 한 테스트는 raspberrypi.stackexchange.com/questions/27488/…에 문서화되어 있습니다. 내 소프트웨어는 RX / TX 및 접지 만 사용하므로 다른 직렬 신호로 멋진 작업을 수행하면 문제가 발생할 수 있습니다.
joan

좋은 데요 : 사양을 확인하고 다시 연락 드리겠습니다
Mawg는 Monica를

2
@Mawg : 당신은 이것을 받아 들였습니다. 제안 된 솔루션이 안정적으로 작동 했습니까?
Thomas Weller

3

지불을 위해 MDB 프로토콜을 사용하는 스낵 자판기를 운영하는 프로젝트가 할당되었고 Pi Zero (주황색)를 사용하여 프로젝트를 완료했습니다.

9 비트 하드웨어 직렬 및 소프트웨어 직렬 라이브러리를 시도했지만 Pi Zero에서 타이밍 문제가있었습니다. MDB의 9 비트 직렬 통신은 어려움이되었습니다. MDB 프로토콜에 따르면 주변 장치는 직렬 통신 타이밍에 대해 5 %의 허용 오차를 가져야하지만 MDB 프로토콜과 호환되지 않는 다른 주변 장치 공급 업체의 허용 오차는 서로 다릅니다. 직렬 통신을 달성했다고 생각하지만 다른 공급 업체의 지불 주변 장치를 사용하려고하면 작동하지 않습니다. 따라서 MDB 프로토콜 데이터 시트에 의존하지 마십시오. 버그가 많은 공급 업체를 위해 MDB 컨트롤러를 구현하는 데 지쳤습니다. 또한 일부 주변 장치는 내부 부팅 프로세스 중에 uart 핀에서 과도한 전류를 방출하여 직렬 통신 계층을 손상시킬 수 있습니다. 따라서 추상화를 사용하는 것이 좋습니다. 광 커플러는 괜찮지 만 여전히 Pi Zero를 사용한 MDB 직렬 통신 처리를 권장하지 않습니다. 더 좋은 방법은 AVR을 사용하여 중간 계층 접근 방식을 사용하는 것입니다.

MDB 통신을 위해 Pi Zero에서 Uart를 사용하는 대신 MDB 처리, 폴링 등에 Atmega328 AVR을 사용했습니다. Atmega328은 소프트웨어 직렬 라이브러리를 사용하여 MDB 주변 장치를 제어하고 사람이 읽을 수있는 데이터를 하드웨어 직렬의 Pi Zero로 보냅니다. 모든 전자 구성표, 소스 및 자동 판매기 작업을위한 Pi Zero Armbian 이미지, Python 코드는 다음에서 사용할 수 있습니다.

http://eliverse.com/content/vendiverse/

모터, 제품 전달 센서, 냉각기 및 문자 LCD 디스플레이 제어에 대한 자세한 내용은 Wiki 페이지를 확인할 수 있습니다. 완전한 자동 판매기 컨트롤러 프로젝트이며 자동 판매기 생산 업체에서 사용하고 있습니다.


이것은 특히 첫 번째 답변이므로 환상적인 답변입니다. 나는 이전에 진정한 9 비트 UART를 갖춘 Atmel 보드에서 성공했으며 Raspberry Pi를 사용하여 비용을 절약하기를 희망했지만 솔루션이 너무 포괄적이기 때문에 그것을 사용하지 않는 바보가 될 것입니다. 아아, 나는 소프트웨어 유일한 사람이므로 프로토 타입의 경우 납땜이 필요없는 솔루션을 강력하게 선호합니다. COTS 보드를 추천 할 수 있습니까?
Mawg는 Monica Monica를

웹 사이트 의이 페이지 에는 "Vendverse VMC 보드 만들기의 단계를 완료했거나 Vendiverse VMC 보드를 얻은 경우"라고 표시되어 있습니다. 당신에게서 하나를 구입할 수 있습니까? 비용은 얼마입니까? 또한 특정 MDB 주변 장치를 권장하는 경우 사이트에 추가 할 수 있습니까? 감사합니다
Mawg는 Monica Monica를 복원

내 이메일이 스팸에 걸려있는 것 같습니다. 나와 연락 할 수 있습니까? 당신은 내 이메일 주소를 가지고 있고, 여전히 브레멘에 있습니다
Mawg는 Monica를

이제 페이지가 죽었고 프로젝트가 중단 된 것처럼 보입니다 :-(
Mawg는 모니카


1

모든 시리얼 데이터는 정의상 1 비트입니다. 그것은 읽기 인터페이스까지입니다 데이터를 어떻게가 의미있는 데이터에서 비트를 해석하는 방법에 동의하는 서면.
9 비트의 데이터와 패리티 비트, 정지 및 시작 비트를 원하는 경우 그러면 데이터를 해당 형식으로 변환하고 해당 형식으로 읽은 데이터를 해석하는 것은 사용자의 책임입니다. 다른 답변에 언급 된 pigpio 모듈은 필요한 하드웨어 인터페이스를 제공하거나 직접 작성할 수 있습니다. 파이썬으로 개발하는 경우 Scott Griffiths의 bitString.py 모듈을 비트 기반 데이터를 매우 쉽게 조작 할 수있는 라이브러리로 살펴 보는 것이 좋습니다.


5
직렬 데이터 전송 문제가 타이밍에 있습니다. 데이터는 자체 클럭이 아니며 정지 / 시작 비트에서만 보장되는 레벨 전환입니다. 양쪽 끝은 비트가있는 곳을 해결하기 위해 꽉 짜여 있지 않은 타이밍을 유지해야합니다. 그렇기 때문에 일반적으로 전용 하드웨어를 사용하여 데이터를 송수신합니다. 타이밍 여유가 거의 없습니다.
joan

1

필자는 pigpio처럼 소프트웨어 구현보다 하드웨어 UART를 선호합니다.

9 비트 통신에 패리티 비트를 사용할 수 있습니다. 하나의 작은 문제가 있습니다 : 현재 커널은 CMSPAR을 지원하지 않습니다 (space / mark parity).
그러나 현재 커널에서도 짝수 / 홀수 패리티를 전환하여 원하는 9 비트 값을 얻을 수 있습니다.

unsigned char check_parity(unsigned char v)
{
    v ^= v >> 4;
    v &= 0xf;
    return (0x6996 >> ((v ^ (v >> 4)) & 0xf)) & 1;
}

/* send 9 bits - 8 bits of byte + 1 bit of parity */
send_byte_with_parity(unsigned char byte, unsigned char parity)
{
    if (check_parity(byte) == parity) {
        options.c_cflag &= ~PARODD;
    } else {
        options.c_cflag |= PARODD;
    }
    tcsetattr(fd, 0, &options);
    write(fd, &byte, 1);
}


더 나은 접근 이럴 CMSPAR 지원을 위해 작은 커널 패치를 사용하는 것입니다
http://marc.info/?l=linux-serial&m=145706834101241&w=2
그것은 코드가 조금 더 간단 할 수 있습니다 마크 / 스페이스 패리티 지원을 추가합니다.

PS 나는이 접근법으로 직렬을 통해 MDB를 구현했습니다. 그것은 완벽하게 Pi에서 작동합니다.
PPS 패치가 승인되었으며 CMSPAR은 4.6 커널부터 즉시 작동합니다.


패치 나 링크가없고 더 자세한 내용이 없으면 이것이 답이 아니며 유용한 의견도 아닙니다. 이론적으로는 가능하다는 것 외에는 말입니다.
Steve Robillard

여전히 대답보다 더 많은 질문을 남깁니다. MDB를 어떻게 구현하고 어떻게 커널 패치를 적용합니까?이 모든 Pi 또는 일부에만 적용됩니까? 이것이 또 뭐가 깨질까요? 필요한 경우 어떻게 취소 할 수 있습니까? 이 패치는 안전합니까? OP에서 구현하지 않았기 때문에이를 알고 있다는 것을 기억하십시오.
Steve Robillard

1
답변이 더 나을 수 있음을 인정하여 답변을 삭제하지 않았습니다. 나는 당신이 그것을 개선 할 수있는 기회를 갖기를 바랍니다.
Steve Robillard

다른 무엇을 추가해야합니까? MDB 구현? 나는 고용주로부터 공개 소스에 대한 허가를 얻지 못했습니다.
edo1

내 이전 의견을보고 최종 사용자가 당신이하는 모든 것을 알지 못한다는 것을 기억하십시오.
Steve Robillard

1

당신은 할 수 없습니다 신뢰할 9 비트 형식과 엄격한 MDB 타이밍에 의한 MDB 버스에 직접 연결 RPI의 시리얼. MDB 주변 장치와 RPi 간의 메시지는 실시간으로 실시간 변환해야합니다. 도움이 될만한이 링크를 확인하십시오 : DIY MDB-UART 변환기


0

Pi와 통신하는 진정한 9 비트 데이터 URT가있는 Atmel 프로세서를 사용한 승인 된 답변은 포기되었거나 상업용으로 보입니다.

따라서 Eur 70의 경우 https://www.vendingtools.ro/en 을 사용하여 Pi를 MDB 9 데이터 비트 버스에 인터페이스합니다.


[최신 정보]

또한보십시오

https://www.qibixx.com/en/products/mdb-interface/

https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.