---
---
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ちらつき防止の遅延 } }