ADCの処理時間 

 普段は使うことの少ないAVRマイコン(ATMega328PB)のADC(A/Dコンバータ)を使ってみました。コンパイラはいつものBASCOMで、割り込み処理の多いプログラムです。試しに処理時間を測定してみたところ意外にも処理時間が長い。アセンブラで書き直せば早いと思うのですが、それも面倒。こちらが1chを1回だけの処理時間です。

 225uSec要しています。(時間の測定は空きポートをハイ/ローさせて測定しています。)割り込み処理の間隔が200uSec以下なので、これは少々長くて具合が悪い。そこで、ADCをSPIインターフェースのMCP3208にして測ってみました。データのやり取りはSPIではなく、SHIFTIN 命令での処理です。

   ' MCP3208で2チャンネルのADC読み取り    
   For Ch = 0 To 1

       Reset Cs                                                            ' CSをLowにして開始
       '=== コマンド送信 ===
       ' MCP3208: Start bit=1, SGL=1(Diff=0), D2,D1,D0, nullビット
       Txsout = &B00011000 Or Ch                                           'ch=0 to 5

       'data-port,clock-port,var,mode (mode=1 clock is up-edge, msb to lsb )
       Shiftout Mosi , Sck , Txsout , 1                                    ' Start + SGL + D2,D1,D0

       '=== データ受信(12bit) ===
       Shiftin Miso , Sck , Dummy , 1 , 2                                  ' receive 2-bit (空読み)
       Shiftin Miso , Sck , Byteh , 1 , 4                                  ' receive 4-bit (上位4bit)
       Shiftin Miso , Sck , Bytel , 1 , 8                                  ' receive 8-bit (下位8bit)

       Set Cs                                                              ' CSをHighにして通信終了
       Byteh = Byteh And &B00001111
       Adc_value(ch) = Makeint(bytel , Byteh)                              ' 上位4bitと下位8bitをword型に結合して代入

   Next Ch

 早いです。31.6uSecでした。ということで、やはりADCは外付けにします。

 最近、9年使ったテクシオのオシロスコープ GW-INSTEK GDS-1074Bが壊れました。修理料金の見積もりを取ったところ、定額で45,000円(税別)とのことだったので、10万円で購入して9年使ったものに5万はなぁ・・と、買い換えることに。いくつかの候補を検討の結果、RIGOLのDHO804を購入。電源を入れてからの起動時間が結構掛かるのが難点ですが、普段使いには十分な性能です。VESAマウント対応なのでディスプレイ用のアームに取り付けて使っています。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)