TOP>PICC Lite編(PIC12F675)> (04)可変抵抗でLEDの明るさを制御(A/D変換,PIC12F675,PICC-Lite)> ソース
可変抵抗でLEDの明るさを制御(ソース)
− A/D変換とPWM制御 −
(PIC12F675 PICC-Lite)
更新日2008.10.19
以下のソースを取り込んで、コンパイル→PIC書き込み→実行して下さい。
// ========================== ここから ==============================
//ファイル名 AD_LED.c
//作成日 2008.9.28
//作成者 mit.ueno
//バージョン 1.0
//コンパイラ PICC Lite
//PIC PIC12F675
//クロック 4MHz(INTIO)
//概要
// A/D変換を行い、その結果で
// GP5のLEDの明るさを変える
// GP4のLEDは1秒毎に点滅させる
// TMR0割り込み使用
// clock 4MHz
// 命令 1μS
// TMR0 256(フリーラン)
// pre_sc 1
// 割込み 1μS×256×1=0.256mS
//使用ポート
// GP0:VR(10K)
// GP4:LED
// GP5:LED
#include "pic.h"
static void pic_init();
static void wait_50uS(); // AD変換器充電待ち時間
static unsigned char Cnt32; // 0.256*32=8.192mS
static unsigned char Cnt500mS; // 0.256*32*61=499.7mS
static unsigned char PWM_wid; // PWMパルス幅
static unsigned char PWM_wid_i; // PWMパルス幅初期値
static bit T500mS;
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS);
// =================== 割り込み処理 ====================
static void interrupt intr(void) {
T0IF = 0; // TMR0割り込みクリア
if (!(Cnt32--)) { // PWM 1サイクル終了
Cnt32 = 32;
PWM_wid = PWM_wid_i;
if (PWM_wid_i) {
GPIO5 = 1;
}
if (!(Cnt500mS--)) { // 500m秒経過
Cnt500mS = 61;
T500mS = 1;
}
}
if (!(PWM_wid--)) { // PWMパルス幅
GPIO5 = 0; // 設定
}
}
// ==================== メイン処理 ===========================
main() {
pic_init(); // PICの初期化
Cnt500mS = 61;
T500mS = 0;
while(1) {
wait_50uS(); // 50uS待ち(AD充電待ち)
GODONE = 1; // AD変換開始
while(GODONE) {} // AD完了待ち
PWM_wid_i = ADRESH >> 3;
if (T500mS) {
T500mS = 0;
if (GPIO4) {
GPIO4 = 0;
} else {
GPIO4 = 1;
}
}
}
}
// ==================== PICの初期化 ===========================
static void pic_init() {
CMCON = 0x07; // コンパレータ未使用
ANSEL = 0x11; // 8Tosc,AN0
ADCON0 = 0x01; // Left,Vdd,AN0,ADON
TRISIO = 0x0F; // GP0-4:in,GP4,5:out
GPIO = 0;
OPTION = 0x88; // プリスケーラ:無し
TMR0 = 0x00;
T0IE = 1; // TMR0割り込み許可
GIE = 1; // 全体割り込み許可
}
// =================== 50uSウェイトルーチン ===============
static void wait_50uS() {
unsigned int cnt;
unsigned int i;
cnt = 2;
for (i=0 ; i<cnt ; i++) {
NOP();
}
}
// ========================== ここまで ==============================