单片机学习小组
直播中

陈逸群

7年用户 168经验值
私信 关注

PCF8591和90C51单片机做波形发生器,波形最大值达到218时波形就顶部失真了?

新手,目前在用90C51单片机和PCF8591做一个波形发生器,PCF8591只用到了DA功能,8591的寄存器是8位的,那么它可以转化的波形峰峰值不应该是256么,我的波形峰峰值为200,为什么波形表中间值为100时没问题,但中间值为128时,即波形最大值达到218时波形就顶部失真了?
附上相关程序:[C] 纯文本查看 复制代码
void get_sindata(){uint i;for(i=0;i<256;i++)sin_tab=(sin(2*PI*i/256)+1)*100;}void  sinwave(){  uint i;  for(i=0; i<256; i++)  {    IICSendByte(sin_tab);//此处改为IICSendByte(sin_tab+28)时失真[C] 纯文本查看 复制代码
    check_ACK();                  //检查应答位[C] 纯文本查看 复制代码
    if(flag == 1)         {           SystemError = 1;           return;                    //置错误标志位SystemError         }  }}main(){get_sindata();DAC_PCF8591(0x40);  while(1)    {   keyscan();//键盘扫描函数,输出结果为out1~out4,对应四种波形。    while(out1&START)   {         sinwave();           //输出正弦波         keyscan();   }       while(out2&START)   {         Square();           //输出方波         keyscan();   }   while(out3&START)    {         Triangle();        //输出三角波         keyscan();   }          while(out4&START)   {         Sawtooth();        //输出锯齿波         keyscan();   }    }}

回帖(2)

李平

2019-6-4 09:17:11
帮顶....
举报

阿信509

2019-6-4 11:37:28
先别做波形,先用简单的程序做出来DA输出,看看有么有问题,比如送个0,128,255这些数据
举报

更多回帖

发帖
×
20
完善资料,
赚取积分