---
---
18F14K50には、10ビットのADコンバータ(ADC)が組み込まれています。 9チャンネルの外部入力および、IC内部で発生させる基準電圧(FVR)とDAコンバータ出力の計11チャンネルを切り替えてAD変換することができます。
| AD変換チャンネル | AN3 | AN4 | AN5 | AN6 | AN7 |
|---|---|---|---|---|---|
| I/O Port | RA4 | RC0 | RC1 | RC2 | RC3 |
| Pin 番号 | 3 | 16 | 15 | 14 | 7 |
| AD変換チャンネル | AN8 | AN9 | AN10 | AN11 | |
| I/O Port | RC6 | RC7 | RB4 | RB5 | |
| Pin 番号 | 6 | 5 | 13 | 12 |
AD変換は、CHS信号により入力電圧を選び、その電圧をモジュール内のコンデンサに充電したのちに開始されます。この充電時間(Acquisition time)を十分にとらないと正確な変換ができません。必要時間は、Vddと入力信号のインピーダンス(Rs)で決まります。
Vdd = 5v、Rs = 10KΩの場合、Acquisition time > 7.37uS の時間が必要です。
| レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|---|
| TRISA | - | - | TRISA5 | TRISA4 | - | - | - | - |
| TRISB | TRISB7 | TRISB6 | TRISB5 | TRISB4 | ||||
| TRISC | TRISC7 | TRISC6 | TRISC5 | TRISC4 | TRISC3 | TRISC2 | TRISC1 | TRISC0 |
| ANSEL | ANS7 | ANS6 | ANS5 | ANS4 | ANS3 | |||
| ANSELH | ANS11 | ANS10 | ANS9 | ANS8 | ||||
| RCON | IPEN | SBOREN | — | RI | TO | PD | POR | BOR |
| INTCON | GIE | PEIE | TMR0IE | INTE | IOCIE | TMR0IF | INTF | IOCIF |
| PIE1 | TMR1GIE | ADIE | RCIE | TXIE | SSP1IE | SSP1IE | TMR2IE | TMR1IE |
| PIR1 | TMR1GIF | ADIF | RCIF | TXIF | SSP1IF | SSP1IF | TMR2IF | TMR1IF |
| IPR1 | — | ADIP | RCIP | TXIP | SSPIP | CCP1IP | TMR2IP | TMR1IP |
| ADCON0 | - | - | CHS <3:0> | GO/DONE | ADON | |||
| ADCON1 | - | - | - | - | PVCFG <1:0> | NVCFG <1:0> | ||
| ADCON2 | ADFM | - | ACQT <2:0> | ADCS <2:0> | ||||
| FVRCON | FVREN | FVRRDY | TSEN | TSRNG | CDAFVR <1:0> | ADFVR <1:0> | ||
| ADRESH | A/D Result Register High | |||||||
| ADRESL | A/D Result Register Low | |||||||
| レジスタ | BIT | 名 | 内容 | 1 | 0 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RCON | 7 | IPEN | 2レベルのインタラプト優先度 | 使用 | 不 | ||||||||||||
| INTCON | 7 | GIEH | 高優先度インタラプトを使用許可 | 許可 | 不 | ||||||||||||
| 6 | GIEL | 低優先度インタラプトを使用許可 | 許可 | 不 | |||||||||||||
| PIR1 | 6 | ADIF | ADC割り込みフラグ | 発生 | |||||||||||||
| PIE1 | 6 | ADIE | インタラプトを使用許可 | 許可 | 不 | ||||||||||||
| IPR1 | 8 | ADIP | インタラプト優先度 | 高 | 低 | ||||||||||||
| ADCON0 | 5 | CHS3 | アナログ入力チャネルの指定:
|
||||||||||||||
| 4 | CHS2 | ||||||||||||||||
| 3 | CHS1 | ||||||||||||||||
| 2 | CHS0 | ||||||||||||||||
| 1 | GO/DONE | 変換開始/終了 | 開始 | 終了 | |||||||||||||
| 0 | ADON | ADModule ON | On | Off | |||||||||||||
| ADCON1 | 3 | PVCFG1 | 正基準電圧指定: リセット直後は、<00> 00=Vdd, 01=外部Pin(RC0・Vref+), 10=内部基準電圧(FVR) |
||||||||||||||
| 2 | PVCFG0 | ||||||||||||||||
| 1 | NVCFG1 | 負基準電圧指定: リセット直後は、<00> 00=Vss, 01=外部Pin(RC1/Vref -) |
|||||||||||||||
| 0 | NVCFG0 | ||||||||||||||||
| ADCON1 | 3 | PVCFG1 | 正基準電圧指定: リセット直後は、<00> 00=Vdd, 01=外部Pin(RC0・Vref+), 10=内部基準電圧(FVR) |
||||||||||||||
| 2 | PVCFG0 | ||||||||||||||||
| 1 | NVCFG1 | 負基準電圧指定: リセット直後は、<00> 00=Vss, 01=外部Pin(RC1/Vref -) |
|||||||||||||||
| 0 | NVCFG0 | ||||||||||||||||
| ADCON2 | 7 | ADFM | 結果出力のフォーマット | 右詰 | 左詰 | ||||||||||||
| 5 | ACQT2 | チャージ時間指定: リセット直後は、<000>
|
|||||||||||||||
| 4 | ACQT1 | ||||||||||||||||
| 3 | ACQT0 | ||||||||||||||||
| 2 | ADCS2 | AD変換クロック指定: リセット直後は、<000>
|
|||||||||||||||
| 1 | ADCS1 | ||||||||||||||||
| 0 | ADCS0 | ||||||||||||||||
| FVRCON | 7 | FVREN | FVR制御 | 動作 | 無効 | ||||||||||||
| 6 | FVRRDY | (Read Only) FVR状況 常時「1」 | 使用可 | 不可 | |||||||||||||
| 1 | ADFVR1 | ADC用バッファ出力倍率 11 : x4(4.096V), 10 : x2(2.048v), 01 : x1(1.024v), 00 : OFF(初期値) |
|||||||||||||||
| 0 | ADFVR0 | ||||||||||||||||
| 変換クロック | Fosc | |||||
|---|---|---|---|---|---|---|
| ソース | ADCS | 1M | 4M | 16M | 32M | 48M |
| Fosc/2 | 000 | 2.0 uS | 500 nS | 125 nS | 63 nS | 41.7 nS |
| Fosc/4 | 100 | 4.0 uS | 1.0 uS | 250 nS | 125 nS | 83.3 nS |
| Fosc/8 | 001 | 8.0 uS | 2.0 uS | 500 nS | 250 nS | 167 nS |
| Fosc/16 | 101 | 16.0 uS | 4.0 uS | 1.0 uS | 0.5 uS | 333 nS |
| Fosc/32 | 010 | 32.0 uS | 8.0 uS | 2.0 uS | 1.0 uS | 667 nS |
| Fosc/64 | 110 | 64.0 uS | 16.0 uS | 4.0 uS | 2.0 uS | 1.33 uS |
| FRC | x11 | 1.0-6.0 uS | 1.0-6.0 uS | 1.0-6.0 uS | 1.0-6.0 uS | 1.0-6.0 uS |
PortB - RB5に続されたボリュームで分圧された電圧をAD変換し、その値をLEDに表示するプログラムです。 変換された10ビットの上位4ビットを表示しています。
<回路図>
<プログラム>
// File name: ADC
// Description: A/D example
// A/D結果の上位4ビットを4つのLEDで表示する。
// Notes: 4MHz内部クロック
// LED RC0
// LED RC1
// LED RC2
// LED RC3
// VR AN11(RB5)
// Language: MPLABX XC8
// Target: PIC18F14K50
#include <xc.h>
#define _XTAL_FREQ 4000000 // delay_ms(x) のための定義
#pragma config FOSC = IRC // 内部クロック
#pragma config USBDIV = OFF, CPUDIV = NOCLKDIV
#pragma config IESO = OFF, FCMEN = OFF, PLLEN = ON
#pragma config BORV = 30, BOREN = OFF, PWRTEN = OFF
#pragma config WDTPS = 32768, WDTEN = OFF
#pragma config MCLRE = OFF, HFOFST = OFF, XINST = OFF
#pragma config BBSIZ = OFF, LVP = OFF, STVREN = ON
#pragma config CP1 = OFF, CP0 = OFF, CPD = OFF, CPB = OFF
#pragma config WRT1 = OFF, WRT0 = OFF, WRTB = OFF, WRTC = OFF
#pragma config EBTR1 = OFF, EBTR0 = OFF, EBTRB = OFF
void main(void){
unsigned char ADResult;
OSCCON = 0b01010010; // 内部クロック4Mhz
TRISC = 0xF0; // 入出力設定
ADCON2 = 0b00101100; // 左詰め出力,AD変換クロックFosc/4
// チャージ時間 12_TAD
ADCON1 = 0b00000000; // 正基準電圧 VDD, 負基準電圧 VSS
ADCON0 = 0b00101101; // アナログ入力 AN11(RB5),ADC ON
ANSELHbits.ANS11 = 1; // AN11はアナログ入力に設定
while(1){
ADCON0bits.GO = 1; // AD変換開始
while(ADCON0bits.GO); // AD変換終了待ち
ADResult = ADRESH; // AD変換結果取得
LATC = ADResult >> 4; // 上位4ビットをLEDに表示
__delay_ms(100); // LEDちらつき防止の遅延
}
}