真の9ビットシリアルポートデータ?


10

Atmel UTCで実行されている既存の半分完成した自動販売機プロジェクトがあり、これをPiに移植したいと考えています。

コインアクセプターなどの周辺機器と通信するには、9データビットのシリアルポートインターフェイス(およびスタート、ストップ、パリティビット)を備えたマルチドロップバスをサポート する必要があります。

9番目のデータビットとしてパリ​​ティビットを使用することに依存する、ネット上で提案されたハッキン​​グを行うAtmelボードでハードな方法を学びました。これは、タイミングの問題を引き起こす可能性があります。私を参照してください。この、または類似した。おかげで)。

私がPiの真の9ビットシリアルポートを購入できるかどうか、またはどこで購入できるかを誰かが知っていますか?

多分、帽子はありますか?または、簡単に(私はas / wの人がいて、h / wの知識がほとんどない)別のボードを使用して9データビットUARTを処理し、それをPiから制御できますか?


1
GPIOにはシリアルインターフェイスがあります。Raspbianなどのイメージでは、Piからの出力を提供するように設定されているため、最初に無効にする必要がありますが、ビットが標準の範囲にないという問題があります。フォーラムへのこの投稿も役立つかもしれません。
Wilf、2015年

1
プロジェクトにハードウェアを追加できますか?UARTを備えたシールドは、1つを作成するのにそれほど難しくなく、必要以上のI / Oを使用する可能性がありますが、必要なものを正確に提供します。本当にローエンドのPIC CPUは、コストをかけすぎたり、作業量を増やしたりすることなく、8ビットと9ビットのシリアル間を変換するようにすばやくプログラムできます。
Michael Kohne、2015年

どこで買えますか?
Mawgはモニカを2016

回答:


7

私のpigpioライブラリは、9ビットのシリアルデータの読み取りと書き込みをサポートしています。ビットバンギングを使用しているため、利用可能な任意のGPIOを使用できます。

私が正しく覚えていれば、19.2 kbps以下の速度はかなり安定していた。

あなたは毎秒何ビットが必要ですか?

読む(CPython)は書く(CPython)よりも少し簡単です。


1
100 *よろしいですか?私が最初に開発を始めたとき、私はそのような「ハック」について警告され、タイミングの問題があると言われました。誰かが自動販売機でそれを試したかどうか知っていますか?en.wikipedia.org/wiki/Multidrop_buscoin-acceptor.com.cn/Upload/EditorFiles/technicalfile/...(私は会社のファイアウォールの背後に午前と申し訳ありませんが、私はsectoin番号を与えることはできません)
MawgはREINSTATEモニカ語る

3
私が持っている唯一の経験は、PiとUSBシリアルドングルを備えたラップトップの間でライブラリを使用することです。私が行ったテストは、raspberrypi.stackexchange.com / questions / 27488 / …に文書化されています。私のソフトウェアはRX / TXとグラウンドのみを使用しているため、他のシリアル信号を使用して何か問題を起こすと、問題が発生する可能性があります。
joan 2015年

いいですね。:仕様を確認してご
連絡

2
@Mawg:あなたはこれを受け入れました。提案されたソリューションが確実に機能したということですか?
トーマスウェラー2016

3

支払いにMDBプロトコルを使用するスナック自動販売機を実行するプロジェクトが割り当てられ、Pi Zero(オレンジ)を使用してプロジェクトを完了しました。

9ビットのハードウェアシリアルライブラリとソフトウェアシリアルライブラリを試しましたが、Pi Zeroでタイミングの問題がありました。MDBの9ビットシリアル通信が問題になりました。MDBプロトコルでは、ペリフェラルはシリアル通信のタイミングに対して%5の許容範囲を持つ必要があると述べていますが、ペリフェラルベンダーが異なると許容範囲も異なり、MDBプロトコルに準拠しません。シリアル通信は完了しているが、別のベンダーの支払い周辺機器を試してみると、うまくいきません。したがって、MDBプロトコルデータシートに依存しないでください。バギーベンダー向けのMDBコントローラーの実装にうんざりしました。また、一部の周辺機器は、内部ブートプロセス中にUARTピンから大量の電流を排出し、シリアル通信層を損傷する可能性があります。したがって、抽象化を使用する方がよいでしょう。オプトカプラーは大丈夫ですが、それでも私はしません t 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はモニカを2017

Webサイトのこのページには、「Vendiverse VMCボードの作成手順を完了した場合、またはVendiverse VMCボードを入手した場合」と表示されます。購入できますか?それはいくらかかりますか?また、特定のMDB周辺機器を推奨する場合、それをサイトに追加できますか?ありがとう
Mawgはモニカを2017

メールが迷惑メールに巻き込まれているようです。連絡してもらえますか?あなたは私のメールアドレスを持っていて、私はまだブレーメンにいます
Mawgはモニカを'25

現在、ページは死んでいるように見え、プロジェクトは中止されました:-(
Mawgがモニカを復活させた


1

すべてのシリアルデータは、定義上、1ビットです。それは読んでのインターフェイスにアップしている、データがどのようににし、意味のあるデータからビットをどう解釈するかに同意することを書面。
9ビットのデータ、パリティビット、ストップビットとスタートビットが必要な場合。次に、データをその形式に変換し、その形式で読み取ったデータを解釈するかどうかは、あなた次第です。別の回答で言及されているpigpioモジュールは、必要なハードウェアインターフェースを提供するか、独自のハードウェアを作成することができます。Pythonで開発している場合は、ビットベースのデータの操作をかなり簡単にするライブラリとして、Scott GriffithsによるbitString.pyモジュールを参照することをお勧めします。


5
シリアルデータの送信に関する問題はタイミングにあります。データはセルフクロッキングではなく、唯一の保証されたレベル遷移はストップ/スタートビットにあります。両端は、ビットがどこにあるかを把握するために、タイトで中断されないタイミングを維持する必要があります。そのため、通常、データの送受信には専用のハードウェアが使用されます。タイミングに余裕があります。
joan 2015年

1

私は、pigpioのようにソフトウェア実装よりもハードウェアUARTを確実に好みます。

9ビット通信にはパリティビットを使用できます。小さな問題が1つあります。現在のカーネルはCMSPARをサポートしていません(スペース/マークパリティ)。
ただし、現在のカーネルでも、偶数/奇数パリティを切り替えて、目的の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 over serialを実装しました。Piで問題なく動作します。
PPSパッチが承認され、4.6カーネル以降、CMSPARはそのまま使用できます。


パッチまたは少なくともリンク、そしてより完全な詳細がなければ、これは答えではなく、役立つコメントすらありません-理論的には可能であると言う以外は。
Steve Robillard、2016年

それでも、答えよりも多くの質問が残ります。MDBを実装する方法、カーネルパッチを適用する方法、これはすべてのPiで動作しますか、それとも一部のPiでのみ動作しますか?他に何が壊れるのでしょうか?必要に応じてこれを元に戻すにはどうすればよいですか?このパッチは安全ですか?OPが実装していないため、これを知っていることを覚えておいてください。
Steve Robillard

1
あなたがあなたの答えがより良いかもしれないと認めたので、私はあなたの答えを元に戻しました。この機会に是非改善してください。
Steve Robillard 2016年

他に何を追加する必要がありますか?MDBの実装?雇用主からオープンソース化する許可を得ていませんでした。
edo1 2016年

私の以前のコメントを見て、エンドユーザーがあなたのすることすべてを知っているわけではないことを覚えておいてください。
Steve Robillard、2016年

1

9ビット形式と厳密なMDBタイミングのために、RPiシリアルをMDBバスに直接信頼性高く接続することはできません。MDBペリフェラルとRPi間のメッセージは、オンザフライでリアルタイムに変換する必要があります。このリンクを確認してください:DIY MDB-UARTコンバータ


0

受け入れられた答えは、Piと通信する真の9ビットデータURTを備えたAtmelプロセッサを使用していたため、放棄されたか、商用化されたようです。

私はつもりですのでhttps://www.vendingtools.ro/en 70ユーロのために、そしてそれは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.