新手,目前在用90C51单片机和PCF8591做一个波形发生器,PCF8591只用到了DA功能,8591的寄存器是8位的,那么它可以转化的波形峰峰值不应该是256么,我的波形峰峰值为200,为什么波形表中间值为100时没问题,但中间值为128时,即波形最大值达到218时波形就顶部失真了?
附上相关程序:
[mw_shl_code=c,true]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)时失真[/mw_shl_code]
[mw_shl_code=c,true] check_ACK(); //检查应答位[/mw_shl_code]
[mw_shl_code=c,true] 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();
}
}
}[/mw_shl_code]
|