● 実験テーマ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へ →