OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5293|回复: 10

大家来看看,关于ADC实验的问题

[复制链接]

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
发表于 2014-4-22 13:11:53 | 显示全部楼层 |阅读模式
 int main(void)
 {
    int i;

 
u16 adcx;
float temp;
SystemInit(); //系统时钟初始化为72M  SYSCLK_FREQ_72MHz
delay_init(72);     //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  uart_init(9600); //串口初始化为9600
  LED_Init(); //LED端口初始化
  KEY_Init(); //初始化与按键连接的硬件接口
LCD_Init();
Adc_Init();
POINT_COLOR=RED;//设置字体为红色 
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"ADC TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2010/12/30");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,"ADC_CH0_VAL:");      
LCD_ShowString(60,150,"ADC_CH0_VOL:0.000V");
     
for(i=0;i<100;i++)
{
adcx=Get_Adc(ADC_Channel_0);


    printf("%d\n",adcx);
     LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值   
  
LED0=!LED0;

  delay_us(79);

}







将信号发生器发出的1.65v、50Hz的信号接到了开发板的PA0口。程序除了main.c的后面改了一点外,其他的都是ADC实验的程序。
这是串口小助手上显示的值的截图,为什么不是连续的啊?  逐渐升高或逐渐降低啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 13:28:38 | 显示全部楼层
先不说别的,就我所知,发送占用的时间是不一定的,所以这样也不奇怪


你可以尝试采集一段,一起发送出来
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-4-22 14:07:41 | 显示全部楼层
回复【2楼】聚东风:
---------------------------------
如何实现采集一段,一起发送啊?我还想把ADC后的每个数据都放在s里。
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 14:20:16 | 显示全部楼层
只要建立两个for不就好啦,把发送移动到第二个FOR里面
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-4-22 14:49:17 | 显示全部楼层
回复【4楼】聚东风:
---------------------------------
for(i=0;i<513;i++)

{
adcx=Get_Adc(ADC_Channel_0);
  
       LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值   
temp=(double)adcx*(3.3/4096);


   
LED0=!LED0;

   s.real=temp;
   
 

   delay_us(79);

}
   for(i=0;i<513;i++)
{
printf("%.4f\n",s.real);
}

还是不连续的值,还有好多零值。
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 16:05:33 | 显示全部楼层
那 LCD_ShowNum(156,130,adcx,4,16);去掉看看


如果还是好多0你就要用示波器看看信号正常不,还有I/O端口配置的问题
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-4-22 16:20:05 | 显示全部楼层
回复【6楼】聚东风:
---------------------------------
可以了,太感谢了,不过还是要问问,这是为什么呢?
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 16:50:28 | 显示全部楼层
你采集的时候就专心点采集,还弄一个执行时间不知道要多少时间的家伙在那浪费时间肯定不准的
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 16:51:07 | 显示全部楼层
一般而言,显示,通信这些都跟采集冲突的
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-4-22 16:56:32 | 显示全部楼层
回复【8楼】聚东风:
---------------------------------
我是为了一周期采集256个点,所以我就弄了个延时。
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-22 17:09:33 | 显示全部楼层
256点。。基本上你要把延时都改小吧。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 08:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表