※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
●重要なお知らせ●
1.Windows10の対応
2.ADM3202のコンデンサの接続について
第二章 16ビットPICを使ってみる
マイクロチップ社のパンフレットより抜粋
参考)秋月電子取り扱い ※H21.4現在
●開発環境について
最近、PICも16ビットのものも入手しやすくなり、特徴のあるデバイスも増えてきたようだ。
28ピン(16ビット)PIC PIC24FJ64GA002を使ってみる
マイクロチップ社のマニュアルより抜粋
●実験ボード タイプ1(PIC24FJ64GA002)
実験ボードのイメージ(表/裏/PICKIT2をつないだイメージ)
回路図
1.基本プログラム編
(1)ルーレットアダプタをつないでみる
ボタンを押すとルーレットが回転し、離すと任意のLEDで止まるルーレットにしてみた。
写真
回路図
プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ ASM30) バージョン
プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン
プログラムソースB(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン ※32MHzバージョン
プログラムソースC(MPLAB用 PIC24FJ64GA002用 Timer仕様 アセンブラ ASM30) バージョン
プログラムソースD(MPLAB用 PIC24FJ64GA002用 Timer仕様 C言語(MPLAB C30)) バージョン
(2)UARTでパソコンにつないでみる
UARTを使ってパソコンから入力した数字(1〜9)だけルーレットが回転するようにしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ) バージョン ※準備中
プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン
(3)A/D Converterと、UARTを使って、電圧計にしてみる
UARTとA/D Converterを使って、0000〜3300[mV]の電圧計にしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ(MPLAB ASM30)) バージョン ※準備中
プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン
(4)タイマー割り込みを使って、周波数カウンタにしてみる
タイマー割り込みを使って、周波数カウンタにしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 PIC24FJ64GA002用 アセンブラ) バージョン ※準備中
プログラムソースA(MPLAB用 PIC24FJ64GA002用 C言語(MPLAB C30)) バージョン
2.活用編
(1)簡単な知識ベースにしてみる
詳細は、
(別室)動く作品のページ
を参照。
(2)
只今、準備中
28ピン(16ビット・USB内臓)PIC PIC24FJ64GB002を使ってみる
PIC24FJ64GB002のイメージ
マイクロチップ社のマニュアルより抜粋
只今、準備中
dsPIC(16ビット)を使ってみる
●dsPICについて
28ピン(16ビット)dsPIC PIC33FJ32GP202を使ってみる
マイクロチップ社のマニュアルより抜粋
●実験ボード タイプ1(dsPIC33FJ32GP202)
実験ボードのイメージ(表/裏)
回路図
1.基本プログラム編
(1)ルーレットアダプタをつないでみる
ボタンを押すとルーレットが回転し、離すと任意のLEDで止まるルーレットにしてみた。
写真
回路図
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 Timer仕様 アセンブラ) バージョン
プログラムソースC(MPLAB用 dsPIC33FJ32GP202用 Timer仕様 C言語(MPLAB C30)) バージョン
プログラムソースD(MPLAB用 dsPIC33FJ32GP202用 アセンブラ DSP仕様) バージョン
(2)UARTでパソコンにつないでみる
上記同様、UARTを使ってパソコンから入力した数字(1〜9)だけルーレットが回転するようにしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン ※準備中
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
(3)A/D Converterと、UARTを使って、電圧計にしてみる
上記同様、UARTとA/D Converterを使って、0000〜3300[mV]の電圧計にしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30) ) バージョン ※準備中
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30) 12Bit) バージョン ※準備中
プログラムソースC(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30) 12Bit) バージョン
(4)タイマー割り込みを使って、周波数カウンタにしてみる
上記同様、タイマー割り込みを使って、周波数カウンタにしてみた。
写真
回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ) バージョン ※準備中
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
●実験ボード タイプ2(dsPIC33FJ32GP202)
実験ボード2のイメージ(表/裏)
回路図
回路図と写真 ※秋月電子で購入すると簡単な資料が添付されています
デジタルオシロスコープによる出力波形イメージ
回路図と写真 ※秋月電子で購入すると簡単な資料が添付されています
(1)D/Aコンバータを動かしてみる
D/Aコンバータの確認のために作ったプログラムです。DSC機能は使っていません。
写真 16ビットだときれいなSin波だ
回路図(実験基板の出力にオシロスコープをつないだだけだ)
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン ※準備中
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
(2)DSCを使ってみる
プログラムソース@は、入力したアナログ波形をPICの12ビットA/Dコンバータでデジタル化してPICに取り込み、
写真(実験イメージ/入力アダプタ基板/出力アダプタ基板)
回路図
図1)サンプリング周波数を変えてみる(プログラムソース@)
図2)MPYコマンドで振幅を大きくする(プログラムソースA)
図3)プログラムで理想ダイオードにしてみる(プログラムソースB)
プログラムソース@(MPLAB用 dsPIC33FJ32GP202用 C言語(MPLAB C30)) バージョン
プログラムソースA(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン
プログラムソースB(MPLAB用 dsPIC33FJ32GP202用 アセンブラ(MPLAB ASM30)) バージョン
●活用編
(1)オーディオ用 デジタルエフェクターにしてみる
只今、準備中
64ピン(16ビット)dsPIC dsPIC33FJ256GP506を使ってみる
写真
秋月電子の変換基板に取り付けたイメージ
マイクロチップ社のマニュアルより抜粋
●実験ボード タイプ1(dsPIC33FJ256GP506)
実験ボードのイメージ(表/ソケットから抜いたイメージ/裏)
回路図
1.基本プログラム編
(1)ルーレットアダプタをつないでみる
稼動確認のために作ったサンプルだ。単にルーレットが回転するだけだ。
写真
回路図
プログラムソース@(MPLAB用 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン
プログラムソースA(MPLAB用 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン
プログラムソースB(MPLAB用 dsPIC33FJ256GP506用 Timer仕様 アセンブラ(MPLAB ASM30)) バージョン
プログラムソースC(MPLAB用 dsPIC33FJ256GP506用 Timer仕様 C言語(MPLAB C30)) バージョン
(2)電圧計にしてみる
12bitsのA/D ConverterとUSARTを使って電圧計にしてみた。
写真
回路図
ハイパーターミナルの画面イメージ
サンプル@(MPLAB用 7.37MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン ※準備中
サンプル@(MPLAB用 7.37MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン
サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン ※準備中
サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン
(3)SIN波(50Hz)を発生させてみる
D/A Converter(R−2R型)をつないで50HzのSIN波を発生させて見ました。
写真
回路図
オシロスコープをつないだ出力イメージ
サンプル@(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 アセンブラ(MPLAB ASM30)) バージョン ※準備中
サンプルA(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン
(4)4桁7セグメントLED式 電圧計(0〜3300mV)
7SEGMENT LEDをつないで、0〜3.3[V]の電圧計にしてみました。
写真と回路図
アダプタボードのイメージ
サンプル@(MPLAB用 79.23MHz動作 dsPIC33FJ256GP506用 C言語(MPLAB C30)) バージョン
(5)
100ピン(16ビット)dsPIC dsPIC33FJ256GP710を使ってみる
写真
マイクロチップ社のマニュアルより抜粋
ダイセンの変換基板に取り付けたイメージ
●実験ボード タイプ1(dsPIC33FJ256GP710)
写真(表/表[ソケットから外した状態]/裏)
隣接する各VDD-VSSピン間には、変換基板上で0.1μF程度のコンデンサを入れないと正常に動作しない
回路図
1.基本プログラム編
(1)ルーレットアダプタをつないでみる
上記同様、基板の稼動確認のために、ルーレットが回転するプログラムを作ってみた。
写真
回路図
プログラムソース@(MPLAB用 dsPIC33FJ256GP710用 アセンブラ(MPLAB ASM30)) バージョン
プログラムソースA(MPLAB用 dsPIC33FJ256GP710用 C言語(MPLAB C30)) バージョン
プログラムソースB(MPLAB用 dsPIC33FJ256GP710用 Timer仕様 アセンブラ(MPLAB ASM30)) バージョン
プログラムソースC(MPLAB用 dsPIC33FJ256GP710用 Timer仕様 C言語(MPLAB C30)) バージョン
(2)電圧計にしてみる
12bitsのA/D ConverterとUSARTを使って電圧計にしてみた。
写真
回路図
ハイパーターミナルの画面イメージ
サンプル@(MPLAB用 dsPIC33FJ256GP710用 7.37MHz動作 アセンブラ(MPLAB ASM30)) バージョン ※準備中
サンプル@(MPLAB用 dsPIC33FJ256GP710用 7.37MHz動作 C言語(MPLAB C30)) バージョン
サンプルA(MPLAB用 dsPIC33FJ256GP710用 79.23MHz動作 アセンブラ(MPLAB ASM30)) バージョン ※準備中
サンプルA(MPLAB用 dsPIC33FJ256GP710用 79.23MHz動作 C言語(MPLAB C30)) バージョン
●実験ボード タイプ2(dsPIC33FJ256GP710)
写真、回路図
サンプル@の表示イメージ
サンプルAの表示イメージ
LCDの座標イメージ
サンプル@(MPLAB用 dsPIC33FJ256GP710用 80MHz動作 C言語(MPLAB C30)) バージョン
サンプルA(MPLAB用 dsPIC33FJ256GP710用 80MHz動作 C言語(MPLAB C30)) バージョン
(1)電圧(0〜10.23V)をグラフィックで表示してみる
写真
回路図
サンプル@(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン
サンプルA(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン
(2)ゲームにしてみる(その1)
写真(全体/ジョイスティック/乱数発生用の発振回路/小型スピーカ) (サンプル@、A共通)
回路図 (サンプル@、A共通)
操作方法 (サンプル@、A共通)
サンプルAは、無敵の最強ロボットが2体追加されて、一緒に宇宙人と戦ってくれます
起動時の初期画面で、ジョイスティックを上向きに操作すると、
サンプル@(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン
サンプルA(MPLAB用 dsPIC33FJ256GP710用/グラフィックLCD(SG12864A) C言語(MPLAB C30)) バージョン
別室、PIC作品のページもよろしく!(続々、バージョンアップ中!!)
上のボタンをクリックすると作品のページに飛びます CPLDのページもよろしく!(いよいよオープン! 続々、バージョンアップ中!!)
プログラマブルに変更ができるハードウエアであるCPLDと、コンピュータであるPICを組み合わせた、簡単な製作を
上のボタンをクリックするとCPLDのページに飛びます 付録(おまけ)のページもよろしく!(続々、バージョンアップ中!!)
技術系雑誌の付録(おまけ)を使った、おまけのページです
上のボタンをクリックすると付録(おまけ)のページに飛びます Cygwinのページもよろしく!(続々、バージョンアップ中!!)
WindowsXP上で動作するUnixであるCygwinのページです。
上のボタンをクリックするとCygwinのページに飛びます AVRのページもよろしく!(続々、バージョンアップ中!!)
AVRを使った製作のページです 。アセンブラ(AVRStudio)、C言語(gcc)、BASIC(BASCOM)のサンプルプログラムを紹介しています。
上のボタンをクリックするとAVRのページに飛びます 動く作品のページもよろしく!(続々、バージョンアップ中!!)
MICROCHIP社の開発環境は、Windows10に対応しています。
Cコンパイラも無償で使えます。
MICROCHIP社の場合、古いCコンパイラもダウンロードできるのですが、Cコンパイラの最新は、XC8,XC16,XC32です。
これから開発をする人は、XC8,XC16,XC32で開発したほうがいいと思います。
このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
ているので、データシートの通りに(図b)のようにしたほうがいいと思います。
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機能
16ビットPICの場合、8ビットからのグレードアップだけでなく、他社の16〜64ビットのCPUと比べても、メリットは多いようだ。
16ビットPICの場合、開発環境は8ビットPICで使っていたものの多く(MPLAB、C言語等)が、そのまま使用可能であるし、
必要なドキュメントは全て
マイクロチップ社
さんのサイトから無償でダウンロードできる。
但し、秋月電子のライターは16ビットに対応していないので、秋月電子のライター(AKI−PICプログラマー)を使っている人は、
ライターを別に用意する必要がある。
16ビットPICに対応しているライターは、マイクロチップ社や、他のメーカーが製品を出しており、また、安価なキットもショップで
販売されているので、何を使ってもいいと思うのだが、ここでは、マイクロチップ社のPICKIT2を使用している。
PIC24FJ64GA002は、PIC24Fシリーズの16ビットのPICマイコンだ。
28ピンと小ピンながら、8ビット系に比較して処理が高速で、プログラムメモリー64Kバイト、データメモリー8192バイトを積んでおり、
A/D Converter、UART、I2C、、、、と一般的な機能はほとんど搭載されていて、17ビット乗算、、、の機能も追加されており
多くの用途で使用できるだろう。
価格も、500円程度(秋月電子 H21.3)と安価だ。
但し、電源電圧が2.0V〜3.6Vと、一般的な8ビット系のPICマイコンとは異なるので注意が必要だ。
PIC24FJ64GA002を使った簡単な実験ボードを作ってみた。
主に、8ビット系PICで作ってきたアダプタ類をつないで実験するためのものだ。
プログラムの更新はPICkit2からICSPで直接行うが、この場合、このボードのポートに接続する機器の負荷は
なるべく軽くなるように回路を工夫する必要はある。
但し、外部から電源を供給し(PICkit2が自動で検知する)、ICSPと共通端子となるRB0、RB1を使用しない場合は、
そのような考慮は不要だ。
アセンブラのプログラム(プログラムソース@、C)をMPLAB(ASM30)でBuildする場合、プログラムソースだけでなく、
MPLABの画面からgld(p24FJ32GA002.gld)の選択も必要だ。
プログラムソースBは、AをPLLで32MHzで動かしてみただけだ(高速バージョン)。
このCPUは、UARTピンのアサインが任意で設定できるので、ピンアサインは何番でも良いのだが、このプログラムでは
RX:PB(10),TX:PB(13)にしてある。※16F88用に作ったUART接続アダプタをそのまま使用したため。
通信速度は9600BPSにしてあるが、これはこれまでの製作の設定に合わせただけだ。
実験で入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れてしまうので、
注意が必要だ。
入力はC−MOSレベル(3.3V)とし、上記の電圧計の回路をそのまま使用した。
内臓OSCを使っているので精度が低く、あくまで実験レベルのものだ。
実用的なものにするなら、最低でもOSCは水晶を使用し、プログラムも高速化するよう工夫する必要がある。
また、入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れて
しまうので、注意が必要だ。
(ファンクションジェネレータで50Hzのパルスを発生させて測定してみた)
一般的にいう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、、、
PIC33FJ32GP202は、PIC33シリーズの16ビットのdsPICマイコンだ。
このCPUを使ってみたのは、上記PIC24FJ64GA002と電源電圧、及びピン配置が同じで、
PIC24FJ64GA002用に作った実験ボードがそのまま使用できるからだ。
dsPIC33FJ32GP202を使った簡単な実験ボードを作ってみた。
PIC24FJ64GA002用に作った実験ボードをそのまま使用している。
アセンブラのプログラム(プログラムソース@、B、D)をMPLAB(ASM30)でBuildする場合、プログラムソースだけでなく、
MPLABの画面からgld(p33FJ32GP202.gld)の選択も必要だ。
サンプルDは、DSP機能の一つであるアーキュームレータ[符号+31Bit]を使った掛け算(MPYコマンド)を使ったサンプルで、
この事例のようなルーレットを回す用途では、あまり意味がないものだ。また、アセンブラ以外での記述は不可能だ。
UARTピンのピンアサインは何番でも良いのだが、このプログラムでは、16F88用に作ったUART接続アダプタをそのまま
使用したので、RX:PB(10),TX:PB(13)にしてある。
通信速度は9600BPSにしてある。
入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れてしまうので、
注意が必要だ。
プログラムソースB、Cは、dsPICに搭載された12bitのA/D Converterを使ったサンプルだ。
入力はC−MOSレベル(3.3V)とし、上記の電圧計の回路をそのまま使用した。
内臓OSCを使っているので精度が低く、あくまで実験レベルのものだ。
実用的なものにするなら、最低でもOSCは水晶を使用し、プログラムも高速化するよう工夫する必要がある。
また、入力に何の保護回路も付けていないので、入力に電源電圧[3.3V]以上の電圧をかけるとPICが壊れて
しまうので、注意が必要だ。
(ファンクションジェネレータで50Hzのパルスを発生させて測定してみた)
D/Aコンバータを追加して、DSC機能の実験をするボード(タイプ2)を作ってみた。
D/Aコンバータの精度は16ビットにしてあるが、これはPORTBの値をそのまま出力できるようにするためで、
このような無調整の回路で、16ビットもの精度が得られるわけではありません。
出力のボルテージフォロアに使ったOPアンプは、3.3Vで使用可能なレールTOレール型で、秋月電子で
100円程度で購入できる安価なものです。
・実験で使った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が必要なアダプタ基板に直接挿して使います。
サンプルAは、50Hz程度のSin波を発生します。
写真がにじんでいるのは、デジタルカメラの露出の問題だ
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のコンデンサはショートしておく。
※注)簡単な保護回路は付いていますが、ファンクションジェネレータの振幅を大きくし過ぎると
入力のオペアンプが壊れる可能性があります!!!
凹凸があるのは、プログラム上のGND(1/2 Vcc)が波形の中点と正確に一致していないためだ。
dsPIC33FJ256GP506は、40MIPS,Rom:256KByte,Ram:16KByteを積んだ、高性能な64ピンQFPパッケージのdsPICだ。
隣接するVDD−VSS間には変換基板上で0.1μF程度のチップコンデンサを入れたほうが無難です。
64ピンTQFP(0.5mm)パッケージなので、ハンダ付けに自信がある人にしかお勧めはできない
(10倍くらいのルーペを使わないと、ハンダ付けの確認は不可能です)
dsPIC33FJ256GP506を使った簡単な実験ボードを作ってみた。
※実験ではPICKIT2で、「MPLAB IDE(Ver 8.10)」を使って書き込むと「Failed verify」が発生して書き込めません。
PICKIT2付属の「PICKIT2(V2.60)」を使って書き込みをしています。
但し、「MPLAB IDE(Ver 8.53)」を使って書き込むと、PICKIT2、PICKIT3どちらを使っても問題なく書き込みできる
ようです。
サンプル@は7.37MHz、サンプルAは79.23MHz(内部OSCを使った場合の最速値)動作させているもので、サンプルAの
動作速度は40MIPS近くにもなります。
入力に何の保護回路もつけていないので、電源電圧以上の入力を加えると、PICが壊れますので注意が必要です。
D/A Converterの精度を高くするために、安価な双方向バッファ(74HC245AP)を通しています。
このD/A Converterは16Bitsにしてありますが、これはPORTBの値をそのまま出力するためのもので、dsPIC33FJ32GP202の
サンプル同様、無調整で16ビットもの精度(0〜65535)が得られるわけではありません。
また、内部OSCをそのまま使っているので、周波数の精度も1パーセント程度しかありません。
クロックは、79.23MHz動作(40MIPS)動作させています。
このMPUは3.3Vデバイスなので、74HC245を3.3−>5V変換ICの代わりに使っています。
74HC245を使ったのは、秋月電子で5個200円で購入できるからで、双方向性が必要なわけではありません。
このICを使った場合、DIR(1ピン)の電圧を間違えると、入力と出力が逆向きになり、PIC側に5Vが出力されて、PICが
壊れる可能性があります。
また、入力はPICの電源電圧を超えないように注意が必要です。
7SEGMENT表示器の種類にもよりますが、表示が暗いので、制限抵抗の470Ω*8はもう少し小さくしたほうがいいと思います。
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ミリパッケージなので、半田付けに自信がある人にしかお勧めはできない。
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」で使用します。)
中央の写真は、水晶のジャンパースイッチをつないだ時のイメージです。
プログラムは、上記dsPIC33FJ256GP506用とほとんど同じものだ。
サンプル@は7.37MHz、サンプルAは79.23MHz(内部OSCを使った場合の最速値)動作させているもので、サンプルAの
動作速度は40MIPS近くにもなります。
正確な言い方ではありませんが、この値は、例えば18シリーズを40MHzで動作させた場合で10MIPS程度なので、クロックだけでも
速度が4倍になっています。
入力に何の保護回路もつけていないので、電源電圧以上の入力を加えると、PICが壊れますので注意が必要です。
上記、「実験ボード タイプ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に広げてある。
電圧をグラフィックで表示するサンプルを作ってみました。
サンプル@は、1秒毎に電圧測定(0〜10.23V)を行って、現在の電圧を画面右上に数値で表示し、直近の100データ
をグラフで表示します。
「第一章 8ビットPICを使ってみる」 のPIC18F4520で作ったものと同じ機能のものです。
dsPIC33FJ256GP710は、Ramを32KByteも積んでいるので、PIC18F4520バージョンとは異なり、
処理に時間がかかるグラフィックデータのやり取りを、PIC上のメモリーで行なう事で、処理を高速化する事ができます。
サンプルAは、サンプル@のグラフィック処理を高速化したもので、サンプル@のようなスクロール処理の時の画面の
ちらつきがなくなり、サンプル@とは全く違った、きれいで安定した画面の見え方になります。
回路図中の入力にある100KΩと210KΩは、1パーセントの金属皮膜抵抗を使ったほうがいいのですが、
手元になかったので、一般的な5パーセントの炭素皮膜抵抗を合成して、この抵抗値を作り出しています。
また、電源電圧を測定する基準にしているので、精度が高い測定をする場合は、電源電圧(3,3V)の精度を
高くする必要があります(一般的なACアダプタの精度は5パーセント程度しかありません)。
簡単なアクションゲームを作ってみました。
サンプル@、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」関数の中で、配置するブロックの座標を指定します
このジョイスティックは、秋月電子で100円で購入できるものです
超小型スピーカ(直径1cm)を使っているので、耐圧の都合で音量は小さくしてあります。
普通のスピーカをつなぐ場合は、PB3につなぐ回路は、もう少し音が大きくなる回路に
したほうが、迫力がでていいと思います。
ロボット右側の白抜きのマルがロボットが発射する玉で、宇宙人のみを倒します
スタート画面(ステージ番号)を変更できます (サンプル@、A共通)
紹介しています
付録の都合上、ここでは、PIC以外のCPUを使った製作を紹介しています。(内容は、PICと関連がありません。)
WindowsXP上での、Unixの開発を紹介しています。
市販の雑誌や書籍では、TRON系OS(μITRON)や、GNUを使ったCPUの開発記事が、しばしば紹介されて
いますが、このページでは、PIC対応のフリーのコンパイラーの実験を計画しています。ただし、現在、全くの未着手です。
そのほか、AVRのgccについて、基本操作をのせています。
内容は、PICと関係がありません。