ArduinoのSoftwareSerialを使用してRS-422デバイスと通信しようとしています。SN75179BPを使用して422をTTLに変換します。
デバイスは8ビット-奇数パリティ-1ストップビットです。http://arduino.cc/forum/index.php/topic,108097.0.htmlを使用してソフトウェアシリアルライブラリを変更しようとしました
書き込み関数のパリティビット計算を偶数ではなく奇数に変更しました。
いくつかの問題:まず、スケッチをアップロードしようとしているときに、recv関数でpylon [4番目のコメント]によって提案された正確なmodを使用すると、次のようになります。
/var/folders/st/vmhkh5t57592ln_zhkyfq2q80000gn/T//cct5EjNP.s: Assembler messages:
/var/folders/st/vmhkh5t57592ln_zhkyfq2q80000gn/T//cct5EjNP.s:243: Error: register r24, r26, r28 or r30 required
/var/folders/st/vmhkh5t57592ln_zhkyfq2q80000gn/T//cct5EjNP.s:263: Error: register r24, r26, r28 or r30 required
理由がわからない。しかし、関数をそのままにして、これを変更するだけの場合:
// skip the parity bit
tunedDelay(_rx_delay_stopbit);
DebugPulse(_DEBUG_PIN2, 1);
// skip the stop bit
tunedDelay(_rx_delay_stopbit);
DebugPulse(_DEBUG_PIN2, 1);
これに:
// skip the 2 stop bits
tunedDelay(_rx_delay_stopbit*2);
DebugPulse(_DEBUG_PIN2, 1);
スケッチをアップロードして、シリアルで真の正しいデータを受信し始めることもできます。
2番目の問題は、私が何をしても、書き込み関数を機能させることができないということです。デバイスは入力に応答しませんが、2番目にシリアルを介してそのデバイスに何かを送信しようとすると、受信チャネルできれいなデータを取得できなくなり、代わりに混乱します...
[ところで、その状況では、「改行」0Dを送信すると、受信チャネルの通常のデータが返されます...]
*-私はArduino1.0.1を使用しています
編集:それが重要かどうかはわかりませんが、receive関数を機能させるためにinverse_logicを使用しています。
どんなアイデアでも大歓迎です!