PCとの通信(USART通信)      ホームページに戻る

  AVRで処理したデータ(アナログ入力等)をパソコン取,り込んだり、逆に制御指令等をAVRにデータとして送り込みたく

  なることがあります。そこで、パソコンのRS−232Cを使った通信基本についてchanさんのホームページ等を参考にやってみました。

  USARTというシリアル通信機能を利用しました。

   特徴  非同期動作または、同期動作通信

       ボーレートが広範囲に設定可  ボーレート=システムクロック/[16x(1+UBRR)] UBRR:0-4095

       多様な伝送フォーマット設定 データ長5−9ビット、ストップビット1−2、パリティビット 無・偶数・奇数

    

    インターフェイス

      今回非同期動作としたので、RXD(2ピン)−>TD、TXD(3ピン)−>RDに接続する。

      信号のレベル変換はchanさんの簡易方式です。

      ケーブルは、家にあった携帯電話用のケーブルを流用し、下の回路図のようなケーブル(PC側9ピン)

      を作成しました。

     CABLE.JPG - 15,796BYTES

 

     初期設定処理

      ボーレート設定    UBRRH:UBRRL によって設定

                 38400ボーの場合

                   12.8M/(16x38400)−1≒19.8 よって 12.8M/(16x(20+1))≒38095

                   (38095/38400-1)x100=Δ0.8%  許容誤差1.5%以下OK

                    UBRRH:UBRRL=0:20

                  115200ボーの場合

                    12.8M/(16x115200)−1≒5.9 よって 12.8M/(16x(6+1))≒114,286

                    (114286/115200-1)x100=Δ0.8%  許容誤差1.5%以下OK

                    UBRRH:UBRRL=0:6

      フレームフォーマット  N81  データ長:8ビット、(スタートビット:1ビット)、ストップビット:1ビット

                        パリティ:なし

                  UCSRC:(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)    

      送受信許可

                  UCSRB:(1<<RXEN)|(1<<TXEN)

      送信ルーチン(R16にデータをセットし、Txをcall) 

                  Tx:   SBIS UCSRA,UDRE  ;送信バッファ空きでスキップ
                      RJMP Tx       ;送信バッファ空き待機
                      OUT UDR,R16     ;データ送信(送信開始)
                      RET         ;呼び出し元へ復帰

       受信ルーチン(Rxをcallし、R16にデータ取得)

                  Rx:   SBIS UCSRA,RXC   ;受信完了でスキップ
                      RJMP Rx   ;受信完了待機
                      IN R16,UDR   ;受信データ取得
                      RET   ;呼び出し元へ復帰

          

     実験動作として、パソコンに”ATmega8 good”の文字列を送信、およびキーボードから入力した文字列を受けLCDに

     表示させました。 (”I love you”と入力すると’Me too’と返事が帰ってくるように組んでみました。)

     これで一応、基本的な通信法が理解できました。

 

  ILOVE.JPG - 20,249BYTES    GAMEN.JPG - 13,009BYTES

   (I love you を受信表示したところ)       (”ATmega8 good”、”Me too”は受信データ)

  

 USART.JPG - 66,233BYTES 

         ソース

 

 バイナリ通信

  続いてバイナリ通信をやってみました。

 内容はAVRでAD変換したデータをPCのエクセルに転送し数値処理・グラフ化させます。(簡単なメモリレコーダ)

 サンプリング周波数(1ch取込の場合)

  @データを随時PC送信すると転送速度(115.2kBPS)がネック

   AD変換データが2バイトなので (8+2)×2/115.2k≒174us+α ∴最大5.7kHz程度

  AデータをSRAMにためておいて、後から一括送信する場合、AD変換時間がネック

   AD変換クロックを最大の200kHz、変換時間を14サイクルとすると 14/200k=70us+α ∴最大14kHz程度

   (atmega8の場合SRAMは1024バイトのなで、1データで2バイト使用すると500データ程度しか保存できない)

  今回は、商用周波数(60Hz)を取込むのでサンプリングの定理・デジタルフィルタ処理や演算処理も考慮して、電気角の

  15°つまり1440Hz(60×360/15)として@の方法で行いました。

 ソフト処理

  AVR側は、タイマカウンタ1の一致割込処理(CTC動作)にて1440HzごとにAD変換を行い、結果をホストPC

  送っているだけです。(回数1000回)

  PC側は、エクセルVBA(木下氏作EasyCommを利用 http://activecell.jp)でシリアル通信を行いデータを取り込みます。

  取込んだデータを適当(スケーリング等)に処理しグラフ表示させます。

 

 実行結果

  EasyCommの取り扱いにもあるように、一部RS232C/USB変換ケーブルを使うと、comポートオープン後の最初の

  1バイトが受信できないことがあります。私も、RS232CのないパソコンなのでエレコムのUC−SGTを用いてUSB接続

  をしましたが、やはりだめでした。(半分くらい確立で失敗)しかたがないので、ソフト処理で逃げました。

  アナログ入力(ch0)にAC100Vを変成して約2Vp-pを作り入力して取り込んだところです。

  赤線は元データで、青線はフィルタ処理(180°前データ差引)によりDC分および偶数調波を除去し、基本波は2倍の振幅

  を得てます。

  ほぼきれいな正弦波です。(AC100V波形は結構歪んでますがアナログフィルタで、高調波が除去されてます)

   

RECDAT.JPG - 71,641BYTES

 

   DATAREC.JPG - 76,629BYTES 

    HENKAN.JPG - 7,459BYTES

   (入力変換回路、outputをVRで分圧しch0へ入力)

   ソース エクセル

 

  追加:前記Aの方法(サンプリング周波数変更可能 最大10kHz)

 HAKEI2.JPG - 18,984BYTES

   (10kHzでサンプリング)

  GAMEN1.JPG - 17,658BYTES

  (入力画面) ソース エクセル