hailongc 发表于 2012-9-18 10:25:47

A/D采样感知电压,如何把它限定在3~12v呢?求例程,谢谢

               unit addata;
        DDRC&=~(1<<PC2); //Pc2口设置为输入,无上垃电阻,高阻态
        PORTC&=~(1<<PC2);
        //SFIOR =0; //连续转换模式
        ADMUX=0X42; //AVCC,AREF引脚外加滤波电容
        //右对齐,ADC2单端输入
        ADCSRA =0X80; //启动ADC转换
        ADCSRA |=(1<<ADSC); //开始转换
        while(!(ADCSRA&(1<<ADIF))); //等待转换结束,ADIF置1
        addata=ADCL;
        addata=addata+ADCH*256; //把ADCL,ADCH转换成10进制
        ADCSRA |=(1<<ADIF); //对ADIF写”1”,ADIF清0
        ADCSRA =0X00; //关闭ADC转换
        return addata;

这样写对吗?要转换成10进制吗

Soul.art 发表于 2012-9-18 10:35:15

这个问题和程序无关吧,要从硬件上下手啊

hailongc 发表于 2012-9-18 11:19:48

Soul.art 发表于 2012-9-18 10:35 static/image/common/back.gif
这个问题和程序无关吧,要从硬件上下手啊

谢谢,硬件上已经设计好了,主要是想要在这个PC0端口采集电压,这个电压是电池的电压,目的是采集电池电量的,我想设计在低于3v或者大于12v的情况,我就会采取一些保护措施,所以我A/D转换这块转换的值直接就是电压值吗?

Soul.art 发表于 2012-9-18 12:02:42

采集的值是要换算的
先算采集到的电压 256 / 1024 * addata = V_256;   //----256 / 1024 可以先算好
再算实际电压 V_256 / R2 * ( R1 + R2 ) / 100 = 实际电压R1,R2在里面的值分别写为20000,3900



hailongc 发表于 2012-9-18 14:20:13

Soul.art 发表于 2012-9-18 12:02 static/image/common/back.gif
采集的值是要换算的
先算采集到的电压 256 / 1024 * addata = V_256;   //----256 / 1024 可以先算好
再算 ...

十分感谢啊,呵呵,就是不太明白为什么256/1024是什么意思呢。那么这个如果是温度采集电路的话转换也是这样吗

Soul.art 发表于 2012-9-18 14:32:27

本帖最后由 Soul.art 于 2012-9-18 14:43 编辑

ADMUX=0X42; //AVCC,AREF引脚外加滤波电容这里你用的5V电压参考应该是500,将它改为0xC2,内部2.56V参考电压,这样电源电压浮动补会影响ADC准确性


这里参考电压设置的是2.56V,放大100倍就256了,你的ADC分辨率是10位的,所以就是1024

温度采集是要计算NTC电阻的阻值,根据阻值查表获得当前温度,若要分辨率高那就直接根据NTC电阻厂家提供的K值和B值进行计算,一般这两个值都标在了外包装上

页: [1]
查看完整版本: A/D采样感知电压,如何把它限定在3~12v呢?求例程,谢谢