HC18M003有一个12位转换分辨率的模数转换器,有8个外部模拟输入通道,1个内部电池检测通道。ADC的等效电路:
对TSSOP20封装的芯片,模拟输入端有以下几个引脚:
PIN4 ---AN7, 与PORTA7是同一个引脚
PIN5 ---AN6, 与PORTA6是同一个引脚
PIN8 ---AN4, 与PORTA4是同一个引脚
PIN10---AN0, 与PORTA0是同一个引脚
PIN11---AN8, 与PORTC0是同一个引脚
PIN12---AN9, 与PORTC1是同一个引脚
PIN13---AN11,与PORTD4是同一个引脚
PIN13---AN10,与PORTC2是同一个引脚
因此最多允许使用8个ADC输入端。使用时,只需要将对应的IO口设置为模拟输入即可,即通过ANSELx和TRISx(x=A\B\C\D)设置对应的引脚。例如:
ANSELA = 0x00; // 使PORTA作为模拟口使用
TRISA = 0x00; // 使PORTA作为输入口使用
一、和ADC有关的寄存器
1、控制寄存器 ADCON0
用于使能某个ADC通道以及启动AD转换。
2、控制寄存器 ADCON1
用于设置ADC的内部参考电压、时钟的分频数、转换数据位数。
3、时钟选择寄存器 ADCLK
用于设置ADC转换频率。
4、转换结果保存寄存器
ADC转换完成后,会把转换结果保存在这些寄存器中。因为共用一套寄存器保存AD结果,所以同一时刻,只能是一个AD转换输入有效。也就是说,不能让8个模拟输入端同时进行AD转换。
二、AD的转换时间
ADC转换一位数据所需的时间定义为TAD,转换一次完整的10位数据需要14个TAD。为确ADC正确转换,必须满足适当的TAD时间。
ADC转换时间(TAD)与工作频率关系表:
注意:
1. 为了加快转换速度,建议选用较快时钟源(ADC转换时钟不能超过4MHz)。
2. 当系统频率高于1 MHz 时,仅当在休眠和绿色模式下进行转换时才推荐使用FRC时钟源。
选择FRC时钟源后,ADC需等待一个指令周期后才能启动转换操作,这使得可以执行SLEEP 指令,以降低转换期间的系统噪声。如果使能了ADC中断,转换完成时将唤醒SLEEP。如果禁止了ADC中断,尽管ADEN位仍保持为1,转换完成后ADC模块将关闭。ADC时钟源不是FRC时,尽管ADEN位仍保持为1,SLEEP指令会导致当前转换中止,ADC模块关闭。
除了选择FRC时钟源,改变系统时钟频率均会改变ADC的时钟频率,从而影响ADC转换时间。
ADEN位置1将使能ADC模块,ADON位置1将启动一次ADC转换。ADC转换完成,ADON位硬件清零,ADIF中断标志位置1,ADRESH/ADRESL寄存器值被更新。如果必须在转换完成前终止转换,可用软件将ADON位清零,ADRESH/ ADRESL寄存器将保持前次ADC转换的结果。