ラベル PIC の投稿を表示しています。 すべての投稿を表示
ラベル PIC の投稿を表示しています。 すべての投稿を表示
2015/02/28

16F84A XC8開発例 - 低消費電力水晶発振子を使用する(LP Mode)

概要

PIC16F84AとMPLAB XC8 C Compilerを使用した開発例として,32.768kHzの水晶発振子を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.

PIC PIC16F84A
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 Application Version 2.61.00 / Device File Version 1.61.00
回路
回路図

電源はPICkit 2から5.0Vを供給し,32.768kHzの水晶発振子でPIC16F84Aを動作させています. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F84A 1
X1 水晶発振子 32.768kHz 1
C1, C2 セラミック
コンデンサ
22pF 2
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2 - R8 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

2015/02/24

16F88 XC8開発例 - 複数の押しボタンスイッチからの入力

概要

PIC16F88とMPLAB XC8 C Compilerを使用した開発例として,2個の押しボタンスイッチ(タクトスイッチ)を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

電源はPICkit 2から5.0Vを供給し,内蔵クロック 8MHzで動作させています. 各タクトスイッチは,10kΩ抵抗でプルアップされた負論理入力回路となっています. 私がSW1として使用したタクトスイッチはLED内蔵ですが,このLEDは使用していません. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 250円
SW1 LED付き
タクトスイッチ
Switronic ST-12-303FC-G
(緑,正方形)
1 150円
SW2 タクトスイッチ 各社 1 10円
(互換品)
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 - R3 炭素皮膜抵抗 各社 1/4W 10kΩ 3 1円
(互換品)
R4 - R10 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
プログラム
タクトスイッチのチャタリングによる誤動作防止対策

タクトスイッチを使用する際は,チャタリング対策が必要です. 下記のプログラムでは,スイッチの状態を10ミリ秒の間隔を置いて2回確認するようにしています. 1回目と2回目のスイッチの状態が一致し,なおかつ現在のスイッチの状態(sw_state)が前回のスイッチの状態(sw_state_prev)と異なる場合は,スイッチの状態についての判定(switch文)に移行します. これは,スイッチの状態が変化した直後のみ,スイッチの状態に対応する処理を実行するためです.

main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

完成

タクトスイッチと7セグメントLEDの使用例
2015/02/21

16F88 XC8開発例 - LED点滅回路

概要

PIC16F88とMPLAB XC8 C Compilerを使用した開発例として,LED点滅回路のプログラムを紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

回路構成はシンプルです. 電源はPICkit 2から5.0Vを供給しています. 内蔵クロック 8MHzで動作させています. RB5には,電流制限用抵抗 330Ωを経由してLEDが接続されています.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 250円
LED1 LED 各社 各色 1 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
(互換品)
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

完成

LED点滅回路
2014/12/03

16F88 XC8開発例 - ロータリスイッチの状態をA/D変換で取得する

概要
はじめに

前回の記事「Arduino - ロータリスイッチの状態をA/D変換で取得する」と同様の回路を,PIC16F88とMPLAB XC8 C Compilerを使用して実装する方法を紹介します. この開発例では,PIC16F88のA/D変換モジュールによるA/D変換と,AUSARTモジュールによる調歩同期式シリアル通信を行っています. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
通信仕様

通信仕様は下表のとおりです. 本記事では詳細は説明しませんが,今回はUSBシリアル変換モジュールを経由してPICとPCとの間で調歩同期式シリアル通信を行いました. 調歩同期式シリアル通信について調べる場合は,「RS-232C」や「UART」をキーワードに検索してみてください.

ボーレート 9,600 bps
データビット 8 bit
パリティビット なし
ストップビット 1 bit
フロー制御 なし
回路
回路図

PDFファイルにて公開します.

PICkit 2を使用してICSP (In Circuit Serial Programming)と電源供給を行うことを前提とした回路です. 今回は,これをブレッドボード上に組んで動作を確認しました.

ロータリスイッチ SW1の共通接点Aは,グランドに接続されています. 一方,PIC16F88のAN0ピンは,常にSW1の選択接点1に接続されています. スイッチを回転させると,合成抵抗の分圧比が変化し,アナログ入力ピンに印加される電圧が変化します. この変化を読み取ることで,SW1の状態を取得できます.

仮に共通接点Aがいずれの選択端子にも接続されていない状態になっても,AN0ピンは抵抗 R1でプルアップされている状態となり,ハイインピーダンスにはなりません.

回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 250円
U2 USBシリアル変換
モジュールキット
秋月電子通商 AE-UM232R 1 800円
X1 セラロック 村田製作所 20MHz 1 35円
SW1 ロータリスイッチ 1回路12接点
ノンショーティングタイプ
1 150円
(互換品)
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2, R11 炭素皮膜抵抗 各社 1/4W 4.7kΩ 2 1円
(互換品)
R3 炭素皮膜抵抗 各社 1/4W 470Ω 1 1円
(互換品)
R4 炭素皮膜抵抗 各社 1/4W 680Ω 1 1円
(互換品)
R5 炭素皮膜抵抗 各社 1/4W 820Ω 1 1円
(互換品)
R6 炭素皮膜抵抗 各社 1/4W 1kΩ 1 1円
(互換品)
R7 炭素皮膜抵抗 各社 1/4W 1.2kΩ 1 1円
(互換品)
R8 炭素皮膜抵抗 各社 1/4W 1.5kΩ 1 1円
(互換品)
R9 炭素皮膜抵抗 各社 1/4W 2.2kΩ 1 1円
(互換品)
R10 炭素皮膜抵抗 各社 1/4W 3kΩ 1 1円
(互換品)
R12 炭素皮膜抵抗 各社 1/4W 8.2kΩ 1 1円
(互換品)
R13 炭素皮膜抵抗 各社 1/4W 15kΩ 1 1円
(互換品)
その他 リード線など 適量
回路製作例

ロータリスイッチ周辺の配線については,前回の記事の「回路製作例」で紹介しています.

プログラム
A/D変換値からロータリスイッチの状態を取得する方法

まず,ロータリスイッチの各状態における,AN0ピンへの印加電圧を計算してみましょう. 計算結果を下表に示します. 下表から,例えば選択接点2の場合は,AN0ピンへの印加電圧が0.455Vになることがわかります. PIC16F88のA/D変換の分解能は10bit(0~1023)ですから,A/D変換値は93になると考えられます. ただし,電源電圧や抵抗値の公差により,各値は多少変動します.

これらの計算結果を基に,A/D変換値と閾値を比較することで,ロータリスイッチの状態を割り出します. 例えば,選択接点が3以下か4以上かを調べるためには,各状態におけるA/D変換値(201と302)の中間値(252)を閾値にします. このような比較処理を繰り返すことで.選択接点が特定できます.

ロータリスイッチの選択接点とアナログ入力ピンへの印加電圧の関係
選択接点 印加電圧 [V] A/D変換値(10bit)
1 0.000 0
2 0.455 93
3 0.983 201
4 1.477 302
5 1.936 396
6 2.351 481
7 2.734 560
8 3.130 641
9 3.491 715
10 3.841 787
11 4.175 855
12 4.459 910
main.c

下記は,ソースファイル main.cです. このほかに,「16F88 XC8開発例 - 調歩同期式シリアル通信(AUSARTモジュール)」に掲載している,uart.cuart.hが必要です.

A/D変換値からロータリスイッチの状態を取得する,getRotarySwStatus()関数を作成しました. これは,前回の記事で紹介した,Arduinoのスケッチから移植した関数です. 復帰値1~12でロータリスイッチの状態を,復帰値0で取得エラーを示します.

getRotarySwStatus()関数内の条件分岐処理がif文の入れ子構造になっているのは,ロータリスイッチの状態によって関数内の処理時間が変動しないようにしたかったためです. この関数では,ロータリスイッチがいずれの状態であっても条件分岐処理が3回以内になっています. よりスマートなやり方があるのだとは思いますが….

製品紹介
超小型ブレッドボード(青)
SparkFun
売り上げランキング: 369,705
2014/11/23

16F88 XC8開発例 - 可変抵抗でLEDの輝度を制御する

概要

PIC16F88とMPLAB XC8 C Compilerを使用した開発例として,可変抵抗でLEDの輝度を制御するプログラムを紹介します. この開発例では,PIC16F88のA/D変換モジュールとCCPモジュールのPWMモードを使用しています. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.15
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

PICkit 2を使用してICSP (In Circuit Serial Programming)と電源供給を行うことを前提とした回路です. 今回は,これをブレッドボード上に組んで動作を確認しました.

電源はPICkit 2から5.0Vを供給しています. 内蔵クロックを使用するため,外部発振子は不要です. AN0に可変抵抗を接続し,RB3に電流制限用抵抗 330Ωを経由してLEDを接続しています.


回路図
回路部品

下表は使用部品表です.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 200円
LED1 LED 各社 各色 1 10円
VR1 可変抵抗 各社 30kΩ B 1 40円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

2014/11/14

16F88 アセンブリ言語開発例 - LED点滅回路

概要

PIC16F88とMPASM (アセンブリ言語)を使用した開発例として,LED点滅回路のプログラムを紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.15
MPASM MPASMWIN v5.57
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

電源はPICkit 2から5.0Vを供給しています. 内蔵クロック 8MHzで動作させています. RB0には,電流制限用抵抗 330Ωを経由してLEDが接続されています.


回路図
回路部品

下表は使用部品表です.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 200円
LED1 LED 各社 各色 1 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
その他 リード線など 適量
プログラム
main.asm

下記はソースファイル「main.asm」です.参考になれば幸いです.

更新履歴
2014/11/15 プログラムを修正(動作にほぼ影響なし)
  • サブルーチンTIMER2内のNOP命令を削除
  • サブルーチンTIMER3内のNOP命令を削除
2014/11/14 公開開始
2014/10/28

16F628A XC8開発例 - LED点滅回路

概要

PIC16F628AとMPLAB XC8 C Compilerを使用した開発例として,LED点滅回路のプログラムを紹介します. 開発環境は下記のとおりです.

PIC PIC16F628A-I/P
MPLAB X IDE MPLAB X IDE v2.15
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

回路構成はシンプルです. 電源はPICkit 2から5.0Vを供給しています. また,外部発振子としてセラロック 10MHzを使用しています. RB0には,電流制限用抵抗 330Ωを経由してLEDが接続されています.


回路図
回路部品

下表は使用部品表です.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F628A-I/P 1 180円
X1 セラロック 村田製作所 10MHz 1 30円
LED1 LED 各社 各色 1 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

2014/08/12

MPLAB XC8のインストール中にWarning: Problem running post-install step.が発生した場合の対処方法

MPLAB XC8のインストール中に,下図のような警告ウィンドウが表示された場合の対処方法を紹介します.警告メッセージを控えてから「OK」をクリックしてウィンドウを閉じ,インストールを完了させてください.


Warning: Problem running post-install step.

インストール環境によって若干異なると思いますが,「Problem running post-install step. Installation may not complete correctly Error running C:Windows\system32\regsvr32 /s "C:\Program Files\Microchip\xc8\v1.32\bin\MPLABXC8.dll" : Program ended with an error exit code」とほぼ同様の警告メッセージであれば,ここで紹介する方法を試してみてください.

対処方法は至って簡単で,「管理者として実行」したコマンド プロンプト上で,警告メッセージに記載されていたコマンドを再実行するだけです.コマンド プロンプトを管理者として実行するには,コマンド プロンプトのアイコン上で右クリックして,表示されたメニューから選択します. 詳しくは,「コマンド プロンプト: よく寄せられる質問」などを読んでみてください.


コマンド プロンプトの起動

コマンド プロンプトが起動したら,警告メッセージに記載されていたコマンドを実行します.コマンドがわからない場合は,下記のコマンド例のMPLABXC8.dllのファイルパスを自分のインストール環境に置き換えて実行してください.

コマンドを実行しても特に何も表示されません.再びコマンド入力待機状態になれば,コマンドの実行は完了しています.


コマンドの実行

以上で,対処は完了です.

2013/10/16

MPLAB X+XC8で__delay_ms関数にエラーマークが表示される問題の解決方法

追記 2014/11/25

匿名コメントにて「MPLAB X IDE v2.25を再インストールしたら解決した」との情報をいただきましたので,検証してみました. 情報をご提供いただき,ありがとうございました.

私の検証環境は,本投稿の解決方法が未適用の,Windows Server 2008 + MPLAB X IDE v2.15 + MPLAB XC8 Compiler v1.32という構成です. 検証環境においてMPLAB X IDE v2.15のみアンインストールし,2014年11月25日現在の最新バージョン,MPLAB X IDE v2.26をインストールしました. この結果,いただいた情報のとおり,エラー(警告)マークが表示されなくなりました.

問題が解決されたMPLAB X IDEのバージョンや,どのバージョンのMPLAB XC8 Compilerをインストールしていても同様に解決するのかについては未確認です. 詳細については,リリースノートなどを確認する必要があるでしょう. とりあえず,エラー(警告)マークの表示でお悩み方は,最新バージョンのMPLAB X IDEの導入をお試しください.

問題の概要,既存情報

Microchip Technology社のPIC16Fマイコン向けのプログラム開発を,MPLAB X IDEMPLAB XC8 C Compilerの組み合わせで行っています.ここで気になるのが,__delay_ms関数と__delay_us関数を使用した際に表示されるエラー(警告)マークです.テキストエディタの該当箇所にオンマウスすると,「Unable to resolve identifier __delay_ms」などとメッセージが表示されます.しかしながら,文法や関数の利用方法には問題はなく,コンパイルを試行すると成功しますし,PIC上でも意図した動作を再現してくれます.


__delay_ms関数にエラー(警告)マークが表示される

ということで,無視すれば良いものといえばそうなのですが,やはり気になります.そこで,このエラーが表示されなくなる方法がないか調べてみました.

Googleで検索すると,下記のように,同じ症状は1年以上前から報告されていることがわかりました.

しかしながら,本記事投稿現在の最新版のXC8 v1.21でも,この問題は解決されていません. さらに調べてみると,解決方法はYahoo! 知恵袋の下記のQ&Aで紹介されていました.

解決方法

上記によれば,XC8のインストールディレクトリ内の「include」ディレクトリ内にある「pic.h」の146行目を編集すると良いとのことです.具体的には下記の記述を,

次のように変更し,MPLAB X IDEを再起動すれば解決するというものでした.

結果,見事に問題が解決しました.気になる表示が消えてスッキリしました.


問題の解決後のテキストエディタ

XC8が登場してから1年以上経過しましたが,まだまだHi-TECH CやCCS-Cのユーザの方が多い気がします. XC8は結構頻繁にアップデートされているようですので,レガシー・デバイス脱却とともに開発環境も更新してみてはいかがでしょうか.

製品紹介
8ピンPICマイコンの使い方がよくわかる本 (基礎入門)
後閑 哲也
技術評論社
売り上げランキング: 119,862