こんにちは、ENGかぴです。
PIC16F1827を使ってマイコンの基礎であるタイマ・シリアル通信・I2Cなどの使い方を学ぶことができます。PICマイコンの開発支援ツールであるMCCプラグインを使用してPIC16F1827の動作を確認しました。
本記事は動作確認したことのリンクをまとめています。
PICマイコン(PIC16F1827)の機能
PIC16F1827はPICマイコンの中でもミドルレンジの8ビットのマイコンです。マイコンの基礎知識を学ぶには十分のスペックを持っています。
PICマイコンの開発環境をつくる
PICマイコンを開発する場合MPLAB X IDEやPICマイコンに応じたコンパイラーをインストールする必要があります。開発環境であるMPLAB X IDEとコンパイラであるMPLAB XC Compilersのダウンロードとインストール方法・プロジェクトの作り方・メインファイルの作り方についてまとめています。
広告
PR:わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
MCCの追加と使い方
MPLAB Code Configurator(MCC)はGUI(Graphical User Interface)を使って選択したPICマイコンデバイスのクロックなどのシステム設定や周辺モジュールの初期化処理が自動で行えます。
MPLAB Code Configurator(MCC)の追加と使い方
ユーザーはレジスタの設定などのコーディングを意識することなく画面に表示された項目を選択するだけで簡単に設定できるため、マイコンの初期化処理に伴う煩わしさを感じることなく開発が行えるのが特徴です。
タイマ0の割り込みでサーボモーターを操作する
TMR0割り込みとDO出力を組み合わせてPWM波形を生成しサーボモーターを操作する方法をまとめました。TMR0割り込みの分解能を100usにしているため精度が少し落ちていますが、最大で±10度の誤差を気にしない場合に有効な方法です。
タイマ1を使用する
PICマイコンにはタイマー機能があり16ビットタイマとしてTMR1があります。TMR1の初期値を調整することで任意のタイミングでオーバーフローするタイマを作ることができます。TMR1で任意のタイマを作りLEDを点灯/消灯しています。TMR1を割り込みを使用しない例と使用した例をまとめています。
タイマ管理でソフトウェアタイマを作る
PIC161827のタイマー機能を使用してベースタイマを生成しオーバーフローした回数を管理することでソフトウェアタイマを作ることができます。8ビットタイマであるTMR0を使用していますが、タイマーであれば同様の考え方でソフトウェアタイマを構成することができます。
自分が管理したいタイマーの変数を宣言し、変数に数値をセットするだけで任意の値でタイムアップさせることができるようになります。
DIピンのチャタリングを防止
DIピンに入力されるDI信号がスイッチのON/OFFの切り替え時にチャタリングのため安定しないことがあります。チャタリングの影響を受け誤動作する可能性もあることからフィルタによる誤動作防止が必要な場合もあります。
タイマ管理でソフトウェアタイマを生成し任意のタイミングで取得したDIデータが複数回一致した場合にDIが安定したとみなすことでチャタリングを防止しています。
DOでLCDに文字を表示する
GPIOをDOピンに設定してバス通信タイプのLCDに文字を表示する方法をまとめました。LCDモジュールの制御ピンとデータピンを最小の組み合わせで制御する配線例とインターフェースビット長4ビットで2LINEに設定して動作確認を行いました。
DOとNOPを使ってRGM LEDを操作する
RGB LEDは赤、緑、青のLEDを備えておりそれぞれの色で256色の色味を表現することができます。光の3原色が揃っているので組み合わせによって様々な色のパターンでLEDを点灯させることができます。RGB LEDの操作方法の一例としてタイミング波形をDOとNOPで作る方法で動作確認を行いました。
LCDに赤、緑、青の制御値を表示してそれぞれの色に対し色味を変更できるようにしました。制御値からタイミング波形の生成の例をまとめています。
DOでステッピングモーターを起動する
DOを4ポート分実装し、ステップに応じた励磁パターンをDOで制御することでステッピングモーターを起動することができます。1-2励磁方式でステッピングモーターを時計/反時計周りに回転させて動作確認を行いました。
外部割込みを使用する
INTピンはパルス波形のエッジを検出して割り込みを発生する機能です。周期的なパルス波形から外部のセンサーなど不定期なパルス波形まで様々な用途で使用できる機能です。INTピンとPORTBのIOC機能を使って動作確認を行いました。
キャプチャーを使用する
キャプチャーはパルス波形のエッジを検出して周波数を測定する用途で使用できる機能です。DOで模擬パルス波形を生成しキャプチャーに入力して周波数を測定して動作確認を行いました。
LED8×8マトリクスを操作する
LED8×8マトリクスはDOを16本使用して操作します。PIC16F1827ではDOピンが不足するためDOを拡張するためマルチプレクサを使用しています。LED8×8マトリクスで複数の点灯パターンを切り替えて動作確認を行いました。
シリアル通信で外部機器と通信する
PIC16F1827はシリアル通信機能(EUSART)を持っているため外部機器と通信を行うことができます。MCCを使用してEUSARTの設定を行いArudino UNOとシリアル通信を行いシリアルモニタで動作確認を行いました。
応用編としてPIC16F1827のシリアル通信機能(EUSART)に外部機器から電文を送信しPIC16F1827を操作しレスポンスさせて動作確認を行いました。
応用例としてLoRa通信モジュールであるES920LRの初期設定をシリアルを使って行い、自作の電文を作成して無線通信する方法をまとめています。
I2C通信でセンサーの情報をLCDに表示
I2C通信はMSSP機能に含まれています。MCCを使用してMSSPの設定を行い、LCDに文字を表示しました。MCCが生成した関数の使い方と実装例をまとめています。実装例としてストップウォッチのソフトを製作して動作確認を行いました。
SHT35-DISの温湿度の情報をI2Cで取得してLCDに表示しました。CRC8の計算方法や温湿度情報への換算方法についてまとめています。
湿度と温度センサーであるDHT20モジュールからデータを取得してLCDに表示しました。float演算を行うとプログラム領域の容量が不足するため、100倍値で計算する方法やLCDの表示データを除算と余りの演算を使って作成する方法で対策しました。
SPI通信を実装する
SPI通信はMSSP機能に含まれています。MCCを使用してMSSPの設定を行い、音声合成ICであるATP3011を使用して音声を再生させています。様々な音声のパターンを作成し再生させると抑揚のつけ方などにハマってしまい予想以上に面白く楽しめました。
AD変換を実装する
PIC16F1827はADC機能を持っておりセンサーの電圧をアナログ情報として取り込むことができます。MCCでADCの実装例として温度センサーと照度センサーの値をアナログデータとして取り込んで動作確認を行いました。
温度センサーを指で触れると測定電圧が変化しLED(赤)が点灯し照度センサーに手をかざすとLED(緑)が点灯しました。LEDの点灯/消灯はAD変換の値を一定値と比較して行っているためAD変換できていることが分かりました。
CO2センサーであるMG812モジュールの出力電圧をAD変換してCO2濃度の変化を検出しました。CO2濃度が1000ppm以上になるとLEDを点灯させて換気を促すように通知するようにしました。
ジョイスティックから取得した電圧をアナログピンに入力してLEDの点灯/消灯のパターンの切り替えとDACの基準電圧を切り替えでジョイスティックの動作確認を行いました。
コンパレータを実装する
PIC16F1827はコンパレータ機能を持っており基準電圧に対して入力電圧が高いか低いかを判断した結果を出力することができます。MCCでCMP実装し基準電圧にFVRを使う方法とDACを使う方法の2通りの動作確認を行いました。
基準電圧にDACを使ってヒステリシス特性の拡張を行っています。周辺回路で外来ノイズをカットすることが望ましいのですが、マイコンに搭載されているヒステリック特性よりも大きくしたい場合に有効な方法です。
MCCでコンパレータ割り込みを実装する方法をまとめました。TMR0などのようにコールバック関数を登録する関数が生成されないためコンパレータ割り込みの処理を組み込んで実装する必要があります。ヘッダーファイルを作成しMCCファイルにマージ(結合)する方法をまとめました。
PWMを実装する
PWM機能の確認はブザーを鳴らす事で行い、EPWMの動作はAD変換によって取得した値を基にデューティー比を調整することでLEDの明るさを変更し、DCモーターを動かすことで動作確認を行いました。
EEPROMを使用する
PICマイコンにはEEPROMが搭載されているため電源がOFFになってもデータを保持することができます。EEPROMの書き込みや読み込みはシーケンス処理によって行う必要がありますが、MCCを使用するとシーケンス処理を意識せずにEEPROMを使用することができます。
EEPROMにデータを書き込んでLCDに読み込んだEEPROMのデータを表示して動作確認を行いました。
リセットの要因確認と使用例
PICマイコンのPCONレジスタとSTATUSレジスタを確認することでリセット要因を確認することができます。ユーザーが意図してリセットするようにプログラムを構成していれば問題ないですが、何らかの要因でリセットしている場合はリセット要因の特性が必要になります。
リセット要因の特定の方法について一例を示して動作確認を行いました。
ソースコードをプロテクトする
PICマイコンのソースコードはMPLAB X IDEなどでRead Device Memoryによって読み出すことができます。プロテクトをしていないとプロジェクトファイルを持たない第3者からソースコードが抜き取られることがあります。
趣味でプログラムを開発している分には抜き取られても問題ありませんが、産業用の製品などに使用している場合は技術ノウハウが抜き取られることにもなるためプロテクトをしておくことは重要です。
PICマイコン関連で使用している書籍
PICマイコンの基礎をC言語で学習する際に参考になる書籍があります。PICマイコンをC言語で開発してみたいけどどうしたらよいかわからない場合は参考になると思います。
まとめ:PICマイコンで基本動作が学べます
PIC16F1827を使用してマイコンの機能であるタイマやシリアル通信など基本となる動作についてまとめてきました。各リンクで紹介している方法は他のマイコンを使用する際にも有効な方法で私が担当している製品にもよく使用している方法です。
レジスタの設定方法を理解しておくことは重要ですが、まずは動作させて楽しむことが大切だと感じています。慣れてくるとMCCが実装したレジスタの設定の意味が分かるようになりあなたなりの追加修正ができるようになることでしょう。
マイコンのレジスタ設定を理解することはArudino環境などにおいてライブラリを作って提供する側になれます。
プログラミングの教養を身に着けておけばPICマイコンのみでなくArduinoやそのほかの開発環境においてもソフト開発ができるようになります。
言語は何であれ一つ身に着けておくと他の言語にも共通する考え方応用することができます。マイコンのソフト開発をしてみたいIoTモジュールを動かしてみたいという好奇心やチャレンジ精神が大切だと思います。
関連リンク
PIC12F675を使って動作確認したことについてまとめています。PIC12F675はMCCに対応していないためレジスタ設定などの初期化処理を実装する必要があります。レジスタの設定の考え方などについてまとめています。
PICマイコン(PIC12F675)で実現できる機能と解説リンクまとめ
下記記事ではIoT社会実現と組み込みエンジニアの職種との関係についてまとめています。
Arudinoを使った開発環境を作り方やライブラリを使って各種モジュールを動作させています。Arduinoを使って動作確認したことについてリンクをまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
IoTモジュールであるトワイライトでソフト開発と無線通信を行い動作確認したことについてリンクをまとめています。
トワイライト(TWELITE)のソフト開発と無線通信でできること
最後まで、読んでいただきありがとうございました。
光の三原色で様々な色でLEDを点灯させることができるため応用例が広がりそうですが、PIC16F1827では容量不足になりそうです。