● 実験テーマ53

「PIC32MX_簡易4CHロジアナの実験」
(前からやってみたかったロジアナの実験を、PIC32MXトレーニング基板でやってみました。)

■ 2014.7.3
  ・オシロ_V6も、HP公開まで済んだ。
   次期テーマ53を何にするか? 候補を列記すると次のようなものが考えられるが・・・
   <候補>
    @ 簡易ロジアナ
    A WAVプレーヤ
    B 高速ADCを使った、オシロ_V7
    C パワエレ関係(D級アンプ他)
    D MP3プレーヤのソフトVUP(連続曲送りの追加)

  ・簡易ロジアナをやるとして、ロジアナとオシロでは何が違う?
    @ まず、ADCは不要
    A デジタルのみでハードはよいはず。(2値のみ扱う)
    B つまり入力の、Hi, Lowレベルの判別は、'0'か、'1'かの1bitで事足りる。
       1バイトのメモリを用意すれば、8CH分の、レベル判別ができる。

  ・どういうのを作るの?
    @ 実際、実験機として作る時は、4CH入力でよいと思う。
    A PCを利用する方法は却下。スタンドアロンにする。(カラーQVGA液晶表示)
    B WEBには、外付RAMを使った例が多いが・・・(要検討)


■ 2014.7.4
  ・しかし、ロジアナをやるのは初めてだし、敷居が高い気もする。
  ・もう一つの案は、「3CHオシロの実験」が考えられる。
   既に、TRIG CH含めて、4CH同時サンプルの確認が出来ているので進めやすい。
   ただ、あと1CH、同じアナログアンプが必要なので面倒なのがネックになっている。

  ・迷っててもしょうがないので、一応、「簡易ロジアナ実験」の方向で進めることにした。
   ざっと構成案を考えてみた。
   <構成案>
    @ CH数: 4〜 8CH
    A サンプリング周期: 数100u〜 1uSまでの間で、数点DSWで選択可
    B 表示: 2.8インチ・カラーQVGA液晶(320x 240dot)横置き表示
    C PIC: PIC24Hか、PIC32MX
           (実験をトレーニング基板でやるのは、PIC32MXの方が使い易い。)
    D 他ハード構成:トリガ+アドレスカウンタ+SRAM
                                                  WEBでは、これらを全てハードロジック(標準ロジックICとか、CPLD, FPGA)
               で構成している例も多数見られるが、ここは簡単な構成を目指したいので、
                PIC内のハードを使い、全ては、ソフトでコントロールできたらと思っている。


■ 2014.7.7
  ・今日は、ざっとではあるが、実験プログラムの1辺を考えてみた。
   極シンプルな条件で実験してみる。
   T1割込み(サンプル周期)関数の中で以下を実行。
    @ トリガ・ソースは、CH1のみとする。
       まず入力パルスのエッジ・センスを行う。(最初は、立上りのみでよいだろう。)
    A 入力データ(4CH分)をメモリ(SRAM)に書込む。
    B SRAMアドレスを、1つ進める。
    C アドレス= FULLになったか判断し、FULLでなければ、Aに戻って繰返す。
    D FULLであれば、書込みを終了させる。
    E データ収集が終了したら、EndFlagをセットする。(割込み処理は基本ここまで)

    F メインで、EndFlagを確認し、セットされていたらQVGAにメモリの内容から
       判断したロジック状態(Hi or Lo or 立上り or 立下り)を液晶に、
       1画面分表示する。
    G 測定・表示更新サイクルは、1秒とする。

    ※ こう見てくると、この流れの基本は、今までやってきた自作オシロの流れと
       一緒であることがわかる。

  ・ハード構成他も整理してみた。
    @ 外部メモリ・外部カウンタは使わない。
    A PICは、3.3V系の
PIC32MX340F256H(Fcy= 80MHz, DATAメモリ:32kバイト(256kビット)
       を使う。
    B 入力CH数は、4CHとし、PICの+5Vトレラント仕様のピンに割り当てる。
    C 2.8インチ・カラーQVGA液晶(320x 240dot)横置き表示とする。
    D 確認が容易に出来るように、HOLD SWと、TRIG MODE SW(トリガ・スロープ切替)を用意する。
    E サンプリング周期: 数100u〜 1uSまでの間で、数点DSWで選択可にする。
    F プログラムは、全てC言語で記述。

  ・液晶画面デザインも考えてみた。
   通常、ロジアナでは、オシロのような、時間軸目盛(座標ライン)は引いてなく、画面の上の方に
   時間経過の目盛が引かれていて、必要なタイミング時間を見るには、時間カーソルを移動させて
   時間を読取って表示するようになっている。
   今回は、簡単な実験なので、オシロ方式の座標目盛を用意し、SMPLE周期と、1目盛当たりの
   時間(*S/D)及び、トリガエッジ極性を液晶右下に表示させるようにした。
   尚、最初のプログラムは、トリガ極性はポジティブのみで、SMPLE周期のみの表示にした。
   今回のは、ロジアナというより、ロジックスコープといった方がよいかも・・・


■ 2014.7.8
  ・今現在考えているテストプログラムは、リピート・トレース・モードで、オシロで言う
   ノーマル・トリガ・モードに相当する。
   とりあえずこれでソフトの感触を見て、基本的な考えに間違いがないか確認してみようと思う。

  ・今回、独自に考えなければならないのは、
   
メモリの内容から判断したロジック状態(Hi or Lo or 立上り or 立下り)を液晶に、
   1画面分表示する関数である。(その他にも割込み関数等あるが・・)
   以前作った自作オシロの、Oscillo関数に相当する部分である。
   この部分の関数名を、「LogAna」とした。

  <LogAna関数を考える>
   ・ロジック状態を判断するために、前回のデータと今回のデータを比較して
    @ Loレベルで変化がなかった場合→ Loレベル描画(Lo側へドット表示)
    A Hiレベルで変化がなかった場合→ Hiレベル描画(Hi側へドット表示)
     B 前回が、Loで今回が、Hiだった場合→ 立上りとして描画(ライン表示)
    C 前回が、Hiで今回が、Loだった場合→ 立下りとして描画(ライン表示)

    のような判断・描画をしなければならない。

   ・ポイントは、判断と描画のタイミングである。
    最初のサンプルのエッジ検知は、検知と、バッファメモリへの格納は行うが、描画は、
    トリガを検知してから2回目のサンプルの時から行うという点である。
    ロジック状態の変化を判断するためには、前回と今回の2つのサンプルが必要になる
    ので当然と言えば当然だが・・・
    つまり、バッファポインタ:index= 0;からでなく、index= 1;から描画することになる。

  ・この他、比較方法のロジックなど検討して、テストプログラムを書き終えた。


■ 2014.7.9
  ・HEX焼きまでOK。
  <動作確認>
   @ まず、STARTメッセージ表示の後、動かない。
   → T1割込みに入ってこない。
      これは、イージーミスで、T1割込み許可の、Config記述が抜けていた。
      この修正で、割込みルーチンに入ってくるようなった。
      CH1入力のエッジセンスは動いていて、メインループは回っているようだが、表示が全く
      駄目。
      今、CH1のみに、1kHz 3Vレベルの矩形波を入れているのだが、表示はHiレベルのままに見える。
   A また、サンプリング周期を切替ても、200uS表示のままになってる。

  ・気ずいた点あり。
   今回、ADCは使わないので、これと連動しているT3以外を使おうと思って、T1を使っているのだが
   T1には、内蔵プリスケーラの分周設定の中に、1/2(マクロ記述で、T1_PS_1_2)がないことに気が
   ついた。
   そこで、いつものT3を使うことにした。
   どうも、ADCに連動で使うT3(ADC割込み)の設定(マクロを使わないレジスタ直接アクセス記述)
   では上手く行かないようだ。
   T3を単純タイマ割込みで使う場合は、マクロ記述(OpenTimer3()での記述)にしないと駄目だった。

  ・Aについては、DSW-1出力を読込めなく、サンプル周期表示:SMP= **が変化してないようだ。
   この原因は直ぐわかった。
   最初はハードを疑ったが、ハードには異常なく、結局は、ポートのイニシャライズの最初に
   やるべき、アナログ・ピンにするか、デジタル・ピンにするかの設定を、今回は、全てデジタル・ピン
   として使うので、デフォルトのままでOKだろうと省略したのがいけなく、
   AD1PCFG= 0xFFFF;を追加してOKになる。

  ・これでようやく動き出した。(深夜0:30頃)
   SMP表示OK
   ロジック表示は、まともでないが、CH1の時間軸が、サンプル周期設定と合っていることを確認した。
   SMP= 10uSにて、1目盛500uS、CH1のみに1kHz入力時、2目盛で、1周期になっている。
   しかし、表示ポジションが上にずれているようである。
   Hiレベルのラインしか表示してないように見える。

   <対処した事>
   ・プログラムミス
    バッファの内容から、ロジック状態(Hi or Lo or 立上り or 立下り)を判断するルーチン
    を、引数によって、各CHで共通に呼べる関数にしたが、その関数の中で、CH毎に
    右ビット・シフト数を変えなければいけないところ、そうしなかった。

  ・それを直したら、2CHに同じ周期の矩形波入力時、大方動くところまで来た。
   まだまだ表示がおかしいが・・・
   Hi, Loレベル表示は、OKなのだが、立上り・立下りのエッジ表示が、とんでもなく下に
   ずれて表示されている。
   ただ時間関係は合っている。
   また、座標ラインと、Loレベル描画が少し上にずれている。

  ・この時の画面写真は撮ってませんでした。
   文章だけだと、ちょっと解りにくいかもしれません
が・・・


■ 2014.7.10
  ・さらに調査を進めた。
   1つ発見!!
   channel引数の値に記述ミスあり。
   CH1指定の時は、channel= 1, CH2指定の時は、channel= 2 これはOK
    CH3指定の時は、channel= 4, CH4指定の時は、channel= 8としなければいけないところ
   CH3指定の時、channel= 3, CH4指定の時は、channel= 4としてしまった。
   ここは、ビット・シフト数と連動するところなので、ビット位置とCHが対応してないとまずい。
   ここは、マクロで記述した方が解り易いので、そう記述することにした。

   この修正で、CH3と、CH4も、エッジ表示位置はずれるが、レベル表示は正常に出る
   ようになった。
   下の写真を参照してください。(4CHともに、1kHzの矩形波を入力して確認)


  
                     

  
  ・結局、この問題は、座標位置の考え方が、ドット描画関数(Glcd_Pixcel)と、ライン描画関数(Glcd_Line)
   で異なっていたことが原因だった。
  ※ 両方の関数ともに、左上角が、原点(0,0)と思っていたのだが、ライン描画関数(Glcd_Line)は、
     左下角が、原点(0,0)であった。
     これを、実証した時のメモを下にアップします。

  ・この問題を修正したら、今度は、まともな表示になった!!
   CH1の、Loレベル座標線が表示されてませんが、その部位分のプログラム記述が抜けていた
   だけなので、あしからず。


■ 2014.7.11
  ・昨日の、座標指定修正で、描画が変になる問題は解決した。
   これで、今回最初に考えていたことは大方クリアできたが、あと何点か追加、確認したいことがある。
  <追加機能等>
   @ 見栄えの問題だが、
      現在の各CH表示は、ちょっと上に寄りぎみなので、下に下げて見栄えを調整してみる。
   A SMP= *uSの表示の他、デビジョン表示(*uS/D)も追加する。
      まあ、通常のロジアナでは、この表示は無いのが普通だと思うが、今回は簡易実験ということで
      固定目盛にしたため、これを追加する。(オシロと同等)
   B TRIG MODE SW
機能のソフトを追加する。
      立上り他、立下りをセレクトできるようにする。(レベルトリガは省略)
      オシロと同じように、時間軸レンジ表示の前に、そのキャラクタを表示させる。
   C サンプル周期の細かい(サンプル周波数の高い)方がどこまが上限か確認する。
      1uSはOKなので、0.4uS, 0.2uS(これは無理かもしれないが・・)
      の2つを追加すれば様子が判ると思う。

  ・@〜Bの修正〜確認はOK!!
    Cについては、サンプル周期は、1uSが上限であった。
   (0.4uS, 0.2uSは、正しく矩形波周期が変化しなかった。)


■ 2014.7.12
  ・これで、追加機能もOKになったので、今日はタイミング波形のサンプル取りを行ってみた。
   何をターゲットにしようか迷ったが、結局バイナリカウンタの4bit出力を見るのが一番
   解り易いと思い、ターゲットのロジックICを、ジャンク箱より探し始めた。
   目当ては、74HC393であったが、393は無く、それ以前の、74LS293が2個ジャンク箱に
   あった。
   相当昔のもので、ICピンも黒く錆びついているように見える。
   これで動くのかと思いながらも、早速4bitバイナリ16新カウンタとしての配線を始めた。

   その時の実験の様子と、タイミング波形のサンプルは本ページのトップの写真を参照してください。
   今回の実験はここまでです。
   今後の課題ですが、これと同じバージョンの、6CH入力化を考えています。
   8CH入力といきたいところですが、今の横置き表示では、描画が、きつきつになりそうです。
   縦置き表示ということも考えられますが、ライブラリをいじる必要があります。
   また出来れば、収録メモリエリアを増やし、横スクロールでメモリ全体を見れるようにも
   したいと思っています。
   (今のところ、出来るかどうか自信がありませんが・・・あくまで課題です。)


<最終回路図>
 ・こちらから、どうぞ→ PIC32MX_簡易4CHロジアナ実験 回路図」

<最終ソース及び、ヘッダーファイル>
 ・こちらから、どうぞ→ Easy_4CH_LogAna_TEST.c
                    
colorlcd_libdsPICVH.c
                  colorlcd_libdsPICVH.h
                 ASCII12dot.h (12*12_フォントデータ: 後閑氏が作成された、アスキー文字データに、オシロ用特殊キャラクタを追加)


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ54へ →