历史上的今天
返回首页

历史上的今天

今天是:2025年01月20日(星期一)

正在发生

2020年01月20日 | pic单片机ad转换c程序分享

2020-01-20 来源:elecfans

A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。A/D转换后,输出的数字信号可以有8位、10位、12位、14位和16位等。


ad转换工作原理

逐次逼近法

逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。采用逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成,如图所示。基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为 Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo《Vi,该位1被保留,否则被清除。然后再置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,输出的 Vo再与Vi比较,若Vo《Vi,该位1被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。

pic单片机ad转换c程序分享

双积分法

采用双积分法的A/D转换器由电子开关、积分器、比较器和控制逻辑等部件组成。如下图所示。基本原理是将输入电压变换成与其平均值成正比的时间间隔,再把此时间间隔转换成数字量,属于间接转换。 双积分法A/D转换的过程是:先将开关接通待转换的模拟量Vi,Vi采样输入到积分器,积分器从零开始进行固定时间T的正向积分,时间T到后,开关再接通与Vi极性相反的基准电压VREF,将VREF输入到积分器,进行反向积分,直到输出为0V时停止积分。Vi越大,积分器输出电压越大,反向积分时间也越长。计数器在反向积分时间内所计的数 值,就是输入模拟电压Vi所对应的数字量,实现了A/D转换。

pic单片机ad转换c程序分享

电压频率转换法

采用电压频率转换法的A/D转换器,由计数器、控制门及一个具有恒定时间的时钟门控制信号组成,如下图所示。

pic单片机ad转换c程序分享

它的工作原理是V/F转换电路把输入的模拟电压转换成与模拟电压成正比的脉冲信号。

电压频率转换法电压频率转换法的工作过程是:当模拟电压Vi加到V/F的输入端,便产生频率F与Vi成正比的脉冲,在一定的时间内对该脉冲信号计数,时间到,统计到计数器的计数值正比于输入电压Vi,从而完成A/D转换。


pic单片机ad转换c程序

#include《pic.h》

#define uchar unsigned char

#define uint unsigned int

__CONFIG(0x3FB1);

void init();

void Delay();

unsigned int getad();

void Display(unsigned char a,unsigned char b,unsigned char c);

unsigned char DIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

void main()

{

unsigned int led;

unsigned char a ,b,c;

init();

while(1)

{

led = getad();

a = led/100;

b=led%100/10;

c=led%10;

Display(a,b,c);

}

}

void Display(unsigned char a,unsigned char b,unsigned char c)

{

PORTB=DIG_CODE[c];

RC4=1;RC5=0;RC6=0;

Delay();

PORTB=DIG_CODE[b];

RC4=0;RC5=1;RC6=0;

Delay();

PORTB=DIG_CODE[a];

RC4=1;RC5=1;RC6=0;

Delay();

}

unsigned int getad()

{

unsigned int ad8;

ADGO =1;

while(ADGO);

ad8 = ADRES;

return(ad8);

}

void init()

{

TRISA =1;

TRISB = 0; //portB 输出

TRISC = 0;

ADCON0 = 0x41;

ADCON1 = 0x00;

Delay();

}

void Delay()

{

unsigned char a,b,c;

for(c=1;c》0;c--)

for(b=10;b》0;b--)

for(a=5;a》0;a--);

}

推荐阅读

史海拾趣

Advanced Components Industries Inc公司的发展小趣事

在国内市场取得一定成绩后,ACI开始寻求国际合作,以进一步拓宽市场。公司与国际知名电子企业建立了战略合作关系,共同研发新产品,开拓新市场。这些合作不仅提升了ACI的技术水平,还为其带来了更多的国际订单。

通过国际合作,ACI的产品逐渐进入国际市场,公司的影响力不断扩大。同时,ACI也积极参与国际电子行业的交流活动,与同行分享经验,学习先进技术,不断提升自身实力。

常忆科技(CHINGIS)公司的发展小趣事

为了满足不断增长的市场需求,常忆科技积极拓展国内外市场。公司通过与全球知名的电子产品制造商建立合作关系,成功将产品打入国际市场。同时,常忆科技还积极参加各类国际电子展会和技术交流活动,展示其最新的技术和产品,吸引了众多国际客户的关注。

随着国际化战略的深入实施,常忆科技的产品逐渐在全球范围内得到应用。这不仅提升了公司的品牌知名度和影响力,也为公司带来了丰厚的经济回报。

Flamar公司的发展小趣事

在追求经济效益的同时,Flamar公司始终不忘履行企业社会责任。公司积极响应全球绿色可持续发展号召,将环保理念融入产品研发、生产和销售的各个环节。通过采用环保材料、优化生产工艺、推广节能产品等措施,Flamar公司有效降低了产品生命周期中的环境影响。此外,公司还积极参与公益事业和社会活动,为推动电子行业的绿色可持续发展贡献自己的力量。

Digital View公司的发展小趣事

为了进一步提升品牌影响力和市场竞争力,Digital View公司开始实施国际化战略。公司积极参加国际展览和论坛,与全球同行建立合作关系,引进先进技术和管理经验。同时,公司还在海外设立研发中心和生产基地,以便更好地服务全球客户。通过国际化战略的实施,Digital View的品牌知名度和市场份额均得到了显著提升。

歌普(GEPU)公司的发展小趣事

面对日益激烈的市场竞争和技术变革的挑战,Digital View公司始终保持敏锐的市场洞察力和创新精神。公司密切关注市场动态和技术趋势,及时调整产品策略和市场布局。同时,公司还加大了对研发创新的投入力度,不断推出具有自主知识产权的新产品和新技术。通过不断创新和优化产品与服务,Digital View成功应对了市场挑战并保持了领先地位。

以上五个故事线索只是Digital View公司发展历程中的一部分缩影。每个故事都可以进一步挖掘和扩展,以呈现公司在电子行业里发展起来的完整画卷。

Daburn公司的发展小趣事

Daburn公司一直将研发创新作为公司发展的核心动力。公司拥有一支专业的研发团队,不断推出具有创新性和竞争力的新产品。同时,Daburn还注重客户需求,提供定制化的解决方案。这种以客户为中心的服务理念让Daburn赢得了众多客户的青睐。

问答坊 | AI 解惑

飞思卡尔单片机_SDIDE软件

飞思卡尔单片机_SDIDE软件 …

查看全部问答>

如何推广EEWORLD

1.登陆EEWORLD论坛,进入旧版首页,在右上角找到“控制面板”,点击控制面板,如下图: 2.点击“访问推广”,进入如下图所示界面: 按照提示操作,将您的推广链接1或者2均可,发送给您的朋友,当您的朋友访问该链接,并注册成为新会员, ...…

查看全部问答>

能否将DDraw的主页面创建在一个窗口上

创建一个窗口模式的DDraw的主页面,传入了窗口句柄,但是直接是画到了屏上,没有画到窗口。 鼠标点击DDraw主页面,就花了,隐隐约约出现主页面下的窗口,就像皮肤上长了藓一样难看。 不知道此种情况能否消除,如何消除?…

查看全部问答>

如何获取已经打开的串口句柄?

    各位,如何获取已经打开的串口句柄?     望执教!…

查看全部问答>

ARM9外中断问题

U8 key; U8 Key_Scan( void ) {         Delay( 80 ) ;         if(      (rGPGDAT&(1…

查看全部问答>

关于在WinCE5.0中是使用WinSock2.2中,能否设置发送Send函数不使用延时的问题

关于在WinCE5.0中是使用WinSock2.2中,能否设置发送Send函数不使用延时的问题: TCP协议将数据缓存起来直到足够多时一次发送,以避免发送过小的数据包而浪费网络资源。虽然这个功能有利于网络,但应用程序可能对所造成的缓冲延迟不能容忍。 网上 ...…

查看全部问答>

【求助】Mini2440 如何使用KITL

在Mini2440下如何使用KITL? 另外DEBUG版本编译出来超过30M,利用DNW下载就会报错!有没有其他办法解决下载大于30M镜像的问题?…

查看全部问答>

TL494制作的恒流限压充电器电路

      我按照图上的电路做了一个充电器(图中的r12,r20我改为两个0.1/5w的电阻了),充10AH/24V的镍氢动力电池,但是在试验中发现随着充电电压的升高,电流在慢慢下降,达不到恒流,例如:24v电池理论充电终止电压是29v,但是在电 ...…

查看全部问答>