完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
新手,目前在用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个回答
|
|
帮顶....
|
|
|
|
先别做波形,先用简单的程序做出来DA输出,看看有么有问题,比如送个0,128,255这些数据
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1113浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 04:17 , Processed in 1.238854 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号