マイコン端子に入出力 2
前回の記事で、PICマイコンでは SFR(Special Function Register)特殊レジスタに対して端子の出力状態を指示したり、端子の入力状態を問い合わせると書きました。
ESP32 や Raspberry Pi の GPIO も専用の関数を使って指示や問い合わせを行います。PICマイコンでもSFRを直接読み書きする他に、UARTやI2Cなどのライブラリ関数を使うこともあります。
私は個人的に標準のライブラリ以外は出来るだけ使わないようにしているので、SFRに(自作のプログラムで)直接アクセスして使っています。
今回は入出力を行う時に、どのようにSFRを使うのかについて概観します。
端子の機能設定
入出力の前に、各端子を次のような目的に使うことを設定します。
これを済ませないと後述の動作制御が出来ません。
1.ADC入力、DAC出力
2.I/Oポートとしての入出力(High/Low)
3.シリアル通信(UART, SPI, I2C)の送受信
端子毎に使える機能が制限されているので、制限の範囲内で設定します。
端子への入出力とは直接関係が無い場合もありますが、クロックの選択、内部タイマーの設定、イベント発生時の割り込み設定なども行います。
タイマーとの組み合わせでPWM出力をI/Oポートに出したり、I/Oポートの入力によって割り込みを発生させたり、パルス幅を測定したりと言った設定も可能です。
PICマイコンを使う場合、プログラミングの最初にSFR設定をすることになります。初学者にとっては最初に最も面倒(難解)な壁が立ちはだかると言った感じです。
出来れば実績のあるソースを使って難題を先送りにし、今作りたいものを形にすることに注力したいものです。逆に実績が出来ると楽になって来ます。
この記事では具体例を省きますが、必要に応じて別の記事「PIC18F SFR設定」なども参考にしてみて下さい。
自分にも出来たんだから貴方も頑張れ! なんてことより、もっと建設的な方法は無いものか・・・
ヒョットして、誰かが作ったハード&ソフトを改造するのが近道かも知れません。各人のニーズに近い「改造や応用したくなる既存ハード&ソフト」が、手頃な価格で、あれこれと提供されれば取り組み易くなるのかも知れません。
様々な人々が関わりしつつ・・・
note なら、実現出来そうな気がしています。
動作制御(入出力)
設定が終わると所定のSFRに書き込んだ値に応じて出力端子に High/Low の電圧が現れたり、入力端子の電圧に応じて High/Low を読み出すことが可能になります。
決められたSFRにデータを書き込むとシリアル通信で送信したり、逆に受信したデータを読み出すことが出来ます。
特定のSFRに書き込んだ値に応じてPWM出力を得ることも可能になります。
前述の設定に比べれば、理解し易く楽しい作業です。
未使用端子
入力にしているとノイズの影響を受けやすいので、使わない端子は出力に設定します。私はLow出力にしています。
以上です。
追伸
続編のご案内
「マイコン端子に入出力 3」 - SFRはハードとソフトの接点