2

さて、私は3つのデバイスを持っています。

  • USARTでセットアップされたAVRバタフライマイクロコントローラ
  • Debian を実行し、シリアル用のカスタム プログラムを使用する Bifferboard。
  • Br@y's を実行するデスクトップ マシン。

そこで、Bifferboard がシリアルを AVR に送信するようにしようとしていますが、AVR は信号を受信しません (ワイヤーをチェックしました)。しかし、AVR をデスクトップ ボックスに接続し、Br@y で送信すると、正常に受信されます。

Bifferboard をデスクトップに接続すると、Br@y's は問題なく受信できます。

Bifferboard のコードは次のとおりです。

#include "string2num.h" //a custom header
#include <cstdlib>
#include <iostream>
#include <SerialStream.h>
using namespace LibSerial;
//using namespace std;



int main(int argc, char*argv[])
{
        if (argc<2)
        {
                std::cout<<argv[0]<<" requires the device name eg \'dev/tty0\' as a parameter\nterminating.\n";
                return 1;
        }

        SerialStream theSerialStream(argv[1]); //open the device
        if(!theSerialStream.IsOpen()) //did the device succesfuilly open
        {       //open faile
                std::cerr<<"Open " << argv[1] << " failed\n Terminating.\n";
                return 1; //exit failure
        }

        theSerialStream.SetVMin(0);//no min number of characters to send
        theSerialStream.SetVTime(0);// don't wait betwenn characters

        theSerialStream.SetBaudRate( SerialStreamBuf::BAUD_19200);
        theSerialStream.SetCharSize(SerialStreamBuf::CHAR_SIZE_8); //8
        theSerialStream.SetParity(SerialStreamBuf::PARITY_NONE);//   N
        theSerialStream.SetNumOfStopBits(1);//                       1

        theSerialStream.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);


        std::cout<<"Ready for serial trasmission. Press Ctrl+C to quit\n";
        //insert basic instructions here

        while (1)
        {
                char input[BUFSIZ];

                std::cin>>input;

                char* values=getAllValues(input); //DECODE any formatting (this function is in the custom header)
                std::cout<<"about to transmit: " << values << "\n";

                theSerialStream << values;
                free(values);
        }
        theSerialStream.Close();
        return 0;



}

また、Bifferboard の minicom も使用してみました。デスクトップの Windows マシンとは通信できますが、AVR とは通信できません。

4

3 に答える 3

2

見込みはありませんが、すべてのシリアル ポートが同じ電圧レベルで動作していますか? Bifferboard には 3.3V の UART があり、AVR にはレベル コンバーターがあります。デスクトップポートは、電圧に関してより柔軟な場合があります。

于 2010-02-18T15:46:43.187 に答える
2

(配線は確認済みです)

これはまだ配線の問題のようです。Br@y が両方と通信できる場合、設定の問題ではないようです。Bifferboard からデータを送信しようとすると、AVR の受信ピンにロジック アナライザーまたはオシロスコープを接続して (おそらく他のピンをプローブして)、電気的に何が起こっているかを確認する必要があります。

他のピンのデータが表示されるに違いありません。しかし、シリアル RS232 接続は非常に扱いにくいものなので、あまり当てにはなりません。

于 2010-02-18T15:47:42.987 に答える
0

別の「ロングショット」の可能性を捨てます。ボード上で使用されているトランシーバーチップによっては、RS232レベルの独自の負の供給電圧(通常はチャージポンプを介して)を生成できない場合があります。一部のチップは、回線の反対側から負の供給を「盗む」ので、PCのようなものと話している場合にうまく機能します。しかし、双方がそのアプローチをとる場合、それはそれほどうまくいきません。MAX232(および外部キャップと抵抗)のようなトランシーバーは独自の負の電源を生成しますが、DS275のようなチップは生成しません。

于 2010-02-22T16:48:57.053 に答える