读取AD转换后的结果都是FF?ffmpeg是什么么原...

后使用快捷导航没有帐号?
查看: 2956|回复: 8
ADS1115使用下面程序结果AD转换后的数据全部是1,请问是什么问题?
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
#include &mega128.h&
#include &delay.h&
#define uchar& & unsigned char
#define uint8& & unsigned char
#define uint& &unsigned short int
#define& & SDA& &DDRE.2
#define& & SCL& &DDRE.4
char a[8];
const uint8 b[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
char resulth,
//数据通讯的开始代码
void start(void)
& & SDA=1;&&//数据高
& & SCL=1;&&//时钟低
& & delay_us(1);
& & SDA=0;&&//数据低
& & delay_us(1);
& & SCL=0;&&//时钟高
& & delay_us(1);
//数据通讯的结束代码
void stop(void)
& & SDA=0;& &//数据低
& & delay_us(1);
& & SCL=1;& &//时钟高
& & delay_us(1);& &
& & SDA=1;& &//数据高
& & delay_us(1);& &&&
//检测代码
void ack(void)
& & SDA=0;& &//数据低
& & delay_us(1);
& & SCL=1;& &//时钟高
& & delay_us(3);
& & SCL=0;& &//时钟低
& & delay_us(1);
& & SDA=1;& &//数据高
& & delay_us(3);& &
void nack(void)
{& &SDA=1;&&//数据高
& & delay_us(1);
& & SCL=1;&&//时钟高
& & delay_us(3);
& & SCL=0;& &//时钟低
& & delay_us(1);
& & SDA=0;& &//数据低
& & delay_us(3);& &
//转换程序
void conv(char byte)
& & char i,j;
& & for (j=0;j&8;j++)
& && &&&a[7-j]=(i+1)&0x01;
& && &&&i=i&&1;& && &&&
//单片机向ADS1115写字节
void write_byte(char byte)
& & conv(byte);
& & for (j=0;j&8;j++)
& && &&&SDA=a[j];
& && &&&SCL=0;
& && & // delay_us(3);&&
& && &&&SCL=0;& &
& && &&&SCL=0;& &
& && &&&SCL=0;& &
& && &&&SCL=0;& &
& && &&&SCL=1;
//单片机从ADS1115读取字节
uint READ_byte()
& & char DAT=0X00;
& & for (j=0;j&8;j++)
& && &&&SCL=0;
& && &&&delay_us(3);
& && &&&SCL=1;
& && &&&//delay_us(10);
& && &&&DAT=DAT*2;& && && && && &
& && &&&if(SDA==1) DAT=DAT|0x01;
& && &&&//SCL=0;
& & ack();
& & return DAT;&&
//配置寄存器
void Confige1115 ()
& &&&start();& && && && && && && && &
& &&&write_byte(0x90);//写& && && && && && && &
& &&&ack();
& &&&write_byte(0x01);//指向配置寄存器& && && && && && &
& &&&ack();
& &&&write_byte(0XD2); //设置配置寄存器的高八位,即AINp=AIN1,AINn=GND;满量程FS=+-4.096;连续转换模式& &
& &&&ack();
& &&&write_byte(0XE3);//设置配置寄存器的低八位,即& &
& &&&ack();
& &&&stop();& && && && && && && && &
//配置指针寄存器
void PointRegister (void)
& &&&start();& && && && && && &
& &&&write_byte(0x90);//写& &
& &&&ack();
& &&&write_byte(0x00);//指针指向转换寄存器& && &
& &&&ack();
& &&&stop();& && && & // Send I2C Stop Transfer
//读取函数
uint read()
unsi//resulth,& &&&
start();& && &
write_byte(0x91);
ack();& && &
resulth=READ_byte();&&//高八位& && && && && &&&
resultl=READ_byte(); //底八位& &&&
result=resulth&&8;&&
result=result|
//result=result/256/256;& &
// if(result&0x7fff)& && &&&
// result=~result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同& &&&
//获取最终模数转换之后的结果
uint getad()
&&DDRF=0X00;& &
&&Confige1115();& && &
&&delay_ms(1);& && &
&&PointRegister();& &
&&DDRF=0X08;
&&delay_ms(1);& &&&
&&value=read();& &&&
void main(void)
& & unsigned long sum = 0;& &
& & uchar i,ptr[4]={6,7,8,9};
& & DDRD=0XFF;
& & PORTD=0xFF;
& & DDRC=0XFF;
& & PORTC=0xFF;
& &&&while(1)
& && &&&// for(i=0;i&1;i++)& && && && &&&
& && && & sum= getad();& && && && &
& && && &//sum=sum/2;//左移相当于除以16& && && && &&&
& && && & real=()*& && && && && && && && && && && && && && && && && &
& && && & ptr[3]=real / 1000; //最高位& && && && && && &
& && && & ptr[2]=(real - ptr[0]*;//次高位& && && && &
& && && & ptr[1]=(real - ptr[0]*1000 - ptr[1]*100)/10;//次低位& && && && &
& && && & ptr[0]=(real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10); //最低位& & uint result,,& && &
& && && &// sum= getad();
& & while (1)
& & {& && && &
& && && && &x=0xEF;& && &
& && && && &for(i=0;i&4;i++)& && && && && &
& && && && & {
& && && && & PORTC=x;
& && && && & PORTD=
& && && && & x=x/2;
& && && && & PORTB=
& && && && & delay_ms(1);
& && && && & }
在线时间3828 小时
威望25510 分
芯币111729 枚
E金币1145 枚
TA的帖子TA的资源
AD转换后的数据全部是1?
确定是程序的问题么
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
硬件我检查了没有问题呀
您解决了吗,跟你的问题一样&
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
一粒金砂(中级), 积分 8, 距离下一级还需 192 积分
楼主问题解决了吗?我也遇到了相同的问题
请教您一个问题,你解决了吗?读数据的时候怎么读呢,如果只按手册上的配置输出的是7ffff啊,不知道怎么做了&
在线时间44 小时
威望110 分
芯币116 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 110, 距离下一级还需 90 积分
一粒金砂(中级), 积分 110, 距离下一级还需 90 积分
硬件我检查了没有问题呀
您解决了吗,跟你的问题一样
在线时间44 小时
威望110 分
芯币116 枚
TA的帖子TA的资源
一粒金砂(中级), 积分 110, 距离下一级还需 90 积分
一粒金砂(中级), 积分 110, 距离下一级还需 90 积分
楼主问题解决了吗?我也遇到了相同的问题
请教您一个问题,你解决了吗?读数据的时候怎么读呢,如果只按手册上的配置输出的是7ffff啊,不知道怎么做了
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
我最近也遇到了相同的问题,参考了很多人的程序,可是结果还是一样,输出的还是65535,有没有高手帮帮我?
在线时间168 小时
威望262 分
芯币738 枚
E金币1891 枚
TA的帖子TA的资源
一粒金砂(高级), 积分 262, 距离下一级还需 238 积分
一粒金砂(高级), 积分 262, 距离下一级还需 238 积分
您用硬件I2C试一下,看行不行,同时用逻辑分析仪看一下时序,符合不符合规范
在线时间6 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
楼主搞定了吗??我的也是一直是65535
Powered by
逛了这许久,何不进去瞧瞧?君,已阅读到文档的结尾了呢~~
一、AD转换的过程——所有资料文档均为本人悉心收集,全部是文档中的精品,绝对值得下载收藏!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
一、AD转换的过程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口AD转换分辨率的认识_中华文本库
第1页/共1页
讨论AD转换分辨率的算法(转)
大家看一下下面的例子:
在总长度为5米的范围里,平均分布6棵树(或说6个元素),算出每科树(或说每个元素)的间隔?
解:每棵树(或说每个元素)应该这样分布:
在开头0米处种第1棵(记为0号树)
在1米处种第2棵(记为1号树);
在2米处种第3棵(记为2号树);
在第5米(即终点)处种第6棵(记为5号树)
所以,每棵树的间隔(或分辨率)的算法是:总长度/(长度内总元素-1)
即:5米/(6-1)棵=1米/棵
每隔1米有1棵树,这个道理大家都很清楚,应该没有人说分辨率=总长度/长度内总元素=5/6=0.83米,
即每隔0.83米有1棵树吧??? XXX, 再看例子(2)
在总长度为5米的范围里,平均分布256棵树,算出每棵树的间隔?
解:总长度=5;长度内总元素=256
所以:按上述算法,每棵树的间隔(或分辨率)=5/(256-1)=0.
即:0号树的位置,即第1棵树的位置=0*0.(米)
1号树的位置,即第2棵树的位置=1*0..(米)
100号树的位置,即第101棵树的位置=100*0..9607843(米)
255号树的位置,即第256棵树的位置=255*0..(米)
在总电压为5V的范围里,平均分布256个元素(0-ff),算出每个元素的间隔? 解:总电压=5V;长度内总元素=256 (0-ff)
所以:每元素的间隔(或分辨率)=5/(256-1)=0.
即:0号元素的位置,即AD&00&的电压=0*0.(V)
100号元素的位置,即AD&64&的电压=100*0..9607843(V)
255号元素的位置,即AD&ff&的电压=255*0..(V)
AD转换的分辨率=参考电压/(总元素-1)
当AD为8位,总元素=256(ff)取参考电压=Vdd=5V时
分辨率=5/(256-1)= 0.
当AD=255时,AD转换值=255*0..(V)
如这样算:转换值=255*(5/256)=4..98(V)
结果就错了,我们看看用这种算法算算例(1)看看:
每棵树的间隔(或分辨率)=总长度/长度内总元素=5/6=0.
即:0号树的位置,即第1棵树的位置=0*0.=0(米)
1号树的位置,即第2棵树的位置=1*0.=0.(米)
5号树的位置,即第6棵树的位置=5*0.=4.(米)
可见,最后的元素不在终点5米处,很明显不把总元素减1的算法是不对的,忽略了有一个元素在0的位置啊。
***以前我用C51在设计产品的时候,我都综合参考很多书籍,有些书说“8AD位的除以256; 10AD位的除以1024” ,也有些书说“8AD位的除以255; 10AD位的除以1023”,从上面的分析看,显然后者是对的,这也是我产品设计中的心得, 欢迎再次讨论。
第1页/共1页
寻找更多 ""avr单片机的AD转换实验
> avr单片机的AD转换实验
avr单片机的AD转换实验
实验。1、实验。程序进行周期,在并转换值显示在数码管上。2、使用内部1 M晶振。3、进行此实验需要插上:JP1的所有8个短路块、JP9(A/D)。4、此实验采用项目化管理,主要文件有ADC、DISP、主程序。*/#include "iom16v.h"#include macros.h&#include "iom16v.h"#include macros.h&extern unsigned char get_ad(void);/*AD采样函数*/extern void Disp_Init(void);/*显示初始化*/extern unsigned char led_buf[];/*显示缓存*//*延时函数,频率1MHz,单位mS*/void delay_ms(unsigned char i) {unsigned char a,for (a = 1; a++) {for (b = 1; b++) {;}}}void main(void) {DDRA = 0x00;/*方向输入*/PORTA = 0x7F;/*打开上拉*/DDRB = 0xFF;/*方向输出*/PORTB = 0xFF;/*电平设置*/DDRC = 0x00;PORTC = 0xFF;DDRD = 0x00;PORTD = 0xFF;delay_ms(200);/*加入延时*/Disp_Init();/*电平设置*/while (1) {delay_ms(100);/*周期控制*/i = get_ad();/*获取电压*/led_buf[3] = 0;/*数值转换*/led_buf[2] = i / 100;led_buf[1] = (i % 100) / 10;led_buf[0] = (i % 10);}}
蜂鸣器相关文章:
晶振相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一

我要回帖

更多关于 ffshow是什么 的文章

 

随机推荐