打印
[PIC®/AVR®/dsPIC®产品]

请教一下各位,ADC转换弄了好长时间了都没弄好。PIC16F1503

[复制链接]
3588|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18271623385|  楼主 | 2015-3-18 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int


void main()
{
uint value;
value=0;

OSCCON=0x6a;    //系统时钟初始化,4MHZ
OSCSTAT=0x13;   //系统时钟初始化,4MHZ

TRISA2=1;
ANSA2=1;      //把RA2作为AD转换输入通道
TRISC2=0;
LATC2=0;

ADCON0=0x90; //选择通道AN2,使能AD enable
ADCON1=0x80;    //转换结果右对齐, 选择内部时钟,参考电压为VDD。
NOP();
NOP();
NOP();
NOP();     //一段时间的延时,让单片机采集模拟电压
GO_nDONE=1;
while(1)
{
  if(GO_nDONE==0)
  {
   value=(unsigned int)ADRESH;
   value= value<<8;
   value += ADRESL;  //低八位加入ADRESL的值。
   if(value<512)
    LATC2=0;
   else
    LATC2=1;
   GO_nDONE=1;
  }
}
}
在RA2端口不接外部电压时,RC2是5V电压。当RA2外接电压时,RC2怎么就非常不稳定,不是5V,也不是0V。请大家指教一下,谢谢各位。。。。   我用的是PIC16F1503的片子。
沙发
JY-DX-JY| | 2015-3-18 15:50 | 只看该作者
外部电压接的几V?

使用特权

评论回复
板凳
18271623385|  楼主 | 2015-3-18 16:18 | 只看该作者
JY-DX-JY 发表于 2015-3-18 15:50
外部电压接的几V?

外部电压我试了好几个值,结果都一样。这几个值都在5V以内

使用特权

评论回复
地板
NE5532| | 2015-3-18 20:22 | 只看该作者
RC2是用来做啥的?

使用特权

评论回复
5
18271623385|  楼主 | 2015-3-19 10:45 | 只看该作者
NE5532 发表于 2015-3-18 20:22
RC2是用来做啥的?

我只是写一个ADC测试程序,看ADC程序能不能写好,RC2只是一个测试端口。

使用特权

评论回复
6
NE5532| | 2015-3-19 13:10 | 只看该作者
18271623385 发表于 2015-3-19 10:45
我只是写一个ADC测试程序,看ADC程序能不能写好,RC2只是一个测试端口。

测试端口关5V电压什么事?

使用特权

评论回复
7
opal11| | 2015-3-19 15:24 | 只看该作者
--------楼主:以下是错误的---------
ADCON0=0x90; //选择通道AN2,使能AD enable

--------要更改为---------
ADCON0=0x09; //选择通道AN2,使能AD enable

使用特权

评论回复
8
18271623385|  楼主 | 2015-3-19 22:48 | 只看该作者
opal11 发表于 2015-3-19 15:24
--------楼主:以下是错误的---------
ADCON0=0x90; //选择通道AN2,使能AD enable

首先谢谢你的回答   这确实是我弄错了。。。 但改过来后还是没达到理想效果,感觉在采集ADC的转换结果时,总是出一些问题。
比如:当输入模拟电压小于2.5V时,也就是采集的value值小于512,按照程序,RC2端口应该输出低电平;当输入模拟电压大于2.5V时,RC2输出的电压是高电平。。在实际接电路做实验时,不管输入的模拟电压是多少,RC2总是低电平。    我不知道我的问题出在哪?    这位朋友你既然能帮我找到具体的寄存器该怎么配置,我想你应该写过这块单片机的程序吧?   能不能给我一个你写的AD转换的程序呢?   非常谢谢

使用特权

评论回复
9
NE5532| | 2015-3-21 19:16 | 只看该作者
18271623385 发表于 2015-3-19 22:48
首先谢谢你的回答   这确实是我弄错了。。。 但改过来后还是没达到理想效果,感觉在采集ADC的转换结果时 ...

你的问题在于调试方法根本就不对,本来非常丰富的AD输出信息被你简略成了1和0两个输出了。你应该是想法看到AD转换后,AD输出寄存器内的结果,才能知道是什么地方不对。而且楼主描述问题根本就不清楚,你不说是输出,谁能知道你在干什么呢???

使用特权

评论回复
10
18271623385|  楼主 | 2015-3-23 15:45 | 只看该作者
NE5532 发表于 2015-3-21 19:16
你的问题在于调试方法根本就不对,本来非常丰富的AD输出信息被你简略成了1和0两个输出了。你应该是想法看 ...

这实际上就是一个电池电量检测的一个程序。   当电池电量低时,它的电压就会降低,当电压降到某一个值时,使对应端口的红色LED发光就可以了。所以我就把本来非常丰富的AD输出信息被你简略成了1和0两个输出了,这就够了。

使用特权

评论回复
11
NE5532| | 2015-3-23 16:44 | 只看该作者
18271623385 发表于 2015-3-23 15:45
这实际上就是一个电池电量检测的一个程序。   当电池电量低时,它的电压就会降低,当电压降到某一个值时 ...

目的,过程和手段是不同的东西。

使用特权

评论回复
12
18271623385|  楼主 | 2015-3-23 18:34 | 只看该作者
NE5532 发表于 2015-3-23 16:44
目的,过程和手段是不同的东西。

我是新手,要是会很多手段就不在这混了。。。。可能我用的方法在高手看来很幼稚,可我目前的水平就只会这么做。  请问还能给我一个建议吗?今天试着用PICKIT3在线仿真,发现这款单片机要一个仿真头才可以。    弄了好久了还没弄好。。:L   Thanks in advance.

使用特权

评论回复
13
NE5532| | 2015-3-23 21:03 | 只看该作者
已经建议你了,你木有认真看,虽然你要的只是2值化的输出,但是为了确定AD工作正确,你需要把AD的输出结果完整地送出来看。

使用特权

评论回复
14
18271623385|  楼主 | 2015-3-23 22:33 | 只看该作者
NE5532 发表于 2015-3-23 21:03
已经建议你了,你木有认真看,虽然你要的只是2值化的输出,但是为了确定AD工作正确,你需要把AD的输出结果 ...

好的    我再研究一下   谢谢:)

使用特权

评论回复
15
它山之石| | 2015-8-5 15:12 | 只看该作者
可能你的RC2配置有问题。系统上电时候RC2默认是模拟输入,需要将其模拟功能关闭。否则在进行读修改写的过程中,可能得到预期之外的结果。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝