移位寄存器驱动-时序问题

调试背景

部件:两块级联移位寄存器芯片、4*7段数码管,单片机到移位寄存器线长 > 20cm, 单片机3v3, 移位寄存器5v,未添加电压匹配芯片
问题:引入强烈干扰以后,数码管数据显示异常,轻微时闪烁,严重时显示8888

/*数据线*/
#define SDA_H() xx
#define SDA_L() xx

/*时钟线*/
#define CLK_H() xx
#define CLK_L() xx

/*锁存线*/
#define SR_H() xx
#define SR_L() xx

/*伪代码逻辑如下*/
void SerialLedDisplayCtrl(uint16_t data){
	SR_L();
	for(uint8_t i = 0; i < 16; ++i){
		CLK_L();
		data & 0x01 ? SR_H() : SR_L();
		delay_us(1);
		CLK_H();
		delay_us(1);
		data >>= 1;
	}
	SR_H();
}
/*上述代码在强烈的干扰下表现性能不如以下逻辑*/
void SerialLedDisplayCtrl(uint16_t data){

	for(uint8_t i = 0; i < 16; ++i){
		data & 0x01 ? SR_H() : SR_L();
		delay_us(1);
		CLK_L();
		delay_us(1);
		CLK_H();
		data >>= 1;
	}
	SR_L();
	delay_us(1);
	SR_H();
}
/*去掉所有延时表现更好一点儿*/
void SerialLedDisplayCtrl(uint16_t data){

	for(uint8_t i = 0; i < 16; ++i){
		data & 0x01 ? SR_H() : SR_L();
		CLK_L();
		CLK_H();
		data >>= 1;
	}
	SR_L();
	SR_H();
}

分析:
在未引入干扰前,数码管尽管电压未匹配,但仍然正常工作,在引入干扰后,单片机的输出信号变得异常多的毛刺,造成高低电平异常。
第一种逻辑在理论上是没有任何问题的,和其他两种没有任何区别。
但后面两种的抗干扰能力相对来说更强,因为其低电平持续的时间更短,毛刺不容易导致高电平的产生,更不容易导致上升沿的产生,对于时钟信号和锁存信号都存在同样的问题,因此是一个优化的方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值