● 実験テーマ22

「PIC32MXトレーニング基板の製作と、基本動作確認」
(後閑哲也 著「PIC32MX活用ハンドブック」の製作記事による)

■ 2012.10.16
  ・次期テーマを何にするか?
   以前から、やろうと思っていたのは、「RTOS」の体験である。
   これは仕事でも経験がない。
   マルチタスクを扱うソフトを作成したいという思いがある。

  ・後閑氏の著書に、32bitPICの「PIC32MX活用ガイドブック」があり、その中に、RTOSを使った事例
   として「MP3プレーヤ」が載っているので、最終目標としてこれをやるか・・・・

  ・これをやるための準備とネックになるもの
  (1) 開発環境を整える。
    @ 統合開発環境: 「MPLAB IDE」
       今回より、Windows7マシンに開発環境を構築したいのでこれを機に、最新版の「MPLAB IDE」
       をインストールする予定
    A 32bit版コンパイラ: 「MPLAB C32」
       無償版「Evalution Version」を利用できる。(製品版と同じ条件で60日間使える。
       60日過ぎても、最適化機能が固定レベルになるだけで他は同じ)
    B HEX書込み器(プログラマ)
       書込みのみだったら、従来から使っている「PICkit2」でも書けるということなので、
       これは特別用意する必要なし。

  (2) PIC32MXのボードをどうするか?
     パッケージが、64pinのQFP(自作オシロ_V2」の時の、PIC24HJ64GP206と同じ)なので、自力で
     の実装が難しい。以前と同様に、マルツに実装依頼するか?
     ただ実装費として、4200円ほど掛ってしまうが・・・・

 

 


■ 2012.10.17
  ・続、PIC32MXトレーニング基板をどうするか?
   いくつか候補を挙げてみた。
   @ マイクロ・アプリケーション・ラボ(MAL)より販売されている「MA244 PIC32 PowerHEAD」という、
      DIP_ICイメージで扱えるドーターボードが、7800円で販売されている。

   A 「PIC32MX活用ガイドブック」に載っている「PIC32MX汎用ボード」をユニバーサルで製作するか?

  ・後閑さんの本に沿って進めるなら、素直に本にある、「汎用ボード」を組んだ方がよさそう。
   (ポート割付の変更等必要なし)
  ・とりあえず、QFPの実装見積もりを、マルツにだしてみることにした。
  → QFP64の実装は、後閑氏が使っている、100pinまで実装できる
     サンハヤトの「ICB-020」(2枚割り基板):735円でなく、自作オシロ_V2の時、使った
     ダイセン電子の「Q064」:300円を使う予定


■ 2012.10.22
  ・マルツより、見積もり回答あり。
   前回と同じ、実装費:4200円の部品代込で、5644円
   これでお願いした。(納期:11/2頃)


■ 2012.10.24
  ・水魚堂CADで自分用の回路図作成
   回路図は、こちらからどうぞ→ 「PIC32MXトレーニング基板回路図」

   オリジナルと異なるところは以下の通り。
   @ SDカード・スロットには以前から使っている、サンハヤトの「CK35」:DIP変換基板にスロットを実装済み
      のものを流用
   A PIKkit2で書込みができように、6pinのピンヘッダを追加
   B 3.3Vレギュレータに、手持ちのヒートシンクを取り付けた。
   C 電源電圧ON表示のパイロットLEDを追加
   D LEDモジュールを、サブ基板に実装し、ソケット実装にした。
     そうすることにより、汎用ポートとしても利用可能になる。
   E 全て、DIP部品を使用した。

  ・部品リストを作成し、部品手配済


■ 2012.10.27
  ・部品配置+穴加工済


■ 2012.11.3
  ・ユニバーサル基板製作完了(但し、ノキア製LCDのバックライト電源線の配線は保留にした。)

  ・今夜より、ハードチェック開始と、開発環境準備
   @ IC未実装にて、火入れ式
      電源ラインの、ショートチェックOK
      IC2_OP AMPの、AVCCライン未ハンダ、IC6_EEPROMの、VCCライン未ハンダ以外はOK

   A MPLAB C32を、Microchip社の、HPよりダウンロードを試みる。
     (当HPからの、コンパイラ・ダウンロードは初めて)
     → HPから最初にダウンロードする時は、「myMICROCHIP」への、ユーザー登録が必要になる。
       登録ダイアログは、全て英文で少々手間取ったが、何とか無事インストール完了
       (Evaluation Compilerを選択)


■ 2012.11.4
   B MPLAB IDE V8.60のインストール
      ダウンロードした、ZIPファイルを展開し、setup.exeを実行
      無事インストール完了
   C Cドライブ直下に、プロジェクトフォルダを作成
      C\+
        + work_pic32mx
      とりあえずここに、後閑氏作成、各種テストプロジェクトフォルダをコピーしようと思う。
      手始めに、
IOテストプロジェクト:IOBasic1をコピーした。
      (あらかじめコンパイル後できる全てのファイルが提供されているが、自分の手でコンパイルしてみたいので
      ソースファイル等、コンパイル前に必要なものだけコピーした)

  ・MPLAB IDEを起動し、プロジェクト作成ウイザードでプロジェクト作成(プロジェクト名: IOBasic1)
   当プロジェクトは、プロジェクトフォルダに追加するファイルは、CソースのみでOK
   (今までの、16bitMPUのプロジェクト作成時は、リンカ・スクリプトの追加が必要だったが、
   #include /* PIC32 peripheral library */の記述により、プロジェクトに必要なリンカスクリプトを、
   MPLAB IDEが自動的に選択してくれるようである)

  ・ワークフォルダ内に出来たプロジェクトアイコンからの、IDE起動も問題なし。
   また
ソースのコメントも日本語対応にデフォルトになっていた。

  ・PICkit2最新バージョン(V2.61.80 2009/3/26)を、サイトよりダウンロードしインストール完了


■ 2012.11.5
  ・MPU(PIC32MX340F256H)を、ソケットに実装
   この時点で、VCC、AVCC確認  → VCC=3.30V, AVCC=3.29V
  ・PICkit2を、ターゲットに接続  通信テストを行うが、何故か「VCCエラー」
  → 調べると、PICkit2コネクタ_1pinのリセットが、ハンダからはみ出した細いリード線で、GNDとショートしていた。
  → ブリッジ取り除き、HEX書込みOKとなる。


■ 2012.11.5
  ・
IOBasic1(後閑氏作成のソースそのまま使用)の動作確認
   @ まずLED点灯せず ダンマリ
   → これの原因は単純であった。
      LEDモジュールの、1pin(面取り側)は、後閑氏のシンボルだとカソードと思っていたが、メーカーの指定は、
      アノードであった。
   → LEDモジュールを180°反転させた位置で、ソケットに実装し直す。
      これで、LEDが点灯するようになったが、なんだか動きがおかしい?
      まずこのソフトの動作仕様が、プログラムコメントだけでは解りにくいので、プログラムから動作を追ってみた。

  ・IOBasic1の動作仕様解読
   @ 電源ON時(SW4, SW5共にOFF)
      下位4個のLED(E〜H)と、J_LEDが点滅(0.1秒間隔)
   A SW5をONしている間
      上位4個のLED(A〜D)と、J_LEDが点滅
   B SW4をONしている間
      下位4個のLED(E〜H)と、I_LEDが点滅

    → これで確認すると不具合は以下の通り
     @ B_LEDが消灯したまま
        これは、LEDモジュールの、ピン径が細目なので、メスコネクタとの接触が悪いことが原因していた。
        とりあえず、接触している状態で使うことにした。
     A 電源ONでのハード・リセットが、うまく行かない時がある。
        その時は、LED点灯せず、ダンマリになる。
        電源ONで、うまく行った時は、ハード・リセットSWを何回押しても異常なく最初から動作している。


■ 2012.11.6
  ・電源ONリセットが、うまく掛って無いようで LEDモジュールが点灯しない。
   PICの規格上、外部リセットパルス幅は、2uS以上必要(後閑本より)
  → そこで、MCLRラインに、0.1uのコンデンサを追加してパワーONリセットを試す。
  → 通常の、ON/OFF(OFFしてから、1秒以上待ってからON)では問題なくリセット入る。
     但し、OFFして直ぐに(電源電圧が下がりきれない内に)ONするとリセットが掛らないが、
     それは良しとして先に進めることにする。
     (MCLRラインに直列に、470Ωの抵抗を入れてみたいが手持ち無し。いずれの機会に試してみる予定)

  ・相変わらず、LEDモジュールの、ソケットとの接触不良があるようなので
   ここで思い切ってコネクタ変換基板を作成し、対処した。

   動作は良好である  以下に、動作状況の写真を貼付けました。


■ 2012.11.6
  
● LCDテスト
  ・後閑氏の本の、「6-13: RTCCモジュールの使用例」
   (32.768kHz水晶入力+内臓rRTCCモジュールによる、時計)で時計表示を、LCDに出力している例が、
   載っているので、それで  チェックすることにした。

  プロジェクト名: RTC1→ 動作OKを確認

  ● UARTテスト
  
後閑氏の本の、「6-5-5: UARTモジュールの使用例」

  プロジェクト名: UART1 → UARTライブラリ使用

   <動作仕様>
    @ 電源ON時、ターミナルに、"Counter = 00000"を表示
       以降、カウントアップ値を順次表示。
    A カウントアップ中に、PCのキーボードの、[F]キーを押すと、その時点から、ダウンカウントになり、
       その値をターミナルに表示
    B カウント中に、[E]キーを押すと、カウントストップ、[S]キーで、カウント再開

  ・後閑氏のプロジェクト:UART1の中には、LCDソースと、ヘッダーが含まれていたが、実際には使ってないので、
   UARAT1.Cのみで、プロジェクトを作成しコンパイルした。
   尚、ボーレートは、115200
   → 難なく、動作OKを確認

  ● I2Cテスト
  
後閑氏の本の、「6-12-8: I2Cモジュールの使用例」

  プロジェクト名: EEPROM

   <動作仕様>
    @ 電源ON時、LCDに、"Start!"を表示
    A SW3_ONで、イレース・モードとなり、イレースが終了するとLCDに、
       "EEPROM Erase" "End EEPROM Erese"と表示する。
    B イレース後、SW5_ONで、メモリ内容を読出しLCDに、その内容を、HEX表示する。
       正しくイレースされれば、オールFFとなる。
    C SW4_ONで、書込みモードとなり、00〜FFまで順次、メモリに書込む。
       書込みが終了すると、LCDに以下の終了メッセージを表示
       "EEPROM Write" "End EEPROM Write"
    D 書込み終了後、SW5_ONで、書込み内容を、読出す。
       正しければ、1画面目には
       "0001020304050607"
             "08090A0B0C0D0E0F"
       と表示される。

    <チェック結果>
    ・何故か、おかしい。
     イレースして、読出しても、オールFFにならず、00を読出す。
     また、00〜FFの書込みを行っても、オール00を読出す。

    <調査>
     @ 配線ミスはない
     A 自作オシロでは、I2C転送クロック:100kHzは見えないので、テスターの、F計で簡易チェックした。
     → 連続的なパルス列でないので、正確な値は、とても読めないが、SCL/SDAともに、何か、うごめいていること位は
        確認できた。
     → ここで何故か、テスタープローブを接続しているせいなのかうまく動くようになってしまった?
        この状態で、プローブを外しても、どういう訳か動いている??
     → ところがこの状態で、一度電源を切り再度立上げ直してリードすると、00しか読めなくなる。


■ 2012.11.7
  ・I2C_EEPROM症状詳細調査続行
   @ SCLラインに、テスターF計のプローブを接続して、イレース実行後、リードしても、00しか読出せない。
   A SDAラインに、テスターF計のプローブを接続すると正常動作。
      何故か、SDAラインの影響大

  ・ここで以下を試してみた。
   @ プルアップR変更
      5.1kを、1k, 3.3k, 10kに変更してみたが、全てダメ
      プルアップ抵抗値のせいでは無さそう。
   A テスターのプローブ容量が影響していてOK になっているようなので、SDAラインにコンデンサを追加してみた。
      33p→ ×
      100p→ OKになる!!

   → ソフトI2Cでなく、I2Cモジュールを使ってのプログラムなので、ソフト上のバグとは考えにくい。
      とくに線を伸ばしている訳ではないので、SPIの時(PIC24F)あった現象と同じで
      (今度はクロックでなくデータの方だが・・)
      今度は、PIC32MXのバグか?とも思いたくなってしまうが・・・
      または、データラインにノイズが乗ってくるのかもしれないが・・・
      高速オシロを持ち合わせてないので、そこまでは追えないのがいつもながら残念
      はっきりした原因は解らないが、とりあえずこのまま使ってみることにした。

  ● SDテスト
  
・後閑氏の本の、「6-11-2: ファイルシステムの詳細」

  プロジェクト名: FSTest1
  ファイルシステム: フリーの、FAT16(FAT32にも互換)を移植

   <動作仕様>
    SW5を、押すごとに、1個のファイルが作成される。

    @ カード挿入の再確認
    A ファイルのオープン
       ファイル名は自動的に数値カウントアップで更新しファイルが無ければ、新規作成する。
    B ファイルにテストデータを16回書込む。
    C ファイルクローズ
    D ファイル名を更新→ 999個まで作成したら終了
    E 4個生成完了毎に、ルートに戻って、新たなディレクトリを新規作成
    F 新規作成したディレクトリに移動
       次の4個のファイルは、新規ディレクトリ内に生成し
             G Aに戻って繰返し

  ・プロジェクトを作成し、コンパイルしたが  以下のエラーが発生
   FSTest1.c ・・・ fatal error \LCD_Lib32b.h:No souch file or directory
   → プロジェクト・ビルドオプションでのパス設定の内、インクルード・サーチ・パスが重要で
      これには関係する全てのパスを設定する必要がある。(後閑本の通り、4つの設定)
   → この通り設定したら、うまくコンパイルできた。

   <チェック結果>
    @ SDカード検出OK
    A File Open error!になることがある。
    → SPI_CLK= 5Mを、4Mに落としてみたが同じ
    → 結局、5Mでもよかった。
       SD自体のフォーマットが、おかしくなっていたようでフォーマットし直したらオープン・クローズOKになった。


■ 2012.11.8
  ● OCテスト(サイン波出力)
  
・後閑氏の本の、「6-8-4: 使用例 ● SIN出力の例」
   OC2のみの出力例となっていた。

  プロジェクト名: OC2

   <動作仕様>
    SW5: 周波数アップ
    SW4: 周波数ダウン
    SW3: 分解能変更

    尚、分解能と、上限周波数の関係は以下の通り

    分解能  上限周波数
   ----------------------------
      400    500Hz
     300    900Hz
     200     2kHz
     100     8kKz
      50    20kHz
      -----------------------------

  ・プロジェクトから作成しコンパイル〜 HEX書込みまでOK

   <チェック結果>
    @ OC2オペアンプ出力の、J4出力にて+側がクリップしたままになる。
    → これは、配線ミスが原因だった。
       オペアンプの中点電圧が、3.3Vになっていた。
       5.1k , 5.1kの分圧中点から取られるべきがSW4の、N.O.端子(プルアップ点)に接続されていた。
    → 配線を修正
       400point 500Hzの、SIN波は綺麗に出力される。
       VRmaxにて、≒2.5Vp-p
             ところが、周波数可変が出来ない?

   <調査>
    ・どうも、SW割込みが全く入らないようである。(ステータスLEDで確認)
     しかし、後閑本付属の、CDROM内の、最初から用意されているOC2.HEXを書込むと、正常にSW割込みが入る?
     自分で作ったプロジェクトで、コンパイルした結果のHEXでやると、ダメなのである?


■ 2012.11.9
  ・
プロジェクトの作成段階の問題なのか?色々調べたが解らず。
   この件は、後で調べることにし、保留することにした。
   今回は、ハードウエアのチェックが、主目的なので後閑さんのHEXで動作確認OKなので、良しとした。

  ● OCテスト(パルス出力)
  
・後閑氏の本の、「6-8-4: 使用例 ● 32bitモードのパルス出力の例」
   J4側:OC2のみの出力例となっていた。
   J3側:OC3もチェックできるようにプログラムを変更した。

   プロジェクト名: OC1

   <動作仕様>
    SW5(INT1): 周波数アップ (10Hzステップ)
    SW4(INT2): 周波数ダウン (10Hzステップ)

   <チェック結果>
    これは、自分で作成したプロジェクトからの  HEXでも問題なく動いた。


■ 2012.11.11
  ● ADCテスト
  
後閑氏の本の、「6-6-4: ADCモジュールの使用例」

   プロジェクト名: ADC1

   <動作仕様>
    @ 10bitの変換結果を、LEDバーチャートに表示(簡易VUメータ)
    A 0x200(512) ≧ 変換値→ 0としてしまう。
       0x200 < 変換値→ 変換値−512にする。
    B 変換値と、LEDバーチャート表示の関係(私の考察)
      ・ADCの、VREFは、AVDDの設定になっているので実測で約3.0Vである(3V入力で、変換値1023max)
      ・ADC変換の、生データは、10bitなので、10進で、1023maxである。
       交流信号の、正領域のみの変換値に、変換するため生データから、512を引いているので、
             実際に表示データとして使っているのは
       1023-512= 511maxということになる。
       つまり、9bit(max)である。
       その時のLED表示は、以下の通りと考えられる。

 

    <チェック結果>
     ・ まず入力アンプ部のチェックを行う。
       単純サイン入力で、チェック
       動いているようではあるが、GAIN_VRの回転方向が逆のようである。(時計回りで、GAIN小になる)
       → これは配線ミスが原因であった。
          但し、ポテンショの、CWとCCWがテレコということでなく
          1STステージのオペアンプ出力が、未配線で浮いていることが原因していた。
          配線を修正しOKとなる。


■ 2012.11.12〜 2012.11.13
  ・入力アンプの、GAIN確認
   後閑氏の書いた仕様には、最大100倍と書いてあるが実際やってみると、≒30倍ほどであった。
   その理由を考察してみると  2ndアンプの、入力インピーダンスは反転アンプゆえ  大きく取れず、
   入力抵抗によって決まってしまうため2.2kΩということになる。
   以下の、回路図下の説明の通り
   パッシブCRフィルタの出力が、CRフィルタの、Rと、2.2kの分圧比(約1/3.)で分圧されてしまうため
   トータルゲインは、100*0.3= 30倍ということになる。
   (後閑氏の表記は、オペアンプのゲイン設定のみの記述と思われる。)


   → 下に、FS(3.3Vサイン波入力及び、3.3V飽和サイン波入力), 1/2FS(1.5V), 1/4FS(0.75V)の時の、
           入出力波形と、LEDバーチャート表示の写真を示しました。.

   → これでよさそうです。

  ・ここまで一通り各ブロックのハードチェックが終わったので、やっとトレーニング基板が使えるようになりました。


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