打印
[51单片机]

请问怎么用软件的方式去除掉DCA0832出来的杂波

[复制链接]
3461|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 尚善励挚 于 2014-8-18 14:51 编辑

如题,dac0832 模拟出来的 硬件电路没问题,软件哪里改才能去掉

void dac0832_data(unsigned char Data_value)
{
        DAC0832_CS = 0;
        DAC0832_WR = 0;
        DAC0832_PORT = Data_value;        
//        DAC0832_WR = 1;
//        DAC0832_CS = 1;        
}
void Dac0832_End(void)
{
         DAC0832_CS=1;
         DAC0832_WR=1;
}


IMG_20140818_142640.jpg (984.64 KB )

波形

波形

相关帖子

沙发
尚善励挚|  楼主 | 2014-8-18 14:43 | 只看该作者
不要沉!

使用特权

评论回复
板凳
尚善励挚|  楼主 | 2014-8-18 15:21 | 只看该作者
今天没人在家么?

使用特权

评论回复
地板
moqi816| | 2014-8-18 16:34 | 只看该作者
你确定硬件电路没问题?

使用特权

评论回复
5
moqi816| | 2014-8-18 16:38 | 只看该作者
你可以输出一个方波波形,看看标准吗,有杂波没

使用特权

评论回复
6
尚善励挚|  楼主 | 2014-8-18 16:48 | 只看该作者
moqi816 发表于 2014-8-18 16:34
你确定硬件电路没问题?

确定 谢谢

使用特权

评论回复
7
尚善励挚|  楼主 | 2014-8-18 16:50 | 只看该作者
moqi816 发表于 2014-8-18 16:38
你可以输出一个方波波形,看看标准吗,有杂波没

有 但是我给dac0832_data(50);一直是给50的值,就没有杂波

使用特权

评论回复
8
moqi816| | 2014-8-18 17:03 | 只看该作者
你把程序贴全。0832我用的时候也没什么滤波,但是很标准啊

使用特权

评论回复
9
icekoor| | 2014-8-18 17:38 | 只看该作者
示波器测的是什么?既不是方波也不是恒定量,是不是被其他中断程序打断了。

使用特权

评论回复
10
lidaji0| | 2014-8-18 21:54 | 只看该作者
icekoor 发表于 2014-8-18 17:38
示波器测的是什么?既不是方波也不是恒定量,是不是被其他中断程序打断了。 ...

使用特权

评论回复
11
lidaji0| | 2014-8-18 21:55 | 只看该作者
我擦,我这么灌水会不会被关禁闭啊

使用特权

评论回复
12
QuakeGod| | 2014-8-19 07:01 | 只看该作者
DAC0832内部是带双缓冲的,肯定不会出现你说的那些问题,肯定是硬件或程序时序的问题。

使用特权

评论回复
13
尚善励挚|  楼主 | 2014-8-19 08:32 | 只看该作者
moqi816 发表于 2014-8-18 17:03
你把程序贴全。0832我用的时候也没什么滤波,但是很标准啊

void Timer0_isr(void) interrupt 1           using 1
{          
    TH0=(65536-1105)/256;             
        TL0=(65536-1105)%256;
  
        Time_base++;   //用来制作波形的时间基数 100us一个基数
        last_data = P0;  //存储P0的值

   if(Treat_Adult_Flag == 1)
   {
        if(Strength_I_Set >= 1)
        {       
                                          
                if(Time_base<4)  //15
                 { dac0832_data(Strength_I_Set*5);
                 }                          
                else if((Time_base>=4)&&(Time_base<5))  //20
                 {        
                   dac0832_data(0);
                 }
                 else if((Time_base>=5)&&(Time_base<8))//35
                  { dac0832_data(Strength_I_Set*5);
                 }
                 else if((Time_base>=8)&&(Time_base<32))  //160
                  {        
                   dac0832_data(0);
                 }
                else if(Time_base>=125)
                 { Time_base=0;}                   
         }
这个是定时器里面的

使用特权

评论回复
14
尚善励挚|  楼主 | 2014-8-19 08:33 | 只看该作者
icekoor 发表于 2014-8-18 17:38
示波器测的是什么?既不是方波也不是恒定量,是不是被其他中断程序打断了。 ...

有可能

使用特权

评论回复
15
尚善励挚|  楼主 | 2014-8-19 08:33 | 只看该作者
lidaji0 发表于 2014-8-18 21:55
我擦,我这么灌水会不会被关禁闭啊

大师 渡人就是渡己

使用特权

评论回复
16
尚善励挚|  楼主 | 2014-8-19 08:34 | 只看该作者
QuakeGod 发表于 2014-8-19 07:01
DAC0832内部是带双缓冲的,肯定不会出现你说的那些问题,肯定是硬件或程序时序的问题。
...

时序问题?怎么个说法

使用特权

评论回复
17
尚善励挚|  楼主 | 2014-8-19 08:40 | 只看该作者
尚善励挚 发表于 2014-8-19 08:32
void Timer0_isr(void) interrupt 1           using 1
{          
    TH0=(65536-1105)/256;             

重新贴下
void Timer0_isr(void) interrupt 1           using 1
{          
    TH0=(65536-1105)/256;             
        TL0=(65536-1105)%256;
  
        Time_base++;   //用来制作波形的时间基数 100us一个基数
        last_data = P0;  //存储P0的值

   if(Treat_Adult_Flag == 1)
   {
        if(Strength_I_Set >= 1)
        {       
                                          
                if(Time_base<4)  //15
                 { dac0832_data(50);
                 }                          
                else if((Time_base>=4)&&(Time_base<5))  //20
                 {        
                   dac0832_data(0);
                 }
                 else if((Time_base>=5)&&(Time_base<8))//35
                  { dac0832_data(50);
                 }
                 else if((Time_base>=8)&&(Time_base<32))  //160
                  {        
                   dac0832_data(0);
                 }
                 if((Time_base>=32)&&(Time_base<35))        //175
                  { dac0832_data(100);
                 }
                 else if((Time_base>=35)&&(Time_base<36))        //180
                  {
                   dac0832_data(0);
                 }
                 else if((Time_base>=36)&&(Time_base<39))        //195
                  { dac0832_data(100);
                 }
                 else if((Time_base>=39)&&(Time_base<125)) //625
                  {
                   dac0832_data(0);
                 }
                else if(Time_base>=125)
                 { Time_base=0;}               
         }
           Dac0832_End();
   }       
        P0 = last_data;        //将存储的值给P0
}

使用特权

评论回复
18
greenteagl| | 2014-8-19 13:47 | 只看该作者
0832, 三种方式, 双缓冲、单缓冲、直通,你用的哪种方式?
我是小白啊,最近也看了0832

使用特权

评论回复
19
greenteagl| | 2014-8-19 13:50 | 只看该作者
定时器的中断子程序 处理的东西太多了吧

使用特权

评论回复
20
尚善励挚|  楼主 | 2014-8-19 14:10 | 只看该作者
greenteagl 发表于 2014-8-19 13:47
0832, 三种方式, 双缓冲、单缓冲、直通,你用的哪种方式?
我是小白啊,最近也看了0832 ...

单缓冲

使用特权

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

本版积分规则

23

主题

144

帖子

0

粉丝