OpenEdv-开源电子网

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

ADC实验,不管电压如何变化读出来的数据都是1023!求助

[复制链接]

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
发表于 2015-3-2 11:53:23 | 显示全部楼层 |阅读模式
5金钱
void ADC_Init(void)
{
   ADC2_DeInit();
   ADC2_Init(ADC2_CONVERSIONMODE_CONTINUOUS , ADC2_CHANNEL_10, ADC2_PRESSEL_FCPU_D18,\
   ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL10,DISABLE);
   ADC2_ITConfig(DISABLE);
   ADC2_Cmd(ENABLE);
   ADC2_StartConversion();
}
void Tim1_Init(void)
{
  TIM1_TimeBaseInit(16,TIM1_COUNTERMODE_UP,50000,0);
  TIM1_ARRPreloadConfig(ENABLE);
  TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);
  TIM1_Cmd(ENABLE);
}
#pragma vector=0xD
@far @interrupt  void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{
  Conversion_Value = ADC2_GetConversionValue();
    Delay_ADC(0xffff);
    Delay_ADC(0xffff);
    ADC_Value(Conversion_Value); //把读取的值显示在LCD上
    TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
}

int main()
{
uint16_t Pm=0;
    int cnt=0,Pm_25=0;
uint8_t PM[10]={0};
char *s=0;
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  // 时钟配置
        /*16位数据低8位*/
    //SystemClock_Init(HSE_Clock);
//SPI_FLASH_Init();    
USART_Configuration();
enableInterrupts(); 
KEY_Init();
GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOF, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);  //LCD背光

GPIO_WriteHigh(GPIOC, GPIO_PIN_2);  //lcd背光灯关

GPIO_RST();
LCD_init(); // 液晶显示器初始化
LCD_first();
ADC_Init();
 Tim1_Init();
while(1)
{
}
}


最佳答案

查看完整内容[请看2#楼]

回复【14楼】正点原子: --------------------------------- 已经解决了  谢谢! 但是现在又有另外的问题,我选择207的ADC2 2个通道  一个检测电池的电压,一个检测充电IC的电压  现在的问题是  调用一个通道没问题  2个同时调用就有问题了  2个通道读取到的值互换了,我是每隔1S读取其中一个通道的值,在隔1S读取另外一个通道的值。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 11:53:24 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
已经解决了  谢谢!
但是现在又有另外的问题,我选择207的ADC2 2个通道  一个检测电池的电压,一个检测充电IC的电压  现在的问题是  调用一个通道没问题  2个同时调用就有问题了  2个通道读取到的值互换了,我是每隔1S读取其中一个通道的值,在隔1S读取另外一个通道的值。
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 12:07:43 | 显示全部楼层
补充下  我用的芯片是STM8S207R8     ADC  IO上外接一个10K的电阻
回复

使用道具 举报

19

主题

234

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-8
在线时间
10 小时
发表于 2015-3-2 13:49:47 | 显示全部楼层
這不是癈 話......你都把 ADC IO ULL HI 了....永遠量到最大值呀
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2015-3-2 15:34:18 | 显示全部楼层
回复【2楼】234280158@qq.com:
---------------------------------
你的采样电路呢?采样电路没有问题,就是程序的问题了。
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 15:35:27 | 显示全部楼层
回复【3楼】溫柔一刀:
---------------------------------
  GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0,  /*!< Output push-pull, high level, 10MHz */

不是推挽输出么    我是新手       那要怎么设置 我代码里面没有初始化  ADC  IO
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 15:45:34 | 显示全部楼层
回复【3楼】溫柔一刀:
---------------------------------
我把ADC  IO  设置成推挽 高阻抗输出  还是一样
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-3-2 15:57:41 | 显示全部楼层
回复【6楼】234280158@qq.com:
---------------------------------
应该是模拟输入或者浮空输入吧   32位是这样  没弄过STM8
学无止境
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 17:13:25 | 显示全部楼层
回复【7楼】jermy_z:
---------------------------------
我看百度上面说是推挽 或者高阻抗都可以   但是不要加上啦电阻
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-2 18:10:52 | 显示全部楼层
回复【4楼】TinyBoy:
---------------------------------
电路  就是STM8S207R8的AIN10  IO外接一个10K的电阻 并联一个100PF的电容接地   VSSA和VREF-接地  就是这样了
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2015-3-3 08:20:51 | 显示全部楼层
回复【9楼】234280158@qq.com:
---------------------------------
以前没用过ADC?你看看公式就知道了那些量是变量和需要那些参数了。
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-3 09:24:30 | 显示全部楼层
回复【10楼】TinyBoy:
---------------------------------
以前确实没用过,公式?,不就是读出来的值*3.3/4097么
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2015-3-3 09:51:05 | 显示全部楼层
回复【11楼】234280158@qq.com:
---------------------------------
读出来的值是从你采样电路来的,是变量,3.3是怎样来的,你要确定,怎样来,有没有3.3V,温不稳定,4097你确定设置的是12位精度,每个环节都确定了就OK了。
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-3 15:50:57 | 显示全部楼层
回复【12楼】TinyBoy:
---------------------------------
前面我弄错了  我的STM8S207是10位精度     所以是1024  但是 无论我电压怎么变化  我读出来的值一直是1023    新手  求指教  谢谢!! 我硬件没问题么?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-3 22:14:42 | 显示全部楼层
回复【13楼】234280158@qq.com:
---------------------------------
可能adc配置有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-5-30
在线时间
0 小时
发表于 2015-3-7 20:46:44 | 显示全部楼层
先看下硬件有没有问题,没问题的话,软件Debug 下直接看 AD Value H或者L寄存器的值,AD口好像不用配置。
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-9 12:21:37 | 显示全部楼层
回复【15楼】天秤星座:
---------------------------------
已经解决了  谢谢
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-1-30
在线时间
0 小时
 楼主| 发表于 2015-3-9 12:26:11 | 显示全部楼层
ADC2->CR2=0x08;//数据右对齐
ADC2->CR1=0x72;//时钟分频系数18,连续采样
ADC2->CSR=0x0a;  //选择通道10
ADC2->CR1=0x01;
for(i=0;i<100;i++);
ADC2->CR1=ADC2->CR1|0x01;  //启动转换
while((ADC2->CSR&0x80)==0);//等待转换完成
ADC2->CSR&=~0x80;  //清除EOC转换完成标志
tempH=ADC2->DRH;
tempL=ADC2->DRL;
Conversion_Value1=tempH<<8|tempL;
ADC_Value(Conversion_Value1);



ADC2->CR2=0x08;//数据右对齐
ADC2->CR1=0x72;//时钟分频系数18,连续采样
ADC2->CSR=0x0b;  //选择通道11
ADC2->CR1=0x01;
for(i=0;i<100;i++);
ADC2->CR1=ADC2->CR1|0x01; //启动转换
while((ADC2->CSR&0x80)==0);//等待转换完成
ADC2->CSR&=~0x80;  //清除EOC转换完成标志
tempH=ADC2->DRH;
tempL=ADC2->DRL;
Conversion_Value2=tempH<<8|tempL;
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-9 22:55:15 | 显示全部楼层
回复【17楼】234280158@qq.com:
---------------------------------
 分时读取吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

44

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-7-1
在线时间
58 小时
发表于 2015-4-1 11:07:57 | 显示全部楼层
回复【18楼】234280158@qq.com:
---------------------------------
楼主是怎么解决的啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 18:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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