● 実験テーマ72

「PIC24F GCシリーズによる、高速オシロの実験_1」
(後閑さんの本に載っていた「ワイヤレスオシロ(ダブレット表示)」をスタンドアロン化し、QVGA液晶に表示してみました。) 

以下、この実験の顛末記です。

■ 2015.11.30
  ・以前から、100kHz(〜200kHz)入力の波形まで実用的に表示可能な、高速オシロの実験を
   してみたかった。
   最近の後閑さんの製作記事(著書:「PICではじめるアナログ回路」)の中に、アナログ・リッチ
   と称する、MPUの中に、たくさんのアナログモジュールを内蔵した、PIC24FJ64GC006
   という、MPUを使った、ワイヤレスオシロの記事に興味を持った。

   内蔵モジュールの内、主に使用しているのは、仕様上10Msps(実際にはPIC24Fの、Fcy(max)=16MHz
   なので、Fadc(max)= 8MHzとなり、サンプル周期としてはこの半分の、4Mspsが最高となる。)
   という高速12bitADCと、2個のオペアンプである。

   これをそのまま作るのでは芸がないので、これをスタンドアロン化して、QVGA液晶に表示する
   実験をしてみることにした。
   今回の実験のアナログ回路は、後閑さん設計のまま、内蔵のオペアンプ2個のみを使った
   簡単なものにした。
   またトリガレベルもセンター固定にした。
   主に違うところは以下である。
    @ BlueToothモジュールをやめ直に、QVGAに表示するため、そのインターフェースを追加
    A タブレットからリモートでサンプル周期を可変していたのを、ローカルの10進ロータリディップSWに変更

  ・製作上のネックとして、このMPU(ピン間ピッチ=0.5mmと狭い、TQFP64パッケージ)のハンダ付である。
   今迄、このパッケージのハンダ付は敬遠していて、マルツに実装依頼をかけてやってもらっていた。
   当然数1000円の実装費を取られる。
   結構この実装費、バカにならないので、今回初めて、自力ハンダ付に挑戦してみることにした。

  ・また開発環境も変えないといけない。
   MPLAB IDE V8.60 + PICkit2 に慣れ親しんできたが、最新のMPUなので、今回は
   MPLAB X V3.05 + PICkit3でないと開発ができない。

  ・最初は、このMPUでの、QVGA液晶表示テストをやってみることにした。


■ 2015.12.1
  ・
MPLAB X V3.05 を使用してプロジェクトを組まないといけないので、思い出しながら、自分の資料
   を顧みながらやることになる。
   プロジェクト名:「PIC24F_GC_QCGA_TEST」とした。
   またデバッガの設定も、PICkit3にしないといけない。
  ・プログラムを考え始めた。
   追加する、10進ロータリディップSWの、プルアップ設定等を検討し始めた。
   またQVGAライブラリのポートも変更しないといけないのでその検討も始めた。
   その他、Delay関数は、タイマー4を使って書いてあるので、Foscのデファインは必要ない。
   またDelay関数は、QVGAライブラリの方へ移すことにした。   


■ 2015.12.2
  ・水魚堂で回路図を作成し、パーツを手配した。
   幸い、
PIC24FJ64GC006と、そのDIP変換基板とも秋月で、販売していたので安価に手にいれる
   ことができた。
  ・PICkit3のソフトウエア環境のインストールを先にしておく。
   PICkit2と同じく、スタンドアロン動作可能な、ソフト「PICkit3 Scripting Tool v3.10」があるので
   インストールを済ませた。


■ 2015.12.3
  ・パーツ届く。
   早速、TQFP64パッケージのハンダ付に挑戦!!
   1ピンずつハンダ付ということは考えないで(というかコテ先の形状からして無理)
   フラックスを頼りに、複数ピンの同時ハンダ付を繰返していったら、そんなにハンダブリッジもなく
   思ったより上手く行く!!
   今回、フラックス洗浄液も購入しといたので、ハンダ付完了後、それで綺麗に洗浄し、仕上げた。
   コンタクト部(ピンヘッダ)のハンダ付も済ます。
   これで第一関門は突破したことになる。やれやれ。

  ・「PIC24F_GC_QVGA_TEST」のソースを考えまとめ上げた。


■ 2015.12.4
  ・QCGA表示テストプログラムのプロジェクト作成が済んだ。
   ビルドしたが、エラーが大量に出た。
   LATDが未定義??等
   プロジェクト作成時、デバイスを「PIC24FJ64GC006」にしたつもりが、後でプロジェクトのプロパティ
   を見ると、何故か、PIC24EP128GP202になっていた。
   これを直したが未だエラーが残った。
   RC14(LED)ポートを出力にしたつもりが、そこにエラーが・・・
   「TRISCBITS' has no menber named 'TRISC14'」
   調べたら、TRISCレジスタに、TRISC14は、なかった。
   RC13と14は、入力ポートオンリーのようだ。
   LEDポートは、RD1に変更することにした。

   最後に、またリンクエラーが出た。
   今度は、メモリ関係ではなかった。
   これはイージーミスであった。
   2次曲線グラフ関数の記述が、メインから抜けていた。
   これを直したらようやくコンパイルが通った。
   HEXの用意できる。


■ 2015.12.5〜 2015.12.7
  ・基板の加工〜 部品実装まで済んだ。


■ 2015.12.8
  ・早速、基板の電源ショート+電圧確認を行った後、PICkit3を試すもうまく行かず。
   PICkit2の時と同じように、ターゲットの電源OFFの状態で、PICkit3を、ICPSコネクタに
   接続し、スタンドアロンの、PICkit3プログラマ・アプリを起動すると何やら、黄色バック
   のウインドウにワーニング・メッセージが表示された。
   ざっと見の内容は、「プログラマは、MPLAB modeになっているので、メニューから、PICkit3の
   OSをダウンロードしてください」というもの。
   どうも出荷時は、MPLAB modeになっているようだ。

   ということなので、メニューを探したら、OSダウンロードのメニューがあったので、そのHEXをインストール
   した。
   そして再度、接続を試すと、今度は、「PICkit3 connected ID= ******」
   とかいうメッセージが出てきた。
   接続はされたみたいだが、デバイスは自動的に認識されてないようだ。
   デバイスファミリの中から、PIC24Fを選ぶも、Deviceは、Not Device Found で、
   メッセージウインドウには、
   「No device detected.
    Ensure proper capacitance on VDD CORE/VCAP pin」と出る。

  ・もしかしたら、デバイス・リストの中に、「PIC24FJ64GC006」は、無いのかもしれない?
   Programmer- Manual Device Select にして手動で、デバイスリストから選べるようにしてみたが、
    やはり、PIC24Fの、GCシリーズの型番は無かった。
   せっかくハードまで作り上げたのに、PICkit3がデバイスを認識してくれない。
   ただ、MPLAB Xをインストールした時に、同時にインストールした、「MPLAB IPE V3.05」では、
   そのデバイスは出てくる。
   これでやってみても、HEXまではインポートできるが、接続できない。

   ここで、念の為、通信ラインの配線をチェックしてみた。
   何と誤配線発覚!!
   ICSPCLK: CN1-5 → MPU-17 これはOKだが、
   ICSPDAT: CN1-4 → MPU-18 これが正解だが、MPU-16に繋がっていた。
   しかし、これを直しても症状は変わらなかった。
   「MPLAB IPE V3.05」でやった場合、[CONNECT]の時に何度やっても、「Connect Fail」が出る。
   その時のコメントは、Vddに関するものだが?
   もう解らなくなって来たので、ハードを調べた。
   外部8M OSC→ OK, TQFP64の、ピン間ブリッジ、未ハンダ→ これも問題なさそう??


■ 2015.12.9
  ・昨日の、PICkit3問題を整理してみた。
   ・PCのUSB口に、PICkit3を挿入すると、ドライバのインストールが自動的に始まり、無事インストールは
    完了した。
   ・まだ、PICkit3の、MPLAB modeを試してないが、PICkit3のスタンドアロンアプリで次の問題が発生した。
     @ アプリを閉じようとすると、ワーニングメッセージが出る。


        [終了]ボタンを押しても終了しない。
        何度かそれを繰返すと、何故か、PICkit2と書かれたダイアログが現れ、その内、[終了]ボタンが出る。
        それを押すか、プログラムマネージャーでの強制終了で、終了するしかない状態に陥る。
     A PIC24F GCシリーズを認識しない。
        「VCAPピンの、C容量不足??」のようなワーニングが、1回発生した。
        目視とテスターで調べた限りは異常なしだが・・・
        ただ、別ボード(実験テーマ67の、汎用BTモジュール基板)の、PIC16F1827 は自動認識した。
         ただアプリの正常終了は出来ず。
     B そもそも、デバイスリストの中に、PIC24F GCシリーズが無い。

   ・ここでいくつか調べ事をしてみた。
     @ MPUの電源ピンの電圧をチェックした。→ 問題なし。
       ・VCAPピン:56pin→ 1.80V(オシロで見ると、リップルは20mVp-p以下なので、VCAPコンデンサの問題ではない。)
       ・その他のVDDピン:10,38pin→ 3.30V→ OK
       ・AVDD, SVDDピン:19, 26pin→ 3.29V→ OK
     A 「PICkit3アプリで終了できない」症状を経験している人が、WEB検索していたら見つかった。
        「YAHoo!!プログ」の人だった。
        この人は、Windows7 Home Premium 64bit OSを使っている。私と同じである。
        また、「MPLAB X IDE V1.70でも動かない」と書いてあった。
        私も、V3.05版のMPLAB X IDE で試してみたが駄目だった。


■ 2015.12.10
  ・なかなかHEXをデバイスに書込めない状態が続いている。実に歯がゆい。
   PICkit3で、PIC24F GCシリーズを認識してくれない。
   第一デバイスファイルに、GCシリーズがない。
   Program Files (x86)- Microchip- PICkit 3v3フォルダ下にある、デバイスファイルを確認してみたら
   「PK2DeviceFile.dat」となっており、PICkit2のデバイス・ファイルのままであることが分かった。
   これじゃ、GCシリーズを認識しなのも当然だ。
   自分で、デバイスファイルの追加が出来ればよいのだが、そんなこと出来る訳がないので、
   このツールで書込むことは、あきらめた。

   前にも書いたが、他に書込む方法として、MPLAB Xをインストールした時に、同時にインストールした、
   「MPLAB IPE V3.05」で、HEXを書込むという手がある。
   これには、リストに、PIC24F GCシリーズはある。



   WEB検索を頼り(サイト名:「私的好奇心空間」)に、このツールの使い方を調べた時、

   「小電流であれば、Advanceモードの設定画面から、PICkit3よりターゲットマイコンに対して電力を供給
   する設定(「Power Target Circuit from Tool」にチェックマーク)にすれば電源を別途準備する必要はありません。」
   という旨の説明があったので、これでやってみたのだが、[connect]すると、次のエラーが発生して、
   接続できず。(下図は、別基板でやった例で、Deviceが、PIC16F1827になっていますが、PIC24FJ64GC006でも
   同じでした。)


■ 2015.12.11
  ・上エラーメッセージは、「ターゲット電流として、もっとパワーが必要」というようなことを言って
   いるように思われる。
   ターゲットを駆動するには、PICkit3からのパワーでは不足なのかな・・・

   確証を得るため、さらにWEB検索してみたら、参考になるサイト:「YAHOO! JAPAN 知恵袋」
   見付かった。(目からうろこである。)
   以下、要点を私なりにまとめてみた。
   「MPLAB X は、PICkit3を使う場合は、標準では、ターゲット基板の電源をONして書込む事が
   必要です。(デフォルトでPICkit3から電源を供給しない設定になっている。これは、MPLAB IPEでも同じ。)
   
   ※ これは、PICkit3自体が、USBで多くのパワーを消費し、通常はターゲットデバイス側の電源を
      ONにして書込む事を前提にしているからです。

   ※ PICkit3は、PICkit2よりも、パワーを多く必要とする。
      よって、PICkit3からターゲットへ電力を供給すると、PICkit3の動作の不安定や、書込み不良が
      起こる可能性がある。」

  ・要は、ターゲット基板の電源をONした状態で、PICkit3を、ICSPコネクタに挿入し、
   Advanceモードでの、「Power Target Circuit from Tool」設定はしないで、そのまま
   手動でデバイスを指定した後、[connect]を押して接続後、HEXをインポートして、
   [Program]を押せばよいようである。
  → この方法でやっと、PIC24FJ64GC006に、HEXを書込む事が出来た!!
     分かってしまえば何のことはないのだが、ちょっと時間を掛け過ぎてしまった。
     下に、接続完了時と、プログラム完了時の画面をアップしました。(クリックで拡大します。)

接続完了時>

<プログラム完了時>

  ・早速、QVGA表示テストプログラムを動かした。
   あっけなく、1発で表示テストOKになる!!


■ 2015.12.12
  ・
ちょっと、表示テストのプログラムをいじることにした。
   
10進ロータリディップSWがあるので、これを使って、表示メニューの分岐が出来るようにした。
   この部分のハードチェックにもなるし。
   CASE 0〜 8:QVGA表示メニュー
   CASE 9: デバッグLED点滅テスト
   にした。
   結果、殆ど1発で動作OK!!
   これで、ハードは、アナログ部を除き、大方OKを確認できた。

  ・いよいよ本題の、スタンドアロン化するオシロのプログラムの検討を始めた。
   QVGA(320x240dot)のドット数と、データ取得数の関係を、前作のQVGAオシロのソース
   で確認する。
   今回、DMAを使っているが、使わないソースでも、1画面分のデータを取得終了してから
   描画するのは変わりないので、その点は気にする必要はない。

   オリジナル・ソースから変更が必要と思われる主な点を以下に列記した。
    @ 
10進ロータリディップSWにて、サンプル周期を可変。(タイマ2使用)
    A QVGA液晶ライブラリの、描画関数を使う。
    B 電圧軸(240dot)に対し、ADCの分解能は、12bitだが、この分解能は必要ない(というか過多)。
       変換後、10bit精度に落として、バッファに格納し直す。
    C 最速サンプル周期= 0.25u(4MHz)なので、100kHz(10uS)を入力した場合、1目盛に1周期を
       表示できるように、40dot(10u/0.25u=40u)を、1目盛として座標を描画する。


■ 2015.12.13
  ・プログラムを作成するに当たり、一度、後閑さんの本の記事をよく読込み、ポイントを確認した。
   以下、覚書きを列記しました。(ダブレットに表示する場合)
    @ AD変換について
     ・変換結果は、ADバッファを経由して、DMAによりメモリに自動保存する。
      これを、2016回繰返して、1回分の計測としている。
      気になる点として、何故、2000回としないかだが、
      AD変換を開始してから、パイプラインが詰まるまでは、4Mspsの性能は出ないからだそうです。
      なので、最初の16回のデータは捨てている。
     ・残り、2000回のデータの内、最初の500回分を、トリガ検出の対象データとしている。
      そしてトリガ検出した場合、そこから1500サンプル分を、ダブレットの、Xドットに表示。
     ・AD関係のレジスタに、12bitと10bitの選択は無い。
     ・Vrefソースの設定は、AVDDになっている。
     ・常に、ADRES0に、変換結果が格納される。
     ・Tad= 2Tcy= 8MHzに設定
     ・タイマ2の同期で、1CHのみの、AD変換を繰返し行う設定になっている。
     ・CPUからのRAMアクセスと、DMAからのRAMアクセスは同時に動作可能。

    A DMA設定について
     ・DMASRC0レジスタに、ADRES0レジスタを設定
      転送元が、ADRES0で、常に同じになる設定になっている。
     ・DMADST0レジスタに、Bufferのアドレスをセット
      転送先の最初をBufferとし、転送毎に、+1しながら書込んで行く設定になっている。
     ・DMACON0レジスタに、転送回数をセット
      AD変換回数の、Max_Size= 2016をセット
     ・DMAINT0レジスタに、トリガ要因:0x2Fをセット→ ADコンバータを指定
      DMA転送完了で割り込みが生成される。

  ・これを基に、プログラムをスタンドアロン化していった。


■ 2015.12.14
  ・
10進ロータリディップSWによる、サンプル周期(時間軸レンジ)のステップを検討した。
   結局、1目盛1周期で100kHzを表示(10usec/div)をベースに、レンジ間隔を、分周比の分母:N(PR2+1)
   の、2倍、5倍間隔に考えてレンジを決めて行けば、使い易い(中途半端でない)レンジになることが分かったので
   その考えで以下の通り、10通りの時間軸レンジに決めた。
   尚、今回は、高速オシロの実験ということで、最低レンジを、10msec/divとしました。
   <サンプル周期(時間軸レンジ)決定>
     0.25u       、0.5u     、1.25u                 、2.5u           、5u             、12.5u         、25u         、50u        、125u        、250u
    (10usec/div、20usec/div、50usec/div、100usec/div、200usec/div、500usec/div、1msec/div、2msec/div、5msec/div、10msec/div)


■ 2015.12.16
  ・なんとかソースを書き上げた。
   プロジェク作成〜 コンパイル〜 HEX書込みまでOKになる。
   これでようやくデバッグが出来る。

   大方は動いているようである。
   10usec/divに於いて、100kHz入力で、時間軸目盛にもピッタリ合っているようである。
   ただ、アナログ回路の動きがおかしい。
   2ndアンプの、GAINを可変すると、ZEROまで動いてしまう。
   また、オフセット調整の、バランスが偏る。

   ここで、アナログ部の単体チェックを行ってみた。
   <結論(分かった事)>
    ・大元の入力抵抗が、1kΩ(後閑さんの説明文のところに記載のオリジナル回路では、2.2kであったが、手持ちになかったので1kを使用)
     では小さくて、初段出力の影響を入力に受けやすくなるようである。
     AC入力を、C結で受けても、C結の後で波形のセンターがズレ、非対称になることを確認した。
     → 手持ちの関係で、1kを、10kに変更。
        そして、DACによるバイアス電圧印加はやめて、同抵抗値2本(今回は、10k使用)を使って、AVDD=3.3Vを、1/2に
        分圧することにした。
          このように改造してテストしたら、全体のアナログ系を通しても、上手く動くようになった。
        各サンプル周期(時間軸レンジ)でも問題ないようだ。

     この改造で、今回のアナログ回路の仕様は、トータルゲイン:1倍〜 10倍MAX(3Vp-p〜 0.3Vp-p入力を、Vfs= 3Vp-pに可能)
     となった。


■ 2015.12.17
  ・今日は、いくつかのサンプル波形取りを行った。
   ここらで、ドキュメントを整理して、HPにアップすることにした。
   動作模様は、このページトップの写真を、参照してください。


<最終回路図>
 ・こちらから、どうぞ→ 「PIC24F_GC_高速オシロ実験回路」

<最終ソース及び、ヘッダファイル>
 ・こちらから、どうぞ→ High_Speed_Oscillo_Test.c 
                   colorlcd_libdsPICVH.c
                   colorlcd_libdsPICVH.h
                   
ASCII12dot.h 

<おまけ:QVGA表示テスト・ソース>
 ・こちらから、どうぞ→ 
PIC24F_GC_QVGA_TEST.c


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