小生有几点不是很明白,1.做一个数字电压表为什么AD得到的要转化成电压值呢,得到的是什么数才需要转化。
2.在AVR单片机如果用定时器0的CTC模式,怎么实现2ms,最主要的是OCR要怎么计算,。
3.我在看一些书时,看到SPI 的例子时,IC用的TLC548,得到数要转化成成电压,转换的程序如下:
#define dv 196 //5v*1000/255 这是为什么??
dat_in=SPDR; //收数据
adc_v=(unsigned long)dat_in/10; //这是为什么??
.................
然而在另外一本书用的是TLC549,转化的程序如下,
#define dv 196
dat_in=SPDR;
adc_v=(unsigned int)dat_in/100;//????????????
我想问一下他的转化原理是什么,思路是什么,为什么要5*1000/255,如果换成其它的IC又怎么写。
上面有一句写错了,
#define dv 196 //5v*1000/255 这是为什么??
dat_in=SPDR; //收数据
adc_v=(unsigned long)dat_in*dv/10; //这是为什么??
然而在另外一本书用的是TLC549,转化的程序如下,
#define dv 196
dat_in=SPDR;
adc_v=(unsigned int)dat_in*dv/100; //????????????
关于51.和AVR单片机的电压转化问题
答案:2 悬赏:0 手机版
解决时间 2021-04-06 07:17
- 提问者网友:遁入空寂
- 2021-04-05 23:41
最佳答案
- 五星知识达人网友:煞尾
- 2021-04-06 00:59
5V是电源电压,也就是基准电压
8位AD:测得数字量=待测电压/基准电压*256
10位AD:测得数字量=待测电压/基准电压*1024
12位AD:测得数字量=待测电压/基准电压*4096
因此, 对于8位AD 实际电压=所测数字量*基准电压/256
由于单片机进行整数运算比较快,且显示处理方便,为了保证精度,因此将基准电压扩大1000倍(单位为mv)
结果就是: 实际电压=所测数字量*5000/256,如果显示时还想以V为单位,只需将小数点向前移3位,就可以了
不扩大1000倍速的话,运算结果只能是 0 1 2 3 4,所有的小数部分全丢失
8位AD:测得数字量=待测电压/基准电压*256
10位AD:测得数字量=待测电压/基准电压*1024
12位AD:测得数字量=待测电压/基准电压*4096
因此, 对于8位AD 实际电压=所测数字量*基准电压/256
由于单片机进行整数运算比较快,且显示处理方便,为了保证精度,因此将基准电压扩大1000倍(单位为mv)
结果就是: 实际电压=所测数字量*5000/256,如果显示时还想以V为单位,只需将小数点向前移3位,就可以了
不扩大1000倍速的话,运算结果只能是 0 1 2 3 4,所有的小数部分全丢失
全部回答
- 1楼网友:逐風
- 2021-04-06 02:34
icc:
#pragma data:code
const unsigned char led0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//不带小数点
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
const unsigned char led1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,//带小数点
0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
// 0x40 显示横线,0xc0 横线带小数点,p=0x73
const unsigned char led2[]={0x00,0x40};
const unsigned char wei[]={0x7f,0xfe,0xfd,0xbf};//led位码
#pragma data:data
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯