ATmega128(BTC068)でPRS-DE07MS通信プログラム作成中・データオーバーランエラー

公開日:  最終更新日:2014/06/05

すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。

また雑談みたいな話ですが、PRS-DE07MSとの通信プログラム、なんとなく通信するようになってきました。「なんとなく」ってのは、うまくいったりいかなかったりすることがあるからです。Version読込(2バイト送信、4バイト受信)はうまくいかないのですが、Temperature読込(2バイト送信して、5バイト受信)だとうまく通信できているようです。

受信処理結果のレジスタを見たら、データオーバーランエラーフラグがセットされていました。

■データオーバーランエラー
「データオーバーランエラー」について調べてみました。ATmega128(他のマイコンでもそうなっていることが多いですが)の受信モジュールは2段になっており、外部から受信したデータは一旦、受信データバッファに入り、その後、受信データレジスタに移動されてプログラムで読み出せるようになります。次の受信データは再び受信データバッファに入ります。

プログラムで受信データレジスタを読み出さないと、受信データレジスタは空にならないのですが、連続してデータを受信しているときに、プログラムによる取り出しが間に合わなくなってくると、受信データを受信データバッファに書き込めない、または上書きが起きてしまいます。これによりデータを消失してしまいます。この状況に陥ると、データオーバランエラーが発生します。

■今日の結論
調べた結果から、恐らく、PRS-DE07MSは、

  • Version読込は、応答が速いので、ちょっと気を抜くと受信が追いつかない。
  • Temperature読込は、Version読込よりはゆっくり応答する。

ちなみに「ちょっと気を抜くと」と書きましたが、PRS-DE07MSの送信~受信の処理をしている間に動いているのは、USART0(パソコン接続側)の送信処理が割込みでバッファから読み出しているだけです。そんなことから、PRS-DE07MS、結構、応答がいいんじゃないかな、なんてワクワクしています。こういうのって、どうやって調べたらいいんだろう?プログラムで計測するのもできそうですが、オシロとかで調べられるものなのかな。

で、Temperature読込を実行してて気になったのが、これを実行すると、前の状態に関係なく、サーボがオンしちゃうことです。説明書には書いてありますけど、前の状態を維持する方がいいような気がします。説明書によると、Temperature読込を実行時、「受け取った瞬間にモータがOFF状態になり、温度データを返信するときにモータがON状態になります」と書いてあるのですが、できればモータOFF無しで温度データ読込できて、かつ、前のON/OFF状態を維持するような仕様のほうがありがたいな、と思います。

プログラムですが、Version読込の問題が片付いたらアップします。もうちょいもうちょい。

  • このエントリーをはてなブックマークに追加
  • Pocket

関連前後記事

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

PAGE TOP ↑