我现在要用51单片机驱动一个adc(adc5310),要把cs拉低,clk发送时钟,data发生数据,数据在clk的上升沿取样(原本是下降沿,现在在adc的clk前加了一个反相器),一共要发送16位数据。我用示波器抓到的波形跟我写的很不一样(示波器显示15个时钟周期,cs几乎没出现高电平)。为什么会这样?下面是我写的两个驱动函数,有高手能看出问题出在哪里吗?
void SPI_SendByte(unsigned int dt)
//网卡工作在SPI协议的从模式0:数据在时钟的上升沿锁定,下降沿输出
{
unsigned char y;
cs=1;
sclk=0;
Delay2us();
cs=0;
for(y=16;y>0;y--)
{
if(dt&0x8000)
{
din=1;
}
else
{
din=0;
}
sclk=1;
dt sclk=0;
}
}
一个关于用示波器观看单片机输出波形的问题。
答案:2 悬赏:80 手机版
解决时间 2021-03-24 00:56
- 提问者网友:雨不眠的下
- 2021-03-23 21:35
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-03-23 21:56
需要给你完成设计吗
全部回答
- 1楼网友:思契十里
- 2021-03-23 23:26
如前面回答者所言, 根据电路图来分析是最好的.但依据前面交流, 建议大致按以下步骤查找问题:
1. 首先, 暂不要连接运放的输出到单片机mcu, 而是用mcu的供电vdd和gnd去触发中断引脚,
看mcu是否能进入中断. 若不能, 则是mcu问题; 若能, 则是产生方波的运放电路问题.
2. mcu的可能问题: i/o配置是否正确, 现代的mcu一般都要进行"i/o方向"/"内部上拉电阻"等配置, 程序仿真一般不能检测到i/o配置错误问题
3. 运放电路的可能问题: 双极型运放输出的最高电平一般比vcc/vdd低大约1.5v, 可用示波器测量方波的高低电平分别是多少, 是否满足mcu的高低电平要求, 如果是这个问题, 用电压跟随器也是不能解决的, 可以尝试使用"轨到轨"的mos运放.
4. "低电平毛刺"一般是由mcu引起的, 你可以示波器观察一下, "毛刺"是否与mcu时钟信号频率同步. 但"毛刺"不会引起mcu不响应中断, 一般会影响系统的稳定性, 完全去除"毛刺"几乎是不可能的, 但用电源去耦电路可减小其影响, 即在各vdd/vcc引脚加r/c(串联10ohm电阻+并联1uf电容)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯