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(); } } // ========================== ここまで ==============================