PICのページ Version 1.1

 ※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。

   第一章に飛びます

   第三章に飛びます

   第四章に飛びます


 ●重要なお知らせ●

  1.Windows10の対応

    MICROCHIP社の開発環境は、Windows10に対応しています。
    Cコンパイラも無償で使えます。
    MICROCHIP社の場合、古いCコンパイラもダウンロードできるのですが、Cコンパイラの最新は、XC8,XC16,XC32です。
    これから開発をする人は、XC8,XC16,XC32で開発したほうがいいと思います。
    

  2.ADM3202のコンデンサの接続について

    このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
    実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
    実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
    ているので、データシートの通りに(図b)のようにしたほうがいいと思います。

 






第二章 16ビットPICを使ってみる



マイクロチップ社のパンフレットより抜粋


    PIC24F  :動作速度DC〜16 MIPS、動作電圧3V〜3.6V
    PIC24H  :動作速度DC〜40 MIPS、動作電圧3V〜3.6V
    dsPIC30 :動作速度DC〜30 MIPS、動作電圧2.5V〜5.5V、DSC機能
    dsPIC33 :動作速度DC〜40 MIPS、動作電圧3V〜3.6V、DSC機能

参考)秋月電子取り扱い ※H21.4現在


  ●開発環境について

     最近、PICも16ビットのものも入手しやすくなり、特徴のあるデバイスも増えてきたようだ。
    16ビットPICの場合、8ビットからのグレードアップだけでなく、他社の16〜64ビットのCPUと比べても、メリットは多いようだ。

    16ビットPICの場合、開発環境は8ビットPICで使っていたものの多く(MPLAB、C言語等)が、そのまま使用可能であるし、
    必要なドキュメントは全て マイクロチップ社 さんのサイトから無償でダウンロードできる。
    但し、秋月電子のライターは16ビットに対応していないので、秋月電子のライター(AKI−PICプログラマー)を使っている人は、
    ライターを別に用意する必要がある。

    16ビットPICに対応しているライターは、マイクロチップ社や、他のメーカーが製品を出しており、また、安価なキットもショップで
    販売されているので、何を使ってもいいと思うのだが、ここでは、マイクロチップ社のPICKIT2を使用している。








28ピン(16ビット)PIC PIC24FJ64GA002を使ってみる


      PIC24FJ64GA002は、PIC24Fシリーズの16ビットのPICマイコンだ。
     28ピンと小ピンながら、8ビット系に比較して処理が高速で、プログラムメモリー64Kバイト、データメモリー8192バイトを積んでおり、
     A/D Converter、UART、I2C、、、、と一般的な機能はほとんど搭載されていて、17ビット乗算、、、の機能も追加されており
     多くの用途で使用できるだろう。
     価格も、500円程度(秋月電子 H21.3)と安価だ。
     但し、電源電圧が2.0V〜3.6Vと、一般的な8ビット系のPICマイコンとは異なるので注意が必要だ。

マイクロチップ社のマニュアルより抜粋




  ●実験ボード タイプ1(PIC24FJ64GA002)


      PIC24FJ64GA002を使った簡単な実験ボードを作ってみた。
     主に、8ビット系PICで作ってきたアダプタ類をつないで実験するためのものだ。
     プログラムの更新はPICkit2からICSPで直接行うが、この場合、このボードのポートに接続する機器の負荷は
     なるべく軽くなるように回路を工夫する必要はある。
     但し、外部から電源を供給し(PICkit2が自動で検知する)、ICSPと共通端子となるRB0、RB1を使用しない場合は、
     そのような考慮は不要だ。

実験ボードのイメージ(表/裏/PICKIT2をつないだイメージ) 

回路図

     1.基本プログラム編

       (1)ルーレットアダプタをつないでみる

           ボタンを押すとルーレットが回転し、離すと任意のLEDで止まるルーレットにしてみた。
           アセンブラのプログラム(プログラムソース@、C)をMPLAB(ASM30)でBuildする場合、プログラムソースだけでなく、
           MPLABの画面からgld(p24FJ32GA002.gld)の選択も必要だ。
           プログラムソースBは、AをPLLで32MHzで動かしてみただけだ(高速バージョン)。

写真 

回路図 

test1.s

プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ ASM30) バージョン

test1.c

プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン

test1.c

プログラムソースB(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン ※32MHzバージョン 

test2.s

プログラムソースC(MPLAB用 PIC24FJ64GA002用 Timer仕様 アセンブラ ASM30) バージョン

test2.c

プログラムソースD(MPLAB用 PIC24FJ64GA002用 Timer仕様 C言語(MPLAB C30)) バージョン



       (2)UARTでパソコンにつないでみる

           UARTを使ってパソコンから入力した数字(1〜9)だけルーレットが回転するようにしてみた。
           このCPUは、UARTピンのアサインが任意で設定できるので、ピンアサインは何番でも良いのだが、このプログラムでは
           RX:PB(10),TX:PB(13)にしてある。※16F88用に作ったUART接続アダプタをそのまま使用したため。
           通信速度は9600BPSにしてあるが、これはこれまでの製作の設定に合わせただけだ。
           

写真 

回路図 

ハイパーターミナルのイメージ

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン  



       (3)A/D Converterと、UARTを使って、電圧計にしてみる

           UARTとA/D Converterを使って、0000〜3300[mV]の電圧計にしてみた。
           実験で入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れてしまうので、
           注意が必要だ。
           

写真 

回路図

ハイパーターミナルのイメージ

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ(MPLAB ASM30)) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン



       (4)タイマー割り込みを使って、周波数カウンタにしてみる

           タイマー割り込みを使って、周波数カウンタにしてみた。
           入力はC−MOSレベル(3.3V)とし、上記の電圧計の回路をそのまま使用した。
           内臓OSCを使っているので精度が低く、あくまで実験レベルのものだ。
           実用的なものにするなら、最低でもOSCは水晶を使用し、プログラムも高速化するよう工夫する必要がある。
           また、入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れて
           しまうので、注意が必要だ。
           

写真 

回路図

ハイパーターミナルのイメージ
(ファンクションジェネレータで50Hzのパルスを発生させて測定してみた)

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン



     2.活用編

       (1)簡単な知識ベースにしてみる

            詳細は、 (別室)動く作品のページ を参照。


       (2)

           只今、準備中







28ピン(16ビット・USB内臓)PIC PIC24FJ64GB002を使ってみる

PIC24FJ64GB002のイメージ

マイクロチップ社のマニュアルより抜粋

    只今、準備中









dsPIC(16ビット)を使ってみる


  ●dsPICについて

     
    一般的にいうDSP(Digital Signal Processor)をマイクロチップ社ではDSC(Digital Signal Controllers)
    と呼んでいますが、この機能を持つPICマイコンをdsPICと呼んで、マイクロチップ社は区別しています。
    dsPICマイコンは、それ以外の16BitPICマイコンに比べて、下記が向上されているようです。

     ・プロセッサの処理速度が、16MIPSから、40(30)MIPSと大幅にスピードアップしている
     ・周辺モジュールが機能アップしている(例)D/Aコンバータの精度が10Bitから12Bitになっている
     ・DSC処理用にコマンドが追加されている(一部抜粋)
        Accumulator関連のコマンド   (例)AccADD、LAC、MOVSAC、SAC
                               ADD Wso,#Slit4,Acc
                               SUB Acc
                               BRA OA,Expr、BRA OB,Expr、、、、
        演算関連のコマンド         (例)MAC、MPY、MSC、NEG、SFTAC、、、、
        その他の追加されたコマンド  (例)DIVF、DO、ED、EDAC、、、、 
     ・プロセッサ内部の性能アップ (例)DSP Engineや、X,Y DataBUS、、、








28ピン(16ビット)dsPIC PIC33FJ32GP202を使ってみる


      PIC33FJ32GP202は、PIC33シリーズの16ビットのdsPICマイコンだ。
      このCPUを使ってみたのは、上記PIC24FJ64GA002と電源電圧、及びピン配置が同じで、
      PIC24FJ64GA002用に作った実験ボードがそのまま使用できるからだ。

マイクロチップ社のマニュアルより抜粋




  ●実験ボード タイプ1(dsPIC33FJ32GP202)


      dsPIC33FJ32GP202を使った簡単な実験ボードを作ってみた。
      PIC24FJ64GA002用に作った実験ボードをそのまま使用している。

実験ボードのイメージ(表/裏)

回路図

     1.基本プログラム編

       (1)ルーレットアダプタをつないでみる

           ボタンを押すとルーレットが回転し、離すと任意のLEDで止まるルーレットにしてみた。
           アセンブラのプログラム(プログラムソース@、B、D)をMPLAB(ASM30)でBuildする場合、プログラムソースだけでなく、
           MPLABの画面からgld(p33FJ32GP202.gld)の選択も必要だ。
           サンプルDは、DSP機能の一つであるアーキュームレータ[符号+31Bit]を使った掛け算(MPYコマンド)を使ったサンプルで、
           この事例のようなルーレットを回す用途では、あまり意味がないものだ。また、アセンブラ以外での記述は不可能だ。
 

写真

回路図 

test1.s

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン

test1.c

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン  

test2.s

プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 Timer仕様 アセンブラ) バージョン

test2.c

プログラムソースC(MPLAB用 dsPIC33FJ32GP202用 Timer仕様 C言語(MPLAB C30)) バージョン

test3.s

プログラムソースD(MPLAB用 dsPIC33FJ32GP202用 アセンブラ DSP仕様) バージョン



       (2)UARTでパソコンにつないでみる

           上記同様、UARTを使ってパソコンから入力した数字(1〜9)だけルーレットが回転するようにしてみた。
           UARTピンのピンアサインは何番でも良いのだが、このプログラムでは、16F88用に作ったUART接続アダプタをそのまま
           使用したので、RX:PB(10),TX:PB(13)にしてある。
           通信速度は9600BPSにしてある。
           

写真 

回路図 

ハイパーターミナルのイメージ

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン  



       (3)A/D Converterと、UARTを使って、電圧計にしてみる

           上記同様、UARTとA/D Converterを使って、0000〜3300[mV]の電圧計にしてみた。
           入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れてしまうので、
           注意が必要だ。
           プログラムソースB、Cは、dsPICに搭載された12bitのA/D Converterを使ったサンプルだ。
           

写真 

回路図

ハイパーターミナルのイメージ

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30) ) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン

test2.s

プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30) 12Bit) バージョン  ※準備中

test2.c

プログラムソースC(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30) 12Bit) バージョン



       (4)タイマー割り込みを使って、周波数カウンタにしてみる

           上記同様、タイマー割り込みを使って、周波数カウンタにしてみた。
           入力はC−MOSレベル(3.3V)とし、上記の電圧計の回路をそのまま使用した。
           内臓OSCを使っているので精度が低く、あくまで実験レベルのものだ。
           実用的なものにするなら、最低でもOSCは水晶を使用し、プログラムも高速化するよう工夫する必要がある。
           また、入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れて
           しまうので、注意が必要だ。
           

写真 

回路図

ハイパーターミナルのイメージ
(ファンクションジェネレータで50Hzのパルスを発生させて測定してみた)

ハイパーターミナルの設定

test2.s

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン  ※準備中

test2.c

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン







  ●実験ボード タイプ2(dsPIC33FJ32GP202)


      D/Aコンバータを追加して、DSC機能の実験をするボード(タイプ2)を作ってみた。
      D/Aコンバータの精度は16ビットにしてあるが、これはPORTBの値をそのまま出力できるようにするためで、
      このような無調整の回路で、16ビットもの精度が得られるわけではありません。
      出力のボルテージフォロアに使ったOPアンプは、3.3Vで使用可能なレールTOレール型で、秋月電子で
      100円程度で購入できる安価なものです。

実験ボード2のイメージ(表/裏)

回路図


      ・実験で使ったSin波は、メーカー製のファンクションジェネレータでも、上記のPICマイコンで発生させても良いのですが、
      秋月電子では、ファンクションジェネレーターIC(XR−2206CP)を400円で販売しています。
      実験基板にそのまま組み込めてしまうし、1000円程度で1〜2時間もあれば出来てしまうので、この類の
      専用発信器としてお勧めです。但し、dsPICの入力電圧には注意が必要です。

回路図と写真 ※秋月電子で購入すると簡単な資料が添付されています
この回路図は資料を抜粋したものです。

デジタルオシロスコープによる出力波形イメージ
このICは、2つのVRで振幅(周波数)と高さ(電圧)を調整できます。S1は、SIN波と三角波の切り替えスイッチです。
このままでは直流出力なので、出力には直列にコンデンサが必要です。電源が12Vの時、出力は0〜5.6V(PK−PK)
まで調整可能でした。RCを選択する事で0.01Hz〜1MHzまでの出力が可能です。


      ・この実験で使うICの中には、電源が5V用のものもありますが、そういう場合はHT7750Aを使うと便利です。
      このICは、例えば3.3Vを5V200mA(MAX)に変換してくれるもので、秋月電子では5個200円で購入できます。
      また、使用する100μHのインダクターや一般的なショットキーダイオードも、秋月電子で購入できます。

回路図と写真 ※秋月電子で購入すると簡単な資料が添付されています
写真は発光ダイオードや、入力側のコンデンサを足しています。
コンデンサは、タンタルコンデンサと、積層セラミック(チップ型)を使っています。
5Vが必要なアダプタ基板に直接挿して使います。

       (1)D/Aコンバータを動かしてみる

           D/Aコンバータの確認のために作ったプログラムです。DSC機能は使っていません。
           サンプルAは、50Hz程度のSin波を発生します。
 

写真 16ビットだときれいなSin波だ
写真がにじんでいるのは、デジタルカメラの露出の問題だ

回路図(実験基板の出力にオシロスコープをつないだだけだ)

test1.s

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

test2.c

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン        


       (2)DSCを使ってみる

           プログラムソース@は、入力したアナログ波形をPICの12ビットA/Dコンバータでデジタル化してPICに取り込み、
           R−2R型16ビットD/Aコンバータでアナログ波形に戻して出力しているだけだ。
           図1は、1KHzのSin波をPICに入力し、プログラム中のサンプリング周波数を変えてオシロスコープで見たものだ。
           当たり前だが、サンプリング周波数が低くなるほど波形が荒くなっている。           
 
           プログラムソースAは、入力したアナログ波形をMPYコマンドで加工して、アナログ波形に戻して出力しているもので、
           SWを押さないとそのまま出力され、SW1を押すと5倍になって出力される。図2
           MPYコマンドを直接操作するため、プログラムはアセンブラだ。
           MPLAB(ASM30)でBuildする場合、MPLABの画面からgld(p33FJ32GP202.gld)の選択も必要だ。
 
           プログラムソースBは、入力したアナログ波形をプログラムで整流するもので、SWを押さないと半波整流、押すと
           全波整流の波形が出力される。プログラムはアセンブラだ。
           このサンプルでは、オシロスコープにつながる10μFのコンデンサはショートしておく。
           

写真(実験イメージ/入力アダプタ基板/出力アダプタ基板)

回路図
※注)簡単な保護回路は付いていますが、ファンクションジェネレータの振幅を大きくし過ぎると
入力のオペアンプが壊れる可能性があります!!!

図1)サンプリング周波数を変えてみる(プログラムソース@)

図2)MPYコマンドで振幅を大きくする(プログラムソースA)

図3)プログラムで理想ダイオードにしてみる(プログラムソースB)
凹凸があるのは、プログラム上のGND(1/2 Vcc)が波形の中点と正確に一致していないためだ。

test1.c

プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン

test2.s

プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン

test3.s

プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン


     ●活用編

       (1)オーディオ用 デジタルエフェクターにしてみる

            只今、準備中











64ピン(16ビット)dsPIC dsPIC33FJ256GP506を使ってみる


      dsPIC33FJ256GP506は、40MIPS,Rom:256KByte,Ram:16KByteを積んだ、高性能な64ピンQFPパッケージのdsPICだ。
      

写真

秋月電子の変換基板に取り付けたイメージ
隣接するVDD−VSS間には変換基板上で0.1μF程度のチップコンデンサを入れたほうが無難です。
64ピンTQFP(0.5mm)パッケージなので、ハンダ付けに自信がある人にしかお勧めはできない
(10倍くらいのルーペを使わないと、ハンダ付けの確認は不可能です)

マイクロチップ社のマニュアルより抜粋




  ●実験ボード タイプ1(dsPIC33FJ256GP506)


      dsPIC33FJ256GP506を使った簡単な実験ボードを作ってみた。

      ※実験ではPICKIT2で、「MPLAB IDE(Ver 8.10)」を使って書き込むと「Failed verify」が発生して書き込めません。
       PICKIT2付属の「PICKIT2(V2.60)」を使って書き込みをしています。
       但し、「MPLAB IDE(Ver 8.53)」を使って書き込むと、PICKIT2、PICKIT3どちらを使っても問題なく書き込みできる
       ようです。

実験ボードのイメージ(表/ソケットから抜いたイメージ/裏)

回路図

     1.基本プログラム編

       (1)ルーレットアダプタをつないでみる

           稼動確認のために作ったサンプルだ。単にルーレットが回転するだけだ。
 

写真

回路図

test1.s

プログラムソース@(MPLAB用 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン

test1.c

プログラムソースA(MPLAB用 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン

test2.s

プログラムソースB(MPLAB用 dsPIC33FJ256GP506用 Timer仕様 アセンブラ(MPLAB ASM30)) バージョン

test2.c

プログラムソースC(MPLAB用 dsPIC33FJ256GP506用 Timer仕様 C言語(MPLAB C30)) バージョン



       (2)電圧計にしてみる

           12bitsのA/D ConverterとUSARTを使って電圧計にしてみた。
           サンプル@は7.37MHz、サンプルAは79.23MHz(内部OSCを使った場合の最速値)動作させているもので、サンプルAの
           動作速度は40MIPS近くにもなります。

           入力に何の保護回路もつけていないので、電源電圧以上の入力を加えると、PICが壊れますので注意が必要です。
 

写真

回路図

ハイパーターミナルの画面イメージ

sample1.s

サンプル@(MPLAB用 7.37MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

sample1.c

サンプル@(MPLAB用 7.37MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン

sample2.s

サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

sample2.c

サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン



       (3)SIN波(50Hz)を発生させてみる

           D/A Converter(R−2R型)をつないで50HzのSIN波を発生させて見ました。
           D/A Converterの精度を高くするために、安価な双方向バッファ(74HC245AP)を通しています。
           このD/A Converterは16Bitsにしてありますが、これはPORTBの値をそのまま出力するためのもので、dsPIC33FJ32GP202の
           サンプル同様、無調整で16ビットもの精度(0〜65535)が得られるわけではありません。
           また、内部OSCをそのまま使っているので、周波数の精度も1パーセント程度しかありません。
           クロックは、79.23MHz動作(40MIPS)動作させています。

 

写真

回路図

オシロスコープをつないだ出力イメージ

sample1.s

サンプル@(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

sample2.c

サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン



       (4)4桁7セグメントLED式 電圧計(0〜3300mV)

           7SEGMENT LEDをつないで、0〜3.3[V]の電圧計にしてみました。
           このMPUは3.3Vデバイスなので、74HC245を3.3−>5V変換ICの代わりに使っています。
           74HC245を使ったのは、秋月電子で5個200円で購入できるからで、双方向性が必要なわけではありません。
           このICを使った場合、DIR(1ピン)の電圧を間違えると、入力と出力が逆向きになり、PIC側に5Vが出力されて、PICが
           壊れる可能性があります。
           また、入力はPICの電源電圧を超えないように注意が必要です。

 

写真と回路図
7SEGMENT表示器の種類にもよりますが、表示が暗いので、制限抵抗の470Ω*8はもう少し小さくしたほうがいいと思います。

アダプタボードのイメージ

sample1.c

サンプル@(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン



       (5)











100ピン(16ビット)dsPIC dsPIC33FJ256GP710を使ってみる


      dsPIC33FJ256GP710は、40MIPS,Rom:256KByte,Ram:32KByteを積んだ100ピンQFPパッケージのdsPICで、
      マイクロチップ社の16ビットPICの中で、最速、最大のI/O数・メモリー容量を持つ高性能なCPUだ。 ※H21.4現在
      秋月電子で扱っている全マイコン(H21.3時点)の中でも、CPU単体では最大規模のRam容量を持っている。
      PICも、これだけの性能があれば、かなり本格的なアプリケーションも作れそうだ。
       

写真

マイクロチップ社のマニュアルより抜粋

ダイセンの変換基板に取り付けたイメージ
ダイセンの変換基板は品質がいいのだが、基板の穴が小さくてヘッダーソケットが入らないので、
ガラス用ドリルで基板の穴を広げた。
100ピン・TQFP・0.5ミリパッケージなので、半田付けに自信がある人にしかお勧めはできない。




  ●実験ボード タイプ1(dsPIC33FJ256GP710)


      dsPIC33FJ256GP710を使った簡単な実験ボードを作ってみた。

      ※当初、書き込みや動作時にエラーが多発して、なかなか正常に動作しませんでした。
      実験では、隣接するVDD-VSSピン間には、変換基板上で、0.1μFのチップコンデンサの接続が必要でした。
      実験では省略していますが、隣接する全てのVDD-VSSピン間には、変換基板上でコンデンサの接続をするほうが無難です。
      また、dsPIC33FJ256GP506同様、実験ではPICKIT2で、「MPLAB IDE(Ver 8.10)」を使って書き込むと「Failed verify」が
      発生して書き込めなかったので、PICKIT2付属の「PICKIT2(V2.60)」を使って書き込みをしています。
      但し、「MPLAB IDE(Ver 8.53)」を使って書き込むと、PICKIT2、PICKIT3どちらを使っても問題なく書き込みできるようです。
      

写真(表/表[ソケットから外した状態]/裏)
このサンプルでは、ソケット内部の水晶は、スイッチで配線をつないでいません。
(この水晶は、下記の「実験ボード タイプ2」で使用します。)
中央の写真は、水晶のジャンパースイッチをつないだ時のイメージです。

隣接する各VDD-VSSピン間には、変換基板上で0.1μF程度のコンデンサを入れないと正常に動作しない

回路図


     1.基本プログラム編

       (1)ルーレットアダプタをつないでみる

           上記同様、基板の稼動確認のために、ルーレットが回転するプログラムを作ってみた。
 

写真

回路図

test1.s

プログラムソース@(MPLAB用 dsPIC33FJ256GP710用 アセンブラ(MPLAB ASM30)) バージョン

test1.c

プログラムソースA(MPLAB用 dsPIC33FJ256GP710用 C言語(MPLAB C30)) バージョン

test2.s

プログラムソースB(MPLAB用 dsPIC33FJ256GP710用 Timer仕様 アセンブラ(MPLAB ASM30)) バージョン

test2.c

プログラムソースC(MPLAB用 dsPIC33FJ256GP710用 Timer仕様 C言語(MPLAB C30)) バージョン



       (2)電圧計にしてみる

           12bitsのA/D ConverterとUSARTを使って電圧計にしてみた。
           プログラムは、上記dsPIC33FJ256GP506用とほとんど同じものだ。
           サンプル@は7.37MHz、サンプルAは79.23MHz(内部OSCを使った場合の最速値)動作させているもので、サンプルAの
           動作速度は40MIPS近くにもなります。
           正確な言い方ではありませんが、この値は、例えば18シリーズを40MHzで動作させた場合で10MIPS程度なので、クロックだけでも
           速度が4倍になっています。

           入力に何の保護回路もつけていないので、電源電圧以上の入力を加えると、PICが壊れますので注意が必要です。
 

写真

回路図

ハイパーターミナルの画面イメージ

sample1.s

サンプル@(MPLAB用 dsPIC33FJ256GP710用 7.37MHz動作 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

sample1.c

サンプル@(MPLAB用 dsPIC33FJ256GP710用 7.37MHz動作 C言語(MPLAB C30)) バージョン

sample2.s

サンプルA(MPLAB用 dsPIC33FJ256GP710用 79.23MHz動作 アセンブラ(MPLAB ASM30)) バージョン   ※準備中

sample2.c

サンプルA(MPLAB用 dsPIC33FJ256GP710用 79.23MHz動作 C言語(MPLAB C30)) バージョン




  ●実験ボード タイプ2(dsPIC33FJ256GP710)


      上記、「実験ボード タイプ1(dsPIC33FJ256GP710)」に、グラフィックLCD(SG12864A)と、10MHzの水晶を追加し、PLLで80MHz
      (40MIPS)動作させるようにしたものだ。
      LCDのバックライトに必要な5Vは、HT7750A(秋月電子で5個200円)を使って、電源の3.3Vから作り出している。
      (HT7750Aは200mAしか取れないので、バックライトはやや暗めにしてある。)

      サンプル@は、稼動確認のために作ったプログラムで、18F452で作ったフォントを表示するようにしただけのものだが、このCPUの
      最速値である80MHz動作させている。

      サンプルAは、簡単な座標計算をする事で、表示領域(CS1,CS2)の区別をなくしたもので、このほうが実用的な使い方かも知れません。
      上記同様、80MHz動作させています。
      

写真、回路図
このLCDのネジ穴は、3mmビスが通らないので、ダイソーの「3mmハンドドリル」で3mmに広げてある。

サンプル@の表示イメージ

サンプルAの表示イメージ


LCDの座標イメージ

sample1.c

サンプル@(MPLAB用 dsPIC33FJ256GP710用 80MHz動作 C言語(MPLAB C30)) バージョン

sample2.c

サンプルA(MPLAB用 dsPIC33FJ256GP710用 80MHz動作 C言語(MPLAB C30)) バージョン




   (1)電圧(0〜10.23V)をグラフィックで表示してみる


      電圧をグラフィックで表示するサンプルを作ってみました。

      サンプル@は、1秒毎に電圧測定(0〜10.23V)を行って、現在の電圧を画面右上に数値で表示し、直近の100データ
      をグラフで表示します。
       「第一章 8ビットPICを使ってみる」 のPIC18F4520で作ったものと同じ機能のものです。
      

      dsPIC33FJ256GP710は、Ramを32KByteも積んでいるので、PIC18F4520バージョンとは異なり、
      処理に時間がかかるグラフィックデータのやり取りを、PIC上のメモリーで行なう事で、処理を高速化する事ができます。
      サンプルAは、サンプル@のグラフィック処理を高速化したもので、サンプル@のようなスクロール処理の時の画面の
      ちらつきがなくなり、サンプル@とは全く違った、きれいで安定した画面の見え方になります。

写真

回路図中の入力にある100KΩと210KΩは、1パーセントの金属皮膜抵抗を使ったほうがいいのですが、
手元になかったので、一般的な5パーセントの炭素皮膜抵抗を合成して、この抵抗値を作り出しています。
また、電源電圧を測定する基準にしているので、精度が高い測定をする場合は、電源電圧(3,3V)の精度を
高くする必要があります(一般的なACアダプタの精度は5パーセント程度しかありません)。

      

回路図

sample1.c

サンプル@(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン

sample2.c

サンプルA(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン





   (2)ゲームにしてみる(その1)


      簡単なアクションゲームを作ってみました。
      サンプル@、Aでは省略していますが、メモリーに余裕があるので、効果音のプログラムも追加すれば、
      それなりに楽しめると思います(スピーカがつながっていますが、サンプル@、Aは音は出ません)。

      サンプル@は、
      ジョイスティックで、ガンマン(プレイヤー)を操作し、ボタン(S1)を押すと、左右の進行方向に拳銃の弾が発射
      されるので、クラゲタイプの宇宙人を倒していきます。
      全ての宇宙人を倒すとステージクリアになり、画面が変わり、宇宙人が5匹ずつ追加されます。
      宇宙人は、最大で50匹まで追加されます。
      途中、宇宙人に捕まるとゲームオーバーです。

      宇宙人の動きは乱数によるランダムな動きですが、プレイヤーに徐々に近づいてくるようになっているので、
      難易度は高くなっています。
      乱数は、簡単な発振回路を使って発生させています。この詳細は、 「第一章 8ビットPICを使ってみる」
      PIC12F1820で作ったものと同じようなものです(電源が3.3Vなので4049BPを使っています)。     
      画面のデザインは、プログラムの「Screen01」関数の中でブロックの座標を指定しているだけなので、自由に変更
      できます。


      サンプルAは、サンプル@にプレイヤーの分身である、無敵の最強ロボット2体を追加したものです。
      乱数で勝手に敵陣の中にでも乗り込んで、プレイヤーの進行方向(左右)と同じ方向に拳銃を乱射し、宇宙人と
      戦ってくれます。
      このプログラムは構造が簡単ですし、難易度も簡単過ぎたり難し過ぎたりするので、ロボットや宇宙人の数、画面の
      レイアウトを自由に変更したり、新しい機能(例えば壁を作ったり、壊したり、、、)を追加して、調整する必要があります。
      なお、初期状態では、次のように定義されています。

          宇宙人の数(G_inv_num)  : 初期値が5匹、ステージをクリアする毎に5匹追加されます
                              G_inv_numの上限は、PI_INV_NUM_MAXで仮に50匹未満にしてあります
          ロボットの数(G_robot_num): 初期値は2体
                              G_robot_numの上限は、PI_ROBOT_NUM_MAXで仮に10体未満にしてあります
          ゲームのスピード: 1C(8)のTimerの数値を大きくすれば遅くなります
          画面のデザイン: 「Screen01」関数の中で、配置するブロックの座標を指定します

写真(全体/ジョイスティック/乱数発生用の発振回路/小型スピーカ) (サンプル@、A共通)

このジョイスティックは、秋月電子で100円で購入できるものです

     

回路図 (サンプル@、A共通)

超小型スピーカ(直径1cm)を使っているので、耐圧の都合で音量は小さくしてあります。
普通のスピーカをつなぐ場合は、PB3につなぐ回路は、もう少し音が大きくなる回路に
したほうが、迫力がでていいと思います。

      

操作方法 (サンプル@、A共通)

      

サンプルAは、無敵の最強ロボットが2体追加されて、一緒に宇宙人と戦ってくれます
ロボット右側の白抜きのマルがロボットが発射する玉で、宇宙人のみを倒します

      

起動時の初期画面で、ジョイスティックを上向きに操作すると、
スタート画面(ステージ番号)を変更できます (サンプル@、A共通)

sample1.c

サンプル@(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン

sample2.c

サンプルA(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン










別室、PIC作品のページもよろしく!(続々、バージョンアップ中!!)

PIC作品のページへ飛ぶ

上のボタンをクリックすると作品のページに飛びます



CPLDのページもよろしく!(いよいよオープン! 続々、バージョンアップ中!!)

CPLDのページへ飛ぶ

プログラマブルに変更ができるハードウエアであるCPLDと、コンピュータであるPICを組み合わせた、簡単な製作を
紹介しています

上のボタンをクリックするとCPLDのページに飛びます



付録(おまけ)のページもよろしく!(続々、バージョンアップ中!!)

CPLDのページへ飛ぶ

技術系雑誌の付録(おまけ)を使った、おまけのページです
付録の都合上、ここでは、PIC以外のCPUを使った製作を紹介しています。(内容は、PICと関連がありません。)

上のボタンをクリックすると付録(おまけ)のページに飛びます



Cygwinのページもよろしく!(続々、バージョンアップ中!!)

CPLDのページへ飛ぶ

WindowsXP上で動作するUnixであるCygwinのページです。
WindowsXP上での、Unixの開発を紹介しています。
市販の雑誌や書籍では、TRON系OS(μITRON)や、GNUを使ったCPUの開発記事が、しばしば紹介されて
いますが、このページでは、PIC対応のフリーのコンパイラーの実験を計画しています。ただし、現在、全くの未着手です。
そのほか、AVRのgccについて、基本操作をのせています。

上のボタンをクリックするとCygwinのページに飛びます



AVRのページもよろしく!(続々、バージョンアップ中!!)

AVRのページへ飛ぶ

AVRを使った製作のページです 。アセンブラ(AVRStudio)、C言語(gcc)、BASIC(BASCOM)のサンプルプログラムを紹介しています。
内容は、PICと関係がありません。

上のボタンをクリックするとAVRのページに飛びます



動く作品のページもよろしく!(続々、バージョンアップ中!!)

動く作品のページへ飛ぶ

CPUを使った動く工作作品のページです。
目標は、自分の意識を持った巨大ロボットを作る事です。
現在は、無償の開発ツールを使った知識データベースの実験を紹介しています。

上のボタンをクリックすると動く作品のページに飛びます



古いパソコンの活用のページもよろしく!

古いパソコンのページへ飛ぶ

スペックが古くて廃棄するしかなくなったパソコンを、解体して再利用するページです。

上のボタンをクリックすると古いパソコンのページに飛びます



ActiveBASICのページもよろしく!(続々、バージョンアップ中!!)

ActiveBASICのページへ飛ぶ

USBやRS232を使って、PICとつなぐ、Windows/XPパソコンの簡単なアプリケーションを紹介しています。
このページでは、無償で使用でき、しかも機能的にも優れている、ActiveBASICを使った事例を紹介しています。

上のボタンをクリックするとActiveBASICのページに飛びます



パソコンのパラレルポート(プリンタポート)で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)

パラレルポートで遊ぼうのページへ飛ぶ

Windows/XPパソコンのパラレルポート(プリンタポート)を、パソコンのプログラムで操作した簡単な事例を紹介しています。
このページは、パソコンで、直接、外付けのハードウエアを動かすもので、組み込み型CPUとは関係がありません。

上のボタンをクリックするとパラレルポートで遊ぼうのページに飛びます



リアルタイムOSで遊ぼうのページもよろしく!(続々、バージョンアップ中!!)

リアルタイムOSで遊ぼうのページへ飛ぶ

μITRON(TRON系のOS)を使った簡単な事例を紹介しています。
TRON系のOSは、組み込み型システムにおいては、広く普及しているものです。

上のボタンをクリックするとリアルタイムOSで遊ぼうのページに飛びます



H−8で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)

H−8で遊ぼうのページへ飛ぶ

ルネサステクノロジー社の8ビットCPUであるH−8を使った簡単な事例を紹介しています。

上のボタンをクリックするとH−8で遊ぼうのページに飛びます



SH−2で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)

SH−2で遊ぼうのページへ飛ぶ

秋月電子で入手が可能になった、32ビットCPUであるSH−2を使った簡単な事例を紹介しています。

上のボタンをクリックするとSH−2で遊ぼうのページに飛びます



「(別室)MSP430のページ!(続々、バージョンアップ中!!)

「(別室)MSP430のページへ飛ぶ

MSP430を使った簡単な事例を紹介しています。

上のボタンをクリックすると「(別室)MSP430のページに飛びます



「(別室)M16C/R8Cで遊ぼう 」のページ(続々、バージョンアップ中!!)

「(別室)M16C/R8Cで遊ぼうのページへ飛ぶ

M16C/R8Cを使った簡単な事例を紹介しています。

上のボタンをクリックすると「(別室)M16C/R8Cで遊ぼう」のページに飛びます



計算のページもよろしく!(ただいま、準備中!!)

計算のページへ飛ぶ

PICやAVRで使う、簡単な微分、積分、代数計算等をまとめています。
知識ベースや、加速度センサーを使うために準備しているもので、内容は初心者レベルです。

上のボタンをクリックすると計算のページに飛びます



「(別室)カーアクセサリーのページ!(続々、バージョンアップ中!!)

「(別室)カーアクセサリーのページへ飛ぶ

カーアクセサリーの簡単な事例を紹介しています。

上のボタンをクリックすると「(別室)カーアクセサリーのページに飛びます



「(別室)ゲームコーナーのページ!(続々、バージョンアップ中!!)

「(別室)ゲームコーナーのページへ飛ぶ

簡単なゲームを紹介しています。

上のボタンをクリックすると「(別室)ゲームコーナーのページに飛びます



オーディオのページもよろしく!(続々、バージョンアップ中!!)

オーディオのページへ飛ぶ

楽器やステレオアンプ等のオーディオ機器を、簡単に自作してみようというコーナーです。

上のボタンをクリックするとオーディオのページに飛びます



レトロのページもよろしく!(続々、バージョンアップ中!!)

レトロのページへ飛ぶ

今では懐かしいマイコンを使わない製作のページです。
真空管、トランジスタ、ロジックICによる製作を予定しています。

上のボタンをクリックするとレトロのページに飛びます



携帯電話で遊ぼうのページもよろしく!

携帯電話で遊ぼうのページへ飛ぶ

携帯電話の簡単なアクセサリーを紹介しています。

上のボタンをクリックすると携帯電話で遊ぼうのページに飛びます



STM8Sマイコンで遊ぼうのページもよろしく!

STM8Sマイコンで遊ぼうのページへ飛ぶ

STM8Sマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)

上のボタンをクリックするとSTM8Sマイコンのページに飛びます



ARMマイコンで遊ぼうのページもよろしく!

ARMマイコンで遊ぼうのページへ飛ぶ

ARMマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)

上のボタンをクリックするとARMマイコンのページに飛びます



ジャンクボードで遊ぼうのページもよろしく!

ジャンクボードで遊ぼうのページへ飛ぶ

仕様不明のジャンクボードを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)

上のボタンをクリックするとジャンクボードで遊ぼうのページに飛びます



メニューのページ

メニュー画面のページへ飛ぶ

ページが増えたので、派手なメニュー画面を作りました。

上のボタンをクリックするとメニューに飛びます



これであきずに、次章もよろしく。。。。。。




●問い合わせ先(代表者) BYP03364@nifty.ne.jp

 ※ウイルス感染防止のため、容量の大きなもの、添付ファイルのあるもの、テキスト形式以外のメールは
全て削除されます。
 また、個々の質問については、お答えできません。

●このページは、自由にリンクしてください。