16F873A XC8開発例 - LED調光回路(CCPモジュールのPWM機能)

はじめに

本ページでは,PIC16F873AとMPLAB XC8 C Compilerを使用した開発例として,PWM方式LED調光回路の製作例を紹介します. LEDの輝度制御には,PIC16F873Aに搭載されているCCPモジュールのPWM機能を使用しています. 今回はPIC16F873Aを使用していますが,一部を変更することで,同様のCCPモジュールが搭載されているPIC16F877Aなどでも下記のプログラムを使用できると思います.

下記の環境で動作を確認しておりますが,動作を保証するものではありません. 掲載情報は自己責任の上でご利用ください.

PIC 16F873A-I/SP
MPLAB X IDE MPLAB X IDE v1.85 for Mac
MPLAB XC8 MPLAB XC8 C Compiler v1.20 for Mac
PICkit 2 MPLAB X IDEを使用して書込み

回路

回路図

今回は,自作にした汎用PICマイコンボードを使用しました. 下記のプログラムの動作に必要な部分を抜粋した回路は,下図の通りです. 下図の回路では,PICkit 2によるICSP (In Circuit Serial Programming)と電源供給を行うことし,回路部品数を必要最低限に抑えています.

回路部品

上記の回路図中で使用している回路部品のリストです. 参考単価は,特に記載がない限り,秋月電子通商で購入した場合のものです.

使用部品表
番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip 16F873A-I/SP 1 350円
X1 セラロック 村田製作所 20MHz 1 30円
LED1 - 2 LED 各社 φ5 高輝度タイプ 各色 2 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
R2 - 3 炭素皮膜抵抗 各社 1/4W 330Ω 2 1円
その他 リード線など 適量

プログラム

このプログラムはMPLAB XC8 C Compiler向けです.Cコンパイラの種類にご注意ください.

PIC16F873AにはCCPモジュールが2系統ありますので,これらを利用して2つのLEDの輝度を制御するプログラムです. 蛍の光のように,光が明るくなったり暗くなったりをゆっくりと繰り返します. PWMの分解能は10bitですので,デューティ比設定用変数(duty1およびduty2)には0から1023までの値を設定可能です. しかし,下記のプログラムではLEDの最大輝度を抑えるために最大値を511としています. プログラムを改変して使用される場合はご注意ください. LEDの最大輝度は,電流制限用抵抗であるR2およびR3の抵抗値でも調整可能です. 使用するLEDに合わせてデューティ比の最大値と電流制限用抵抗の抵抗値を調整してください.

下記はソースファイル「main.c」です.

下記はヘッダファイル「pwm.h」です.

下記はソースファイル「pwm.c」です.

実装

回路構成例

今回は,自作にした汎用PICマイコンボードを使用しました. LEDは上側からLED1 (RC1, CCP2),LED2 (RC2, CCP1)です.

動作例

上記のプログラムを実際に動作させたときの映像です.

__delay_ms関数にエラーマークが表示されるときは

文法や関数の利用方法に問題がなくコンパイルが成功するにも関わらず, __delay_ms関数や__delay_us関数にエラー(警告)マークが表示される場合,下記の記事をご一読ください.

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

更新履歴

2014/07/02 関数定義を「pwm.h」から「pwm.c」に移行
2014/06/29 一部の記号定数定義を「main.c」から「pwm.h」に移行
2014/05/19 「pwm.h」にインクルードガードを追記
2013/--/-- 公開開始