打印

辉芒微FT61E14,ADC怎么配置

[复制链接]
661|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
34af9uc|  楼主 | 2023-6-7 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
辉芒微FT61E14,ADC怎么配置?
/********************************************************************************/                //ADC(PB6)
ADCEN                =1;                        //ADC模块时钟
TRISB6                =1;                        //禁止引脚输出驱动
ANSELA                =1<<6;                //关闭上拉/下拉及数字输入(pb6)

CHS2                =1;                        //AN6
CHS1                =1;                        //AN6
CHS0                =0;                        //AN6

ADCS0                =1;                        //ADC转换时钟源100 = SysClk/4
ADCS1                =0;
ADCS2                =0;

ADNREF0                =0;                        //负参考电01 = GND
ADNREF1                =1;
ADPREF0                =1;                        //正参考电外部参考电压
ADPREF1                =1;

ADEX                =0;                        //由指令置位 GO/DONE(软件触发)

ADFM                =1;                        //ADRESL低8位ADRESH高4位

//nDONE                =1;                        //0=转换完成
//GO                =1;

ADON                =1;                        //ADC使能

//ADRESL
//ADRESH
/********************************************************************************/

while(1)
{
nDONE                =1;                //启动 A/D 转换
NOP();
NOP();
while(nDONE){NOP();}

xs_a1                =biao[ADRESH];
xs_a2                =biao[ADRESL>>4];
xs_a3                =biao[ADRESL &0x0f];
for(a1=50;a1>0;a1--)
{
xianshi();
}
shuchu                ^=1;

}

使用特权

评论回复

相关下载

相关帖子

沙发
34af9uc|  楼主 | 2023-6-12 22:32 | 只看该作者
用下面的:
/********************************************************************************/                //ADC(PB6)
ADCEN                =1;                        //ADC模块时钟
//TRISB6        =1;                //禁止引脚输出驱动
//ANSELA        =1<<6;        //关闭上下拉(第几路AD)

//CHS2                =1;                        //PB6,AN6,110
//CHS1                =1;
//CHS0                =0;

TRISC0                =1;                        //PC0,AN5,101,1关闭数字输出(1输入)
ANSELA                =1<<5;                //1 = 关闭上拉/下拉及数字输入(第几路AD)
CHS2                =1;                        //PC0,AN5,101
CHS1                =0;
CHS0                =1;

ADCS2                =1;                        //ADC转换时钟源101 = SysClk/16
ADCS1                =0;
ADCS0                =1;

ADNREF1                =0;                        //负参考电01 = GND
ADNREF0                =1;

ADPREF1                =1;                        //正参考电压(外部参考电压io)
ADPREF0                =1;

ADEX                =0;                        //由指令置位 GO/DONE(软件触发)

ADFM                =1;                        //1右对齐(RESH高4位,RESL低8)

ADON                =1;                        //ADC使能
nDONE                =1;                        //开始转换(0转换完成)
//GO                =1;

//ADRESL
//ADRESH
/********************************************************************************/

使用特权

评论回复
板凳
34af9uc|  楼主 | 2023-6-12 22:33 | 只看该作者
延时一下是必须的:
void                wendu_caiji()        //温度采集
{
unsigned char wdcj_a1;
nDONE                =1;                //启动 A/D 转换
NOP();
NOP();
while(nDONE){NOP();}
for(wdcj_a1=10;wdcj_a1>0;wdcj_a1--);                //需要延时一下再测量
wendu_a1                =ADRESH;
wendu_a1                <<=8;
wendu_a1                |=ADRESL;
}

使用特权

评论回复
地板
34af9uc|  楼主 | 2023-6-13 00:07 | 只看该作者
void main(void)
{
unsigned char a1;
OSCCON = 0B01110001;        //16MHZ 1:1
PCKEN |=0B00000001;//AD模块时钟使能
PORTB = 0B00000000;//上拉电阻
TRISB = 0B00000010;//PB输入输出 0-输出 1-输入//PB1->输入
TRISA &=~(1<<5);
//        POWER_INITIAL();                                                    //初始化
//        ADC_INITIAL();                                                            //ADC初始化       
ANSELA = 0B00000001;    //模拟口设置,AN0为模拟管脚
ADCON1 = 0B11100100;         //右对齐,转换时钟Fosc/64,负参考电压GND,正参考电压内部电压(2V)                                         
ADCON0 = 0B00000000;         //选择AD转换通道0,使能ADC
ADCON2 = 0B01000000;         //选择内部正参考电压2V,无外部触发源
ADCON3 = 0B00000000;
ADDLY = 0B00000000;    //外部触发延时,没用到
ADCMPH = 0B00000000;        //ADC比较阈值,仅8位,用于ADC结果高8位比较。
ADON=1; //全能ADC

while(1)
{
//ADCON0 &= 0B00001111;                                          
// ADCON0 |= adcChannel<<4;                                 //重新加载通道值
//DelayUs(40);                                //延时等待电压稳定 Tst >10us
//for(a1=100;a1>0;a1--);

GO = 1;                                                     //启动ADC
NOP();
NOP();
while(GO);                                                            //等待ADC转换完成;

//for(a1=10;a1>0;a1--);

//ADRESH =0X01;
//ADRESL =0X01;
PA5=1;
PA5=0;
PA5=1;
PA5=0;
PA5=1;
PA5=0;
PA5=1;
PA5=0;
PA5=1;
PA5=0;
}
}

使用特权

评论回复
5
34af9uc|  楼主 | 2023-6-13 00:11 | 只看该作者
vref+选vdd
vref-选gnd
外部通道ANSELA=0B0001 0000;  //第几个通道
chs通道
go启动

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

287

主题

444

帖子

57

粉丝