这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » AD,DA 紧急求助:AD与DA问题!

共2条 1/1 1 跳转至

AD,DA 紧急求助:AD与DA问题!

院士
2006-09-17 18:14:16     打赏
AD,DA 紧急求助:AD与DA问题!



关键词: 紧急     求助     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问     请教各位,大家都说说意见,新手没办法了!  情况是这样的:: 

我现在是用飞利浦的一款LPC915的芯片, 芯片里有4个AD和一个DA通道,我主要是用来利用这一
个芯片先把外接信号通过此片的一路AD然后同样利用此片的一路DA,信号输出,也就是一脚接信号输入,通过内部A
D,然后DA,信号就从另个引脚输出,大概是个100~200mv左右的随机信号,因为我想利用程序在内部进行一个信号峰
值的判断,然后输出一个平均的或者最高的!!  现在问题是这样理论上能不能成?? 还有就是我现在程序就只是利用
C编了一个AD然后DA两个模块的程序一并,可运行根本就没作用,从引脚给个固定〈VDD的电压信号输入,输出得不到那个信号电压
值???
   请教各位,我上述有那些不妥之处?  不管多大多小的意见,我希望能都给意见,这个小小项目十一前要有结果,不然就挂了! 后附新手一简单程序:


//#include "reg915.h"
#define uchar unsigned char
// 特殊寄存器定义
sfr  ADCON1    = 0x97;
sfr  ADINS     = 0xA3;
sfr  ADMODA    = 0xC0;
sfr  ADMODB    = 0xA1;
sfr  AD1DAT0   = 0xD5;
//sfr  AD1DAT1   = 0xD6;
//sfr  AD1DAT2   = 0xD7;
sfr  AD1DAT3   = 0xF5;
sfr  P0M1      = 0x84;
sfr  P0M2      = 0x85;
sfr  PT0AD     = 0xF6;

void delayNS(unsigned char no);
void ADC_Init();
void DAC_Init();
uchar ADValue;
main()
{
    
    P0M1 = 0x02;            //P0.1设置为仅为输入状态,P0.4设置为准双向模式。
    P0M2 = 0x00;            //
   while(1)
   {
    ADC_Init();
    delayNS( 10 );
    DAC_Init();
    delayNS( 10 );
   }
}


void ADC_Init()
     {
       ADINS  = 0x10;           //AD10转换
       ADMODA = 0x10;           // 0001 0000 单次固定通道转换
       PT0AD  = 0x12;           // P0.1设置为禁止数字输入。
       ADMODB = 0x20;           // 500Khz < ADC CLK < 3.3Mhz.
       ADCON1 = 0x05;           //立即启动转换模式  
       ADValue = AD1DAT0;       //将AD转换获得的数据存入ADValue
       delayNS( 10 );
       ADCON1&= 0xF7;          //清AD/DA转换完成标志位
     
     }

void DAC_Init()
    {
      
      ADINS  = 0x80;           // AD13转换模式   
      ADMODA = 0x10;           // 0001 0000 单次固定通道转换
      PT0AD  = 0x00;          // P0.1和P0.4 设置为禁止数字输入。
      ADMODB = 0x28;           // 500Khz < ADC CLK < 3.3Mhz. 模/数转换置位
      ADCON1 = 0x05;           //立即启动转换模式
      AD1DAT3 = ADValue;       //AD0DAT3的值为DAC1输出的控制量
      delayNS( 10 );
      ADCON1&= 0xF7;          //清AD/DA转换完成标志位
    }


void delayNS(unsigned char no)
{
     unsigned char i;
     for(; no>0; no--)
     {
         for(i=0; i<1000; i++);
             
     }
}     
1: re这里有范例
http://www.zlgmcu.com/philips/philips-yingrong-lpc900.asp

另外,ADDA不能同时使用,您使用AD的时候,DA就不行了.
使用DA的时候,AD就不行了,

所以这个流程您得自己考虑

也可以考虑 比较器做AD,比较器做DA. 2: 谢!!  首先,万分感谢,对新手的建议!! 资料我早已下了!关键是自己迷茫东西的不少!

  如果ADDA不能同时在一块芯片上运用,是先用915上的比较器对

我输入的100~200mv左右的随机信号进行AD,然后利用915的DA  程序在内部进行一个信号峰值的判断,然后输出一个平均的或者最高.
   按各位的有经验的人士来看, 是把AD放在芯片里, DA放在外围好? 还是DA放在芯片里, AD放在外围好?  那种实施更适合,

   哎! 没办法, 周围这方面的人太少了,我也是个还正在成长的菜菜!!
      3: 感觉原来方案已经是挂了!     对100~200mv左右的信号进行取平均或者取几秒的峰值,得出一个可以随信号变化的值。这本来是设计的初衷,现在觉得按我以前的想法似乎没法实现, 不知道大家有没有更好办法,要求用单片机! 希望大家能指教一番! 4: 有经验的请点见解哦-----   如果用单个915的芯片,实现上述要求,似乎不能,按原来我的想法AD后,直接把AD后的寄存器的值赋给DAC的输入,然后就可以在DAC输出引脚得到信号了!!!  
   

   现在我想AD还是用915做,但AD后是数字量,那个数字量 取平均或者取几秒的能用程序实现么 (数字量用程序可以控制比较得出最大值或平均么)? 但后续怎么转化成一个信号变化的电压值(比如可以直观的用万用表测的-----打个比方)?感觉在这2点上没有什么经验了!  

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]