PICから始めよう、遊ぼう、楽しもう、PICキットの構築
CPUモジュール製作編
PICキットとは何だ・・・
PIC用ライタの事ではありません。
当局が小学生の頃、「エレキット」なる、部品単体をプラ板に張り付けたモジュール方式で、それを付属のコードでモジュール間を接続し各種回路が出来上がると言った代物がありました。
ゲルマニウムトランジスタや抵抗、コンデンサ、クリスタルマイクやイヤホン、バリコン、コイル等があったと記憶していますが、
部品数は少なかったと思います。
何とそれを親にねだって買ってもらう事に成功しました・・・
その中で、ラジオを組み立てても、まったく聞こえなかった記憶があります・・・
今考えれば、キットのラジオは感度が悪く、さらに当地の電界強度が弱いのが原因と思いますが。
もちろん当局内で現存していません・・・ (-_-;) ザンネン
さて、その「エレキット」と同じ事をやってみようと思い立ち・・・と言うのは大ウソで、
PIC実験回路をブレッドボードで毎回シコシコと同じ基本配線を組むのは、もう飽きた。
部品が散らかるし、結線が不安定だし、そもそも使い勝手が悪く面倒くさ
ならば、最初から基本配線を行った、PICが交換可能な実験用基板があれば、楽ちんだろうと言う、
極めてぐうたらな考えで各種基本モジュール基板を作ってみたら・・・これがなかなか便利でやめられません
ハタと気が付くと、子供の頃の「エレキット」と何か同じ感じじゃん・・・っと気が付いたのでした。
それをここにまとめただけです・・・ Hi
まだモジュールの種類が少ないですが、今後徐々に増やしていきたいと思います。
未熟ながらも、必要に応じてドライバ的ルーチンも用意していきます。
PIC別の基本プログラム構成はアッセンブラ・ソースファイルです。
これは、CPU別インクルード、コンフィグレーション、基本変数定義(BANK0)、ウエイト等、および基本的内部モジュール設定、
INT、INIT、MAIN等の骨格的節目のラベル定義です。
それに必要に応じて各種モジュールの制御ルーチンを付け加えて行く形です。
メインルーチンは、その場その時に、各モジュール用ルーチンを呼び出します。
呼び出すモジュール用ルーチンは、引数および戻り値が存在し、C言語の関数的な使用方法(CALL命令ですが)をイメージしてます。
それらを機能的に配置する事により、結果として、1つのプログラムが出来上がります。
え? 最初からXC8でやれって?・・・ それは使用する人のお好みでと言う事で・・・
当局は8ビットCPUでのシンプルなアッセンブラが好きなもので・・・ m(__)m
さて、ハードウエアもソフトウエア同様、機能的に接続していく構成としていきます。
その様にしてPICマイコンを弄って遊んでいる内に・・・自在に、どっぷりPICにのめり込みます・・・
PicKit3がちょっと高価ですが、開発用PCはその辺に捨てられているXPマシンで十分、(注1)
基板やPIC本体は秋月電子で揃えれば、安価に済みます。
これで、十分楽しめるし、ボケ防止に効果的といいことづくめです・・・ (^_^;)
もちろん当局もそのコンセプト?で行っています。
注1)
ただし、ハードディスクは消耗品です。プロジェクトファイルは、今やただ同然のUSBメモリ等にバックアップしよう
PIC用ライタの事ではありません。
当局が小学生の頃、「エレキット」なる、部品単体をプラ板に張り付けたモジュール方式で、それを付属のコードでモジュール間を接続し各種回路が出来上がると言った代物がありました。
ゲルマニウムトランジスタや抵抗、コンデンサ、クリスタルマイクやイヤホン、バリコン、コイル等があったと記憶していますが、
部品数は少なかったと思います。
何とそれを親にねだって買ってもらう事に成功しました・・・
その中で、ラジオを組み立てても、まったく聞こえなかった記憶があります・・・
今考えれば、キットのラジオは感度が悪く、さらに当地の電界強度が弱いのが原因と思いますが。
もちろん当局内で現存していません・・・ (-_-;) ザンネン
さて、その「エレキット」と同じ事をやってみようと思い立ち・・・と言うのは大ウソで、
PIC実験回路をブレッドボードで毎回シコシコと同じ基本配線を組むのは、もう飽きた。
部品が散らかるし、結線が不安定だし、そもそも使い勝手が悪く面倒くさ
ならば、最初から基本配線を行った、PICが交換可能な実験用基板があれば、楽ちんだろうと言う、
極めてぐうたらな考えで各種基本モジュール基板を作ってみたら・・・これがなかなか便利でやめられません
ハタと気が付くと、子供の頃の「エレキット」と何か同じ感じじゃん・・・っと気が付いたのでした。
それをここにまとめただけです・・・ Hi
まだモジュールの種類が少ないですが、今後徐々に増やしていきたいと思います。
未熟ながらも、必要に応じてドライバ的ルーチンも用意していきます。
PIC別の基本プログラム構成はアッセンブラ・ソースファイルです。
これは、CPU別インクルード、コンフィグレーション、基本変数定義(BANK0)、ウエイト等、および基本的内部モジュール設定、
INT、INIT、MAIN等の骨格的節目のラベル定義です。
それに必要に応じて各種モジュールの制御ルーチンを付け加えて行く形です。
メインルーチンは、その場その時に、各モジュール用ルーチンを呼び出します。
呼び出すモジュール用ルーチンは、引数および戻り値が存在し、C言語の関数的な使用方法(CALL命令ですが)をイメージしてます。
それらを機能的に配置する事により、結果として、1つのプログラムが出来上がります。
え? 最初からXC8でやれって?・・・ それは使用する人のお好みでと言う事で・・・
当局は8ビットCPUでのシンプルなアッセンブラが好きなもので・・・ m(__)m
さて、ハードウエアもソフトウエア同様、機能的に接続していく構成としていきます。
その様にしてPICマイコンを弄って遊んでいる内に・・・自在に、どっぷりPICにのめり込みます・・・
PicKit3がちょっと高価ですが、開発用PCはその辺に捨てられているXPマシンで十分、(注1)
基板やPIC本体は秋月電子で揃えれば、安価に済みます。
これで、十分楽しめるし、ボケ防止に効果的といいことづくめです・・・ (^_^;)
もちろん当局もそのコンセプト?で行っています。
注1)
ただし、ハードディスクは消耗品です。プロジェクトファイルは、今やただ同然のUSBメモリ等にバックアップしよう
NO-001 14ピンPIC16F用 CPUモジュール
これは大概の8ピン、14ピンPICが使用できますが、ピン配置には注意して下さい。
すべての8・14ピンPICが使用できる訳ではありません。
基本的には、16F1705、16F1823等、PIC F1シリーズで
秋月電子で安価で入手できる、14ピン8ビットマイコンを想定しています。
もちろん、16F688等、旧PICも使用できます。
14ピンでも最大11ピンのI/Oが取れますし、RBポートと同じ状態変化割り込みも、
RAポートでとりあえず使用できます。
また、秋月のD基板にCPUが乗ってしまうのが良いですね。
サブルーチン・ライブラリの実験・開発には持って来いの基板です。
もちろん、「初めてのPICF1シリーズ」にもピッタリです。
このモジュール基板で、Pickit3を接続しての書込み、オンボードデバッグ等
MPLAB'X IDEと共に、どっぷりハマる事間違い無し・・・ (^_^;)
回路構成
RA0-2、RA4-5、RC0-5のすべてをそのまま入出力用ピンに接続
RA3は10KΩでプルアップ
電源入出力3ポート
ICSPポート
I/Oポート11ピン
INPUTポート(RA3)1ピン
以上の超簡単な構成で、安価に製作できます。
使用部品
秋月電子 D基板、ブレッドボード配列(普通配列でも可)
ピンヘッダ
14ピン丸穴ソケット
0.1uF積層セラミックコンデンサ2個
電解コンデンサ 220uF
10KΩ抵抗1個
以上、当局はすべて秋月電子で揃えています。
これは大概の8ピン、14ピンPICが使用できますが、ピン配置には注意して下さい。
すべての8・14ピンPICが使用できる訳ではありません。
基本的には、16F1705、16F1823等、PIC F1シリーズで
秋月電子で安価で入手できる、14ピン8ビットマイコンを想定しています。
もちろん、16F688等、旧PICも使用できます。
14ピンでも最大11ピンのI/Oが取れますし、RBポートと同じ状態変化割り込みも、
RAポートでとりあえず使用できます。
また、秋月のD基板にCPUが乗ってしまうのが良いですね。
サブルーチン・ライブラリの実験・開発には持って来いの基板です。
もちろん、「初めてのPICF1シリーズ」にもピッタリです。
このモジュール基板で、Pickit3を接続しての書込み、オンボードデバッグ等
MPLAB'X IDEと共に、どっぷりハマる事間違い無し・・・ (^_^;)
回路構成
RA0-2、RA4-5、RC0-5のすべてをそのまま入出力用ピンに接続
RA3は10KΩでプルアップ
電源入出力3ポート
ICSPポート
I/Oポート11ピン
INPUTポート(RA3)1ピン
以上の超簡単な構成で、安価に製作できます。
使用部品
秋月電子 D基板、ブレッドボード配列(普通配列でも可)
ピンヘッダ
14ピン丸穴ソケット
0.1uF積層セラミックコンデンサ2個
電解コンデンサ 220uF
10KΩ抵抗1個
以上、当局はすべて秋月電子で揃えています。
NO-002 PIC20ピン用 CPUモジュール
これは大概の8ピン、14ピン、20ピンPICが使用できますが、
すべての8・14・20ピンPICが使用できる訳ではありません。
因みに18ピンPICは使用不可です。
基本的には、16F1828、16F1829等、PICF1シリーズで
秋月電子で安価で入手できる、20ピン8ビットマイコンを想定しています。
もちろん、16F690等、旧20ピンPICも使用できます。
20ピンでは最大18ピンのI/Oが取れますし、RBポートの一部もあり、
応用範囲がぐっとひろがり、大概の電子工作用途に対応できます。
回路構成(14ピンとほぼ同じ、I/Oピンが増えただけ)
RA0-2、RA4-5、RC0-7、RB4-7のすべてをそのまま入出力用ピンに接続
RA3は10KΩでプルアップ
電源入出力3ポート
ICSPポート
I/Oポート17ピン
INPUTポート(RA3)1ピン
以上の超簡単な構成で、安価に製作できます。
使用部品は14ピン用とほぼ同じです。
ソケットは少々高くても、必ず丸ピンを使用して下さい。
これは大概の8ピン、14ピン、20ピンPICが使用できますが、
すべての8・14・20ピンPICが使用できる訳ではありません。
因みに18ピンPICは使用不可です。
基本的には、16F1828、16F1829等、PICF1シリーズで
秋月電子で安価で入手できる、20ピン8ビットマイコンを想定しています。
もちろん、16F690等、旧20ピンPICも使用できます。
20ピンでは最大18ピンのI/Oが取れますし、RBポートの一部もあり、
応用範囲がぐっとひろがり、大概の電子工作用途に対応できます。
回路構成(14ピンとほぼ同じ、I/Oピンが増えただけ)
RA0-2、RA4-5、RC0-7、RB4-7のすべてをそのまま入出力用ピンに接続
RA3は10KΩでプルアップ
電源入出力3ポート
ICSPポート
I/Oポート17ピン
INPUTポート(RA3)1ピン
以上の超簡単な構成で、安価に製作できます。
使用部品は14ピン用とほぼ同じです。
ソケットは少々高くても、必ず丸ピンを使用して下さい。
使用ツール
MPLABX’ IDE (PCのソフトウエア)
MPLABX’ IPE (PCのソフトウエア)
PicKit3 プログラマ(ハードウエアです)
IPEは無くても可能だが、使い分けると便利
当局は、IDE+エミュレータ(メインPC)
IPE+PicKit3(サブPC側で書き込み)
これが基本パターン
場合によっては、
IDE+PicKit3(サブPC側)で、
書込みして、オンボードデバッグ
この場合、RA0,1,3の使用を避ける
注意
最近のMPLABXIDEのソースファイル
メモ帳では見られなくなりました。
PIC16F1705用
アッセンブラ基本プログラム
ディスプレイ「DFR0090」版
PIC16F1705 BASICソースファイル
16F1705_BASIC_DFR90_01.asm
PIC16F1709用
アッセンブラ基本プログラム
ディスプレイ「DFR0090」版
PIC16F1709 BASICソースファイル
16F1709_BASIC_DFR90_01.asm
MPLABX’ IDE (PCのソフトウエア)
MPLABX’ IPE (PCのソフトウエア)
PicKit3 プログラマ(ハードウエアです)
IPEは無くても可能だが、使い分けると便利
当局は、IDE+エミュレータ(メインPC)
IPE+PicKit3(サブPC側で書き込み)
これが基本パターン
場合によっては、
IDE+PicKit3(サブPC側)で、
書込みして、オンボードデバッグ
この場合、RA0,1,3の使用を避ける
注意
最近のMPLABXIDEのソースファイル
メモ帳では見られなくなりました。
PIC16F1705用
アッセンブラ基本プログラム
ディスプレイ「DFR0090」版
PIC16F1705 BASICソースファイル
16F1705_BASIC_DFR90_01.asm
PIC16F1709用
アッセンブラ基本プログラム
ディスプレイ「DFR0090」版
PIC16F1709 BASICソースファイル
16F1709_BASIC_DFR90_01.asm
基本プログラム
CPU別に用意しており、当局が過去に作成したプログラムの基本形を使います。
詳細はソースファイルを見て下さい
構成
(1)CPU定義
2行で済みますが、これが無いとアッセンブルしません。
(2)コンフィグレーション定義
1)システムクロック内部発振指定
イニシャル時に周波数設定、4xPLL使用で、最高32MHZ
2)システムクロックX’TAL発振指定
8MHZのX’TALを使用する事を想定、
イニシャル時に4xPLL使用で32MHZとなる
(3)基本変数定義、
とりあえず勝手に定義していますが、自由に変更して下さい
演算やウエイトで使用している、必須のものもあります
(4)ウエイトルーチン
必ず必要になるので、基本プログラム末項付近に置いてあります。
FOSC=32MHZ、8MHZの2種を用意、コピペで取り替えて使用します。
8MHZ用は、「END」命令の後に存在します。
BANK0で使用する必要があります
(5)演算ルーチン
ちょくちょく使用しますので、とりあえずおいてあります。
引数と戻り値があります。
1)16bit加算ルーチン 「ADD16B」
hex(0-1)=hex(0-1)+hexw(0-1)
a)引数
hex0 加算される数下位8bit
hex1 加算される数上位8bit
hexw0 加算する数下位8bit
hexw1 加算する数上位8bit
b)戻り値
hex0 結果下位8bit
hex1 結果上位8bit
c)結果フラグ
オーバーフローしても何もしません
e)呼び出し方法
CALL ADD16B
2)16bit減算ルーチン 「SUB16B」
hex(0-1)=hex(0-1)-hexw(0-1)
a)引数
hex0 引かれる数下位8bit
hex1 引かれる数上位8bit
hexw0 引く数下位8bit
hexw1 引く数上位8bit
b)戻り値
hex0 結果下位8bit
hex1 結果上位8bit
c)結果フラグ
正常終了の時、Wreg=0
異常終了の時、Wreg=1 ボロー発生の時で、戻り値は不確定値となります
e)呼び出し方法
CALL SUB16B
3)32bit加算ルーチン 「ADD32B」
hex(0-3)=hex(0-3)+hexw(0-3)
a)引数
hex(0-3) 加算される数32bit
hexw(0-3) 加算する数32bit
b)戻り値
hex(0-3) 結果32bit
c)フラグ
オーバーフローしても何もしません
e)呼び出し方法
CALL ADD32B
4)32bit減算ルーチン 「SUB32B」
hex(0-3)=hex(0-3)-hexw(0-3)
a)引数
hex(0-3) 引かれる数32bit
hexw(0-3) 引く数32bit
b)戻り値
hex(0-3) 結果32bit
c)結果フラグ
正常終了の時、Wreg=0
異常終了の時、Wreg=1 ボロー発生の時で、戻り値は不確定値となります
e)呼び出し方法
CALL SUB32B
5)32bitBCD変換ルーチン 「BCD」
a)引数
hex(0-3)32bit
b)戻り値
digit12 下位4bit=BCD1桁目、上位4bit=BCD2桁目
digit34 下位4bit=BCD3桁目、上位4bit=BCD4桁目
digit56 下位4bit=BCD5桁目、上位4bit=BCD6桁目
digit78 下位4bit=BCD7桁目、上位4bit=BCD8桁目
digit9A 下位4bit=BCD9桁目、上位4bit=BCD10桁目
以上の40bit
(6)基本表示ルーチン
これが無いと不便です
1)8桁7セグLEDモジュール用送信データ生成ルーチン
MAX2719用(aitendo M7SEGX8R-7219)
a)引数
digit12 ~ digit78までの4bit×8の32bitBCD
digit12の場合、下位4bitが1桁目のBCD、上位4bitが2桁目のBCD
FLG:表示指令バイト
bit0-2
001 2桁表示
011 4桁表示
101 6桁表示
111 8桁表示
bit3 0 ゼロブランキングしない
1 ゼロブランキングする
bit4-6 000 ドット表示しない
001 2,5桁にドット表示
010 3,6桁にドット表示
100 4,7桁にドット表示
bit7 エラーフラグ等、自由に使用
b)戻り値
DBUF0~DBUF7
c)結果フラグ
無
e)呼び出し方法
CALL SETBUF
2)8桁7セグLEDモジュール送信ルーチン(aitendo M7SEGX8R-7219)
MAX2719使用8桁7セグLED ディスプレイドライバ
a)引数
DBUF0~DBUF7(MAX2719用(aitendo M7SEGX8R-7219)の送信データ)
b)戻り値
無
c)結果フラグ
無
e)呼び出し方法
CALL PUTL
CPU別に用意しており、当局が過去に作成したプログラムの基本形を使います。
詳細はソースファイルを見て下さい
構成
(1)CPU定義
2行で済みますが、これが無いとアッセンブルしません。
(2)コンフィグレーション定義
1)システムクロック内部発振指定
イニシャル時に周波数設定、4xPLL使用で、最高32MHZ
2)システムクロックX’TAL発振指定
8MHZのX’TALを使用する事を想定、
イニシャル時に4xPLL使用で32MHZとなる
(3)基本変数定義、
とりあえず勝手に定義していますが、自由に変更して下さい
演算やウエイトで使用している、必須のものもあります
(4)ウエイトルーチン
必ず必要になるので、基本プログラム末項付近に置いてあります。
FOSC=32MHZ、8MHZの2種を用意、コピペで取り替えて使用します。
8MHZ用は、「END」命令の後に存在します。
BANK0で使用する必要があります
(5)演算ルーチン
ちょくちょく使用しますので、とりあえずおいてあります。
引数と戻り値があります。
1)16bit加算ルーチン 「ADD16B」
hex(0-1)=hex(0-1)+hexw(0-1)
a)引数
hex0 加算される数下位8bit
hex1 加算される数上位8bit
hexw0 加算する数下位8bit
hexw1 加算する数上位8bit
b)戻り値
hex0 結果下位8bit
hex1 結果上位8bit
c)結果フラグ
オーバーフローしても何もしません
e)呼び出し方法
CALL ADD16B
2)16bit減算ルーチン 「SUB16B」
hex(0-1)=hex(0-1)-hexw(0-1)
a)引数
hex0 引かれる数下位8bit
hex1 引かれる数上位8bit
hexw0 引く数下位8bit
hexw1 引く数上位8bit
b)戻り値
hex0 結果下位8bit
hex1 結果上位8bit
c)結果フラグ
正常終了の時、Wreg=0
異常終了の時、Wreg=1 ボロー発生の時で、戻り値は不確定値となります
e)呼び出し方法
CALL SUB16B
3)32bit加算ルーチン 「ADD32B」
hex(0-3)=hex(0-3)+hexw(0-3)
a)引数
hex(0-3) 加算される数32bit
hexw(0-3) 加算する数32bit
b)戻り値
hex(0-3) 結果32bit
c)フラグ
オーバーフローしても何もしません
e)呼び出し方法
CALL ADD32B
4)32bit減算ルーチン 「SUB32B」
hex(0-3)=hex(0-3)-hexw(0-3)
a)引数
hex(0-3) 引かれる数32bit
hexw(0-3) 引く数32bit
b)戻り値
hex(0-3) 結果32bit
c)結果フラグ
正常終了の時、Wreg=0
異常終了の時、Wreg=1 ボロー発生の時で、戻り値は不確定値となります
e)呼び出し方法
CALL SUB32B
5)32bitBCD変換ルーチン 「BCD」
a)引数
hex(0-3)32bit
b)戻り値
digit12 下位4bit=BCD1桁目、上位4bit=BCD2桁目
digit34 下位4bit=BCD3桁目、上位4bit=BCD4桁目
digit56 下位4bit=BCD5桁目、上位4bit=BCD6桁目
digit78 下位4bit=BCD7桁目、上位4bit=BCD8桁目
digit9A 下位4bit=BCD9桁目、上位4bit=BCD10桁目
以上の40bit
(6)基本表示ルーチン
これが無いと不便です
1)8桁7セグLEDモジュール用送信データ生成ルーチン
MAX2719用(aitendo M7SEGX8R-7219)
a)引数
digit12 ~ digit78までの4bit×8の32bitBCD
digit12の場合、下位4bitが1桁目のBCD、上位4bitが2桁目のBCD
FLG:表示指令バイト
bit0-2
001 2桁表示
011 4桁表示
101 6桁表示
111 8桁表示
bit3 0 ゼロブランキングしない
1 ゼロブランキングする
bit4-6 000 ドット表示しない
001 2,5桁にドット表示
010 3,6桁にドット表示
100 4,7桁にドット表示
bit7 エラーフラグ等、自由に使用
b)戻り値
DBUF0~DBUF7
c)結果フラグ
無
e)呼び出し方法
CALL SETBUF
2)8桁7セグLEDモジュール送信ルーチン(aitendo M7SEGX8R-7219)
MAX2719使用8桁7セグLED ディスプレイドライバ
a)引数
DBUF0~DBUF7(MAX2719用(aitendo M7SEGX8R-7219)の送信データ)
b)戻り値
無
c)結果フラグ
無
e)呼び出し方法
CALL PUTL
過去のプログラム保存場所(お墓)
Aitendo 「K-M7S8D2719」対象
PIC16F1823用基本プログラム
PIC16F1823BASIC 01 ソースファイル
16f1823_basic01.asm
PIC16F1705用基本プログラム
PIC16F1705BASIC 01 ソースファイル
16f1705_basic01.asm
PIC16F1828用基本プログラム
PIC16F1828BASIC 01 ソースファイル
16f1828_basic01.asm
Aitendo 「K-M7S8D2719」対象
PIC16F1823用基本プログラム
PIC16F1823BASIC 01 ソースファイル
16f1823_basic01.asm
PIC16F1705用基本プログラム
PIC16F1705BASIC 01 ソースファイル
16f1705_basic01.asm
PIC16F1828用基本プログラム
PIC16F1828BASIC 01 ソースファイル
16f1828_basic01.asm
追記 2017年09月
現在AitendoのHPには2種類表示があります。
①K-M7S8D7219
ここで対象としている完成品モジュールです。
②M7SEGX8R-7219
SOPのMAX2719をはんだ付けする組立キット形式です
これは7セグLEDが大きくて、さらに見易いです
しばらく部品箱に転がっていた②を組み立ててみた所・・・
①用のプログラムでは、②は正常動作しない事が判明しました
両者はソフトウエア完全互換品では無い様です
最大の問題点は、どちらも在庫切れのまま放置されています。 (-_-メ)
これでは「PICキット」の標準モジュールとしては不適格です。
追記 2018年03月
ここで対象とする8桁7セグLEDモジュールを変更とします <m(__)m>
秋月電子で販売されている「DFR0090」としました。
今までのBASICプログラムは過去物として扱います
順次プログラムを対応していきます。
現在AitendoのHPには2種類表示があります。
①K-M7S8D7219
ここで対象としている完成品モジュールです。
②M7SEGX8R-7219
SOPのMAX2719をはんだ付けする組立キット形式です
これは7セグLEDが大きくて、さらに見易いです
しばらく部品箱に転がっていた②を組み立ててみた所・・・
①用のプログラムでは、②は正常動作しない事が判明しました
両者はソフトウエア完全互換品では無い様です
最大の問題点は、どちらも在庫切れのまま放置されています。 (-_-メ)
これでは「PICキット」の標準モジュールとしては不適格です。
追記 2018年03月
ここで対象とする8桁7セグLEDモジュールを変更とします <m(__)m>
秋月電子で販売されている「DFR0090」としました。
今までのBASICプログラムは過去物として扱います
順次プログラムを対応していきます。