※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
●重要なお知らせ●
1.Windows10の対応
2.ADM3202のコンデンサの接続について
第三章 32ビットPIC(PIC32MX)を使ってみる
マイクロチップ社のパンフレットより抜粋
28ピン(32ビット)PIC PIC32MX120F032B/PIC32MX220F032B/PIC32MX250F128Bを使ってみる
PIC32MX120F032B/PIC32MX220F032B/PIC32MX250F128Bのイメージ
マイクロチップ社のデータシートより抜粋
PICKIT3を接続する例
マイクロチップ社のCコンパイラー(MPLAB C32)の変数 ※マイクロチップ社のマニュアルより抜粋
● 実験ボード タイプ1(PIC32MX120F032B)
実験ボードのイメージ/回路図
1.基本プログラム編
(1−a)ルーレットアダプタをつないでみる@
PORTB(0〜7)につないだLEDが回転するプログラムを作ってみた。
写真/回路図
MPLABの画面からConfigを指定する例(内部OSC:8MHz)
プログラムソースサンプル@(MPLAB用 PIC32MX120F032B用 アセンブラ) バージョン
プログラムソースサンプルA(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) バージョン ※内部OSC:8[MHz]
プログラムソースサンプルB(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) バージョン ※高速PLL40MHz、タイマー:1[S]
プログラムソースサンプルC(MPLAB用 PIC32MX120F032B用 Timer仕様 アセンブラ) バージョン
プログラムソースサンプルD(MPLAB用 PIC32MX120F032B用 Timer仕様 C言語(MPLAB C32)) バージョン ※内部OSC:8[MHz]、タイマー:1[S]
プログラムソースサンプルE(MPLAB用 PIC32MX120F032B用 Timer割り込み仕様 アセンブラ) バージョン
プログラムソースサンプルF(MPLAB用 PIC32MX120F032B用 Timer割り込み仕様 C言語(MPLAB C32)) バージョン
プログラムソースサンプルG(MPLAB用 PIC32MX120F032B用 Timer割り込み仕様 C言語(MPLAB C32)) バージョン
(1−b)ルーレットアダプタをつないでみるA
上記のサンプルに、8MHzの水晶をつないで、クロックを内部OSCではなく、外部の水晶にしたものです。
写真/回路図
プログラムソースサンプル@(MPLAB用 PIC32MX120F032B用 Timer割り込み仕様 C言語(MPLAB C32)) バージョン
(2)UARTを使ってみる
パソコンのハイパーターミナルにつないで、簡単なエコーバックプログラムを作ってみた。
写真/回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソースサンプル@(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) ※内部OSC−PLL 40[MHz] バージョン
プログラムソースサンプルA(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) ※内部OSC−PLL 40[MHz]、UART割り込みバージョン
(3)電圧計にしてみる(0〜3.3[V])
A/D Converterモジュールを使って、0〜3.3[V]の電圧計にしてみた。
写真/回路図
ハイパーターミナルのイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) ※内部OSC−PLL 40[MHz] バージョン
(4)D/Aコンバータにしてみる
PIC32MX120F032Bに内蔵されているComparater Voltage Referenceは、これを出力する事もできるので、16Stepの
写真/回路図/オシロスコープによる出力イメージ
プログラムソース@(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) ※外部8MHz水晶 40[MHz] バージョン
(5)周波数カウンターにしてみる
実験で、32ビットタイマー割り込みを使って周波数カウンターにしてみました。
写真/回路図
1MHzのパルスを入力して、ハイパーターミナルに表示したイメージ
ハイパーターミナルの設定
プログラムソース@(MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32)) ※外部8MHz水晶 40[MHz] バージョン
写真/回路図
電源投入時のモードスイッチの設定値と出力周波数
プログラムソース@(MPLAB用 PIC12F1822用 アセンブラ言語(MPLAB/MPASM))
● 実験ボード タイプ2(PIC32MX120F032B)
(1)16ビットD/Aコンバータをつないでみる
16ビットR−2R型のD/Aコンバータをつないでみました。
写真と回路図
実験ボードタイプ2/D・Aコンバータアダプタ
出力イメージ(50Hz/1KHz)
プログラムソースサンプル@ 50HzSIN波 (MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32))
プログラムソースサンプルA 1KHzSIN波 (MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32))
(2)0〜3300[mV]電圧計にしてみる
7SEGMENT LEDをつないで、0〜3.3[V]の電圧計にしてみました。
写真と回路図
アダプタ基板のイメージ
プログラムソースサンプル@ (MPLAB用 PIC32MX120F032B用 C言語(MPLAB C32))
● 実験ボード タイプ3(PIC32MX250F128B/PIC32MX220F032B) ※USB機能
● LAN(イーサネット)につないでみる(ENC28J60 + PIC32MX120F032B)
● 人の声を出力してみる(ATP3011F4 + PIC32MX250F128B)
基板のイメージ
回路図
プログラムソースサンプル@ (MPLAB用 PIC32MX250F128B用 C言語(MPLAB C32))
(1)0〜3300[mV]電圧計にしてみる
AN0(RA0)の電圧を測定して、測定結果を音声(女性の声)で出力するようにしてみました。
写真/回路図
プログラムソースサンプル@ (MPLAB用 PIC32MX250F128B用 C言語(MPLAB C32))
別室、PIC作品のページもよろしく!(続々、バージョンアップ中!!)
上のボタンをクリックすると作品のページに飛びます CPLDのページもよろしく!(いよいよオープン! 続々、バージョンアップ中!!)
プログラマブルに変更ができるハードウエアであるCPLDと、コンピュータであるPICを組み合わせた、簡単な製作を
上のボタンをクリックするとCPLDのページに飛びます 付録(おまけ)のページもよろしく!(続々、バージョンアップ中!!)
技術系雑誌の付録(おまけ)を使った、おまけのページです
上のボタンをクリックすると付録(おまけ)のページに飛びます Cygwinのページもよろしく!(続々、バージョンアップ中!!)
WindowsXP上で動作するUnixであるCygwinのページです。
上のボタンをクリックするとCygwinのページに飛びます AVRのページもよろしく!(続々、バージョンアップ中!!)
AVRを使った製作のページです 。アセンブラ(AVRStudio)、C言語(gcc)、BASIC(BASCOM)のサンプルプログラムを紹介しています。
上のボタンをクリックするとAVRのページに飛びます 動く作品のページもよろしく!(続々、バージョンアップ中!!)
CPUを使った動く工作作品のページです。
上のボタンをクリックすると動く作品のページに飛びます 古いパソコンの活用のページもよろしく!
スペックが古くて廃棄するしかなくなったパソコンを、解体して再利用するページです。
上のボタンをクリックすると古いパソコンのページに飛びます ActiveBASICのページもよろしく!(続々、バージョンアップ中!!)
USBやRS232を使って、PICとつなぐ、Windows/XPパソコンの簡単なアプリケーションを紹介しています。
上のボタンをクリックするとActiveBASICのページに飛びます パソコンのパラレルポート(プリンタポート)で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
Windows/XPパソコンのパラレルポート(プリンタポート)を、パソコンのプログラムで操作した簡単な事例を紹介しています。
上のボタンをクリックするとパラレルポートで遊ぼうのページに飛びます リアルタイムOSで遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
μITRON(TRON系のOS)を使った簡単な事例を紹介しています。
上のボタンをクリックするとリアルタイムOSで遊ぼうのページに飛びます H−8で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
ルネサステクノロジー社の8ビットCPUであるH−8を使った簡単な事例を紹介しています。
上のボタンをクリックするとH−8で遊ぼうのページに飛びます SH−2で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
秋月電子で入手が可能になった、32ビットCPUであるSH−2を使った簡単な事例を紹介しています。
上のボタンをクリックするとSH−2で遊ぼうのページに飛びます 「(別室)MSP430のページ!(続々、バージョンアップ中!!)
MSP430を使った簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)MSP430のページに飛びます 「(別室)M16C/R8Cで遊ぼう 」のページ(続々、バージョンアップ中!!)
M16C/R8Cを使った簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)M16C/R8Cで遊ぼう」のページに飛びます 計算のページもよろしく!(ただいま、準備中!!)
PICやAVRで使う、簡単な微分、積分、代数計算等をまとめています。
上のボタンをクリックすると計算のページに飛びます 「(別室)カーアクセサリーのページ!(続々、バージョンアップ中!!)
カーアクセサリーの簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)カーアクセサリーのページに飛びます 「(別室)ゲームコーナーのページ!(続々、バージョンアップ中!!)
簡単なゲームを紹介しています。
上のボタンをクリックすると「(別室)ゲームコーナーのページに飛びます オーディオのページもよろしく!(続々、バージョンアップ中!!)
楽器やステレオアンプ等のオーディオ機器を、簡単に自作してみようというコーナーです。
上のボタンをクリックするとオーディオのページに飛びます レトロのページもよろしく!(続々、バージョンアップ中!!)
今では懐かしいマイコンを使わない製作のページです。
上のボタンをクリックするとレトロのページに飛びます 携帯電話で遊ぼうのページもよろしく!
携帯電話の簡単なアクセサリーを紹介しています。
上のボタンをクリックすると携帯電話で遊ぼうのページに飛びます STM8Sマイコンで遊ぼうのページもよろしく!
STM8Sマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとSTM8Sマイコンのページに飛びます ARMマイコンで遊ぼうのページもよろしく!
ARMマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとARMマイコンのページに飛びます ジャンクボードで遊ぼうのページもよろしく!
仕様不明のジャンクボードを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとジャンクボードで遊ぼうのページに飛びます メニューのページ
ページが増えたので、派手なメニュー画面を作りました。
上のボタンをクリックするとメニューに飛びます
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)のようにしたほうがいいと思います。
高性能な32ビットPIC(PIC32MX)を使ってみようというコーナーです。
PIC32MXには、ARMと並び、世界的に普及しているMIPSコア(MIPS32)が使用されており、PICの分野に限らず、
これから本格的にアセンブラでMIPSコアを使おうというユーザーにも最適だと思います。
MIPSコアは、RISCプロセッサを代表するもので、デジタル家電から通信、その他ゲーム機まで幅広い用途で本格的に
使われていて、多くの半導体メーカーが採用しているアーキテクチャーの一つなので、資料も豊富です。
開発に必要なアセンブラ等のマニュアルは、
「MIPS TECHNOLOGIES 社」のHPより無償でダウンロードできます。
マイクロチップ社が紹介しているマニュアル「MIPS32 Architecture for Programmers Volume II: The MIPS32 Instruction
Set」は、アセンブラで開発する場合は、このHPからダウンロードしておいた方がいいと思います。
(簡単なユーザー登録は必要です。)
MIPS命令セットは、従来のPICとはかなり異なっています。
時間のかかるメモリーとのアクセスは、ロード、ストア命令でのみ行ない、それ以外の命令は31本の汎用レジスタ間で行なう
ようになっています。(これらのレジスタの中には特徴のあるレジスタがあるので、全てが自由に使用できるわけではありません)
分岐命令を行なう場合は、NOP等が必要になる場合があります。
その他、いろいろ特徴のある命令セットですが、C言語だけで開発すると、その特徴は分かりにくいので、アセンブラで開発して
みる事をお勧めします。
なお、PIC32MXは、32ビットの高性能なCPUですが、1ステップ1クロックで動作するので、クロック数だけで比較しても、
同一クロックでは、8ビット系PICや16ビットPICに比べて、処理速度が2〜4倍になります。
●PIC32MXの秋月電子での取り扱い H24.6現在
PIC32MX250F128B−I/SP プログラムメモリ:128KB/SRAM:32KB USB 360円
PIC32MX230F064B−I/SP プログラムメモリ: 64KB/SRAM:16KB USB 320円
PIC32MX220F032B−I/SP プログラムメモリ: 32KB/SRAM: 8KB USB 220円
PIC32MX210F032B−I/SP プログラムメモリ: 16KB/SRAM: 4KB USB 200円
PIC32MX120F032B−I/SP プログラムメモリ: 32KB/SRAM: 8KB 200円
PIC32MX110F032B−I/SP プログラムメモリ: 16KB/SRAM: 4KB 190円
PIC32MX120F032Bは、32ビットの高性能なCPUでありながら、形状が28ピンDIP型と扱いやすく、また、ピン配列が
第二章や第三章で扱っている16ビット系PIC(PIC24FJ64GA002やdsPIC33FJ32GP202等)と同じである事から、そのまま
差し替えが可能な、大変使いやすいマイコンです。
PIC32MX220F032Bは、PORTBの一部がUSBで取られているため、ポートをフルに使う用途ではPIC32MX120F032Bの方が
使いやすいかと思いますが、USBを使う用途は多いと思われるので、そういう用途では便利なマイコンだと思います。
このマイコンは、電源電圧が2.3V〜3.6Vなので注意が必要です。
第二章で使用した16ビット系PICの実験ボードを、そのまま使用して実験ボードにしてみました。
ISCP用のアダプタも、16ビットPIC用に作成したものが、そのまま使用できます。
サンプル@、C、Eは、アセンブラプログラムで、C32を使ってそのままコンパイルできます(コンパイラが拡張子Sのファイルを
アセンブラと認識します)。
プリプロセッサを使っているので、ファイル名の拡張子は大文字の「.S」にします。
アセンブラバージョンのみ、Configは、MPLABの「Configure」=>「Configuration Bits」で指定します。
(アセンブラソース中のConfigは、デバイスに反映されていません。設定方法は、下記の図を参照の事)。
C言語バージョンのConfigは、プログラム中のConfigワードで設定しているので、MPLABでは指定しないで下さい。
サンプル@は、LEDの表示位置をRAM領域に置いていますが、これはRAMをアクセスするサンプルにするためです。
Eの割り込みバージョンは、タイマーの周期が2秒になっています(Cは1秒です)。
MIPSコアのコマンドは、全てが1クロックで動作完了できるわけではないので、コマンド発行の後に、NOP等が必要になる種類の
コマンドがあります(サンプルソースでは、「bne」「mult」等のコマンドが該当します)。
サンプルFは、TIMER2割り込みバージョンですが、PIC32MXで割り込みを発生させる場合、アセンブラにより’EI’コマンド
(enable interrupts)を発行するか、C32の「INTEnableInterrupts」関数等で割り込みをイネーブルにしてやる必要があるので、
注意が必要です。※詳しくは、サンプルFのプログラムソースを参照してください。
サンプルGは、TIMER2割り込みを32ビットモードでかけているものですが、このモードではTIMER2、3をペアで使うため、
コントロールはTIMER2で行い、PRレジスタはTIMER2,3で指定し、割り込みはTIMER3で行なう必要があります。
この仕様は16ビットPICでも同じです。
※内部OSC PLL:40[MHz]、タイマー割り込み:1[S]
※内部OSC PLL:40[MHz]、タイマー割り込み:1[S] 32ビットタイマーモード
サンプル@は、1秒毎にLEDが動くもので、上記サンプルGのプログラムのコンフィグワードを変更したものです。
クロックは、PLLで40MHzになっています。
使用した水晶は、プラスッチック製で、変な形状をしていますが、安価な8MHz・表面実装タイプのものです。
(普通の水晶と同じです)
※外部8MHz水晶 PLL:40[MHz]、タイマー割り込み:1[S] 32ビットタイマーモード
サンプルAは、サンプル@の受信割り込みバージョンですが、PIC32MXで割り込みを発生させる場合、アセンブラにより’EI’
コマンド(enable interrupts)を発行するか、C32の「INTEnableInterrupts」関数等で割り込みをイネーブルにしてやる必要があるので、
注意が必要です。 ※詳しくは、サンプルAを参照してください。
結果はパソコンのハイパーターミナルに表示する。
実験で簡単な保護回路しか付けていないので、入力が電源電圧を越えるとPICが壊れるので、注意が必要だ。
D/Aコンバータにする事もできます。
サンプル@は、8MHzの水晶と、OP−AMPによるボルテージフォロアをつないで、50HzのSIN波を出力するものです。
PIC32MXは高速で、32ビットカウント(0〜4、294、967、295)出来るので、ソフトウエアによる簡単なカウンターだけでも
数MHz程度の周波数カウンターを作る事ができます。
サンプル@は、測定精度を上げるため、1MHzのパルスを入力しながら実測し、タイマー2、3のPR2,PR3に補正をかけたものですが、
この部分は、コンパイラーの種類やバージョンに左右されるため、測定精度を高くするなら、PR2,PR3の補正が個々に必要になります。
このサンプルは、簡単な保護回路しか付けていないので、入力は電源電圧を越えてはいけません。
時々、誤った値を表示する事がありますが、このサンプルは、実験レベルのものです。
●このような実験に使うテストパルスは、メーカー製のファンクションジェネレータで発生させても、クリスタルオシレータを使っても
いいと思うのですが、3.3V用のクリスタルオシレータは、5V用のものほど入手しやすくはないと思うので、
12F1822を使って簡単な分周プログラムを作っておくと、3.3V、5V兼用のクリスタルオシレータとして使えて、便利だと思います。
サンプルは、電源投入時のS1、S2の組み合わせで、1MHz、100KHz、10KHz、1KHzを出力するもので、単なる分周プログラム
です。
このようなプログラムはアセンブラで作る必要があります。
回路図中の10KΩ*2のプルアップ抵抗は、基板中央にある黒いチップ抵抗です。
0.1μFのコンデンサもチップです。
○:スイッチを閉じる、 ×:スイッチを開く
16ビットのアダプタをつなぐため、ボードを作ってみました。
7SEGMENT LEDや、ドットマトリックス表示器等をつなぐためのものです。
回路は上記の「実験ボード タイプ1」とほぼ同じです。
「第二章 16ビットPICを使ってみる」で作ったアダプタをつないだものです。
ポートの出力をそのままD/A出力するために16ビットにしてありますが、無調整で16ビットもの精度があるわけではありません。
サンプル@は50Hz、サンプルAは1KHzのSIN波を発生するもので、200分割した滑らかなSIN波を出力します。
かんたんなサンプルで、高精度なプログラムにはしていませんが、周波数の精度は1パーセント以上はあるようです。
※8MHz水晶−PLL 40[MHz]バージョン
※8MHz水晶−PLL 40[MHz]バージョン
このMPUは3.3Vデバイスなので、74HC245を3.3−>5V変換ICの代わりに使っています。
74HC245を使ったのは、秋月電子で5個200円で購入できるからで、双方向性が必要なわけではありません。
このICを使った場合、DIR(1ピン)の電圧を間違えると、入力と出力が逆向きになり、PIC側に5Vが出力されて、PICが
壊れる可能性があります。
また、入力はPICの電源電圧を超えないように注意が必要です。
7SEGMENT表示器の種類にもよりますが、表示が暗いので、制限抵抗の470Ω*8はもう少し小さくしたほうがいいと思います。
ただし、制限抵抗を小さくした場合は、2SC1815のIcに注意するか、Icがもっと大きなトランジスタに変更する必要があります。
※8MHz水晶−PLL 40[MHz]バージョン
LANコントローラ(ENC28J60)を使って、LANにつなぐ事例です。
※この記事は、
「(別室)インターフェースのページ」のページ
にあります。
音声合成LSI(ATP3011)を使って、人間の声をしゃべるプログラムを作ってみました。
使用した音声合成LSI(ATP3011F4−PU)は、秋月電子で850円で購入できるもので、このLSIは
「かわいい系の女性」の声ですが、秋月電子では、他に男性の声や、ロボットの声などのLSIも販売しています。
UARTやI2Cでローマ字データを入力するだけで使用できるLSIなので、PIC32MX250F128Bのような高性能な
マイコンを使わなくても、8ピンPIC(PIC12Fxxx)でも十分使えるLSIなのですが、
32ビットPICを使ったのは、簡単なAIを作って、AIの出力として使う事を想定しているからです。
AIについては、この章でサンプルプログラムを紹介する予定です。
電源が3.3Vなので、オーディオアンプに、秋月電子で安価で購入できるTA7368Pを使っていますが、
5V系PICを使えば、最も一般的なLM386のようなICを使用する事もできます。
サンプル@は、稼動確認のために作った簡単なプログラムで、電源を入れるとチャイム音がして、
「おはようございます」、「こんにちは」、「こんばんわ」と女性の声を出力します。
但し、実際には、「かわいい系の女性の声」というより、子供の声に近い感じの声ですが。
PIC32MX250F128B用ですが、PIC32MX120F032Bでも差し替えて使用できるようにしてあります
何の保護回路も付けていないので、入力電圧は0V〜電源電圧を超えない範囲で入力する必要があります。
紹介しています
付録の都合上、ここでは、PIC以外のCPUを使った製作を紹介しています。(内容は、PICと関連がありません。)
WindowsXP上での、Unixの開発を紹介しています。
市販の雑誌や書籍では、TRON系OS(μITRON)や、GNUを使ったCPUの開発記事が、しばしば紹介されて
いますが、このページでは、PIC対応のフリーのコンパイラーの実験を計画しています。ただし、現在、全くの未着手です。
そのほか、AVRのgccについて、基本操作をのせています。
内容は、PICと関係がありません。
目標は、自分の意識を持った巨大ロボットを作る事です。
現在は、無償の開発ツールを使った知識データベースの実験を紹介しています。
このページでは、無償で使用でき、しかも機能的にも優れている、ActiveBASICを使った事例を紹介しています。
このページは、パソコンで、直接、外付けのハードウエアを動かすもので、組み込み型CPUとは関係がありません。
TRON系のOSは、組み込み型システムにおいては、広く普及しているものです。
知識ベースや、加速度センサーを使うために準備しているもので、内容は初心者レベルです。
真空管、トランジスタ、ロジックICによる製作を予定しています。
これであきずに、次章もよろしく。。。。。。
●問い合わせ先(代表者) BYP03364@nifty.ne.jp
※ウイルス感染防止のため、容量の大きなもの、添付ファイルのあるもの、テキスト形式以外のメールは
全て削除されます。
また、個々の質問については、お答えできません。
●このページは、自由にリンクしてください。