
---------------------------------------------------------------------
#include <pic.h>
#include <htc.h> // delay用に必要
#define _XTAL_FREQ 8000000 // delay用に必要(クロック8MHzを指定)
// アナログ出力CCP1はRB3の9番ピンから行う
// デバッグしない(DEBUGDIS):低電圧プログラミング機能使用しない(LVPDIS)
// メモリを保護しない(UNPROTECT):外部リセット信号は使用せずにデジタル入力(RA5)ピンとする(MCLRDIS)
// 電源電圧降下常時監視機能ON(BOREN):電源ONから72ms後にプログラムを開始する(PWRTEN)
// ウオッチドックタイマ無し(WDTDIS):内部クロックを使用する(INTIO)
__CONFIG(CCPRB3 & DEBUGDIS & LVPDIS & UNPROTECT & MCLRDIS & BOREN & PWRTEN & WDTDIS & INTIO) ;
// アナログ値の入力処理
unsigned int adconv()
{
unsigned int temp;
GODONE = 1 ; // PICにアナログ値読取り開始を指示
while(GODONE) ; // PICが読取り完了するまで待つ
temp = ADRESH ; // PICは読取った値をADRESHとADRESLのレジスターにセットする
temp = ( temp << 8 ) | ADRESL ; // 10ビットの分解能力です
return temp ;
}
// メインの処理
void main()
{
unsigned int num ;
OSCCON = 0b01110100 ; // 内部クロックは8MHzとする
ADCON1 = 0b10000000 ; // AN0-AN4をアナログI/Oに割当
TRISA = 0b00011111 ; // 1で入力 0で出力 AN0-AN4のみ入力に設定(RA5は入力専用)
TRISB = 0b00000000 ; // RB0-RB7全て出力
ADCON0 = 0b01000001 ; // アナログ変換情報設定(AN0から読取る)
__delay_us(20) ; // アナログ変換情報が設定されるまでとりあえず待つ
CCP1CON = 0b00001100 ; // PWM機能を使用する
T2CON = 0b00000010 ; // TMR2プリスケーラ値を16倍に設定
CCPR1L = 0 ; // デューティ値は0で初期化
CCPR1H = 0 ;
TMR2 = 0 ; // タイマー2カウンターを初期化
PR2 = 124 ; // PWMの周期を設定(1000Hzで設定)
TMR2ON = 1 ; // TMR2(PWM)スタート
while(1) {
num = adconv() ; // 17番ピン(AN0)から半固定抵抗の値を読み込む
CCPR1L = num/4 ; // アナログ値からのデータでデューティ値を設定
}
}
---------------------------------------------------------------------
| クロック | ADCON1 | ADCON0 |
| Fosc/2 | 0 | 00 |
| Fosc/8 | 0 | 01 |
| Fosc/32 | 0 | 10 |
| Fosc/4 | 1 | 00 |
| Fosc/16 | 1 | 01 |
| Fosc/64 | 1 | 10 |
CCP1CON = 0b00001100 ; // PWM機能を使用する T2CON = 0b00000010 ; // TMR2プリスケーラ値を16倍に設定 CCPR1L = 0 ; // デューティ値は0で初期化 CCPR1H = 0 ; TMR2 = 0 ; // タイマー2カウンターを初期化 PR2 = 124 ; // PWMの周期を設定(1000Hzで設定) TMR2ON = 1 ; // TMR2(PWM)スタート
| ピン番号 | 16 | 15 | 4 | 3 | 2 | 1 | 18 | 17 |
| デジタル入出力ビット名 | RA7 | RA6 | RA5 | RA4 | RA3 | RA2 | RA1 | RA0 |
| アナログ入力ピン名 | AN4 | AN3 | AN2 | AN1 | AN0 |
| ピン番号 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 |
| デジタル入出力ビット名 | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
| アナログ出力ピン名 | CCP1 | CCP1 |
追記(*1) 2011/12/10
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2011 Shigehiro Kimura All Rights Reserved.