1

http://www.qu-bot.comで qu-bot からデータを受信しようとしています。ロボットには、ATML atmega16 マイクロコントローラーが搭載されています。シリアルポートにデータを出力するロボット上で実行されるプログラムを作成しました。ただし、コントローラーに接続するたびにプログラムが停止します。beep ステートメントを追加して、これをテストしました。プログラムが実行されている限り、ロボットはビープ音を鳴らします。ロボットに接続するとビープ音が止まります。qu-bo サポートを試してみたところ、シリアル ポートの dtr フラグを無効にすることが提案されました。私はそれをしましたが、喜びはありませんでした。

他に試せることはありますか?[qu-bot で実行されているコードの開始] 注: これは、quick c と呼ばれるある種の独自の C バリアントで記述されています。// このコードは uart 関数を表示します。

int main(void)
{
    INIT();
    UART_INIT(57600);

    UART_PRINT("HELLO!!\n");
    DELAYS(1);
    UART_PRINT("MY NAME IS QU-BOT.\n");
    DELAYS(1);


    UART_PRINT("HELLO!!\n");
    UART_PRINT("YOU ARE USING UART SAMPLE CODES.\n");

    while(1)
    {
        UART_PRINT("test\n");

        BEEP();
        DELAYS(60);
    }
}

今度は私のpythonシリアルポート読み取りプログラムです。このプログラムは、raspbian と Windows 7 64 ビットの両方で試しました。Windows版を貼り付けています。raspbian バージョンは、Linux とは別の名前です。

import serial
import time
ser=serial.Serial()
ser.port=8
ser.baudrate=57600
ser.setDsrDtr(False)


print 'initialized'
flag = ser.isOpen()
if flag:
 print 'port already open.'
 pass
else:
 ser.open() # opening the port 'ser' that was just created to receive data
 time.sleep(0.5)
print 'ready to read'
print ser
ser.write('a')
s=ser.read(4)
print s
ser.close()
Pranav

PS私はとりわけ次のリンクを調べました。

<https://learn.sparkfun.com/tutorials/terminal-basics/all>

<http://www.plainlystated.com/2013/06/raspberry-pi-serial-console/>

<http://elinux.org/RPi_Serial_Connection>

<https://learn.sparkfun.com/tutorials/terminal-basics/all>
4

1 に答える 1

0

マイクロコントローラーとのシリアル通信での私の経験に基づくと、この問題の最も可能性の高い原因は、シリアル ケーブルをロボットに接続するときに、ファントム バイト (接続時に発生する電気ノイズによる) が発生したように見えることです。コントローラーから - これまたはコントローラーのいずれかが正当なバイトをロボットに送信しています。どちらの場合も、ロボットのシリアル ポートにバイトが到着する可能性があります (データ バイトと間違えられたのが単なる電気ノイズだったとしても、これは非常に大きな問題です)。一般的な発生) により、ロボットのマイクロコントローラーが UART 受信割り込みを呼び出しました。適切な UART 受信ハンドラー (ISR - 割り込みサービス ルーチン) が書き込まれ、正しい割り込みベクトルにリンクされていない場合、ロボットのマイクロコントローラーは、最初の着信シリアル データ バイトの検出時に「ディープ スペース」に入る可能性があります。ロボットが「ぶら下がっている」ように見せます。割り込み駆動型 (着信バイトのハードウェア検出により UART Rx ISR が呼び出される) ではなく、「ポーリング」シリアル通信 (コードがメイン ループで受信したバイトを手動でチェックする) を行う場合は、必要なすべてのことを行う必要があります。 UART割り込みを無効にすることであり、問​​題は解決するはずです。

于 2016-03-11T21:30:22.453 に答える