如何用示波器调试波形

无论是做嵌入式硬件工程师,还是做嵌入式软件工程师,示波器的使用都可以算是必备技能了,因为我们在做一些牵扯到时序的项目时,遇到一些问题,看是看不出来的,用示波器抓波形往往更直观一些。恰好手头一个项目用到了SN74HC164PWRG4 串转并8位输出移位寄存器,这里以此为例讲下如何调试波形。

74HC164简介

1.管脚图
图1是该芯片管脚图,A,B是与非门输入端,Qa~Qh是8位并行输出端,CLR是清除寄存器内数据,CLK是时钟管脚。
在这里插入图片描述

图1 管脚图

2.逻辑图
从图2可以看出QA=!!(A&B)=A&B,QB=!!QA=QA,即若B=1,则QA与A逻辑关系保持一致,另外QH是第一个时钟时的数值,QA是第八个时钟时的值。
在这里插入图片描述

图2 逻辑图

3.真值表
图3是74H164的真值表,当CLR为0时,可以认为芯片不工作
在这里插入图片描述

图3 真值表

案例

硬件原理图

在这里插入图片描述

图4 实际接法

图4是项目中的实际接法,用IO口1作为芯片唯一的数据输入端,IO口2模拟时钟输入端,输出端只用到了QA~QD(LED灯,低电平点亮)。

源代码

#define CHIPCLK PAout(3)  //PA3作为时钟输入
#define CHIPDAT PAout(4) //PA4作为数据输入

/*参数高四位表示QA,QB,QC,QD,QA为最高位,为了符合人的习惯,点亮将相应位置一就行*/
 /*中间加的几个延时使时钟与数据错开,看着更舒服*/
  void led(uint8_t state)
 {
    uint8_t i;
	 for(i=0;i<8;i++)  //需要移位8次(本项目实际4次也可以)
	 {
	   CHIPCLK=0;    //和下面 CHIPCLK=1;组成一个上升沿用于数据移位
		 delay_us(10); //延时10us,记作delay_1
		 if(state&0x01)  //从低位右移,数据切换
			 CHIPDAT = 0;
		 else
			 CHIPDAT = 1;	 
		  delay_us(10); //delay_2
		  CHIPCLK=1;//和上面 CHIPCLK=0;组成一个上升沿用于数据移位
		  state>>=1; //数据右移,准备下一次移位
		  delay_us(20); //delay_3
	 }
	 
 }
 int main(void)
 {	 
	 int j = 0;
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置系统组优先级
	 delay_init(); //延时初始化
    RCC_Config();  //打开GPIOA时钟
	GPIO_Config(); //将PA3和PA4配置成推挽输出
	 while(1)
	 {
	 		  led(0xA0);  //0x1100 0000 点亮LED1,LED3
	 }
	 
 }
 

LED(0XA0)波形分析

上面那个代码是结合实际情况写的,对应波形看着不太协调(但是仅仅是看着不太协调,没有任何问题),调用led(0xa0),输出的8位应该是0101 1111,又因为是先发低位,所以按时序实际是1111 1010,看懂应该没问题,下面截图,黄色是时钟,蓝色是数据
1首先看下正确波形
在这里插入图片描述
看上图,从左至右,箭头处对应的是8个时钟上升沿,看相应时刻的数据电平 1111 1010,和算的一样,没毛病,下面以第8个时钟沿为例,分析下代码中三个延时的作用。
2.去掉delay_1(看代码延时注释)
在这里插入图片描述
结合上面代码分析,本来在第七个时钟的下降沿拉低之后,延时10us,蓝色高电平拉低,然后去掉delay_1时,在时钟拉低瞬间,数据切换蓝色电平拉低,瞬间觉得波形不好看了有木有(主要是不好分析波形了)。
2去掉delay_2
在这里插入图片描述
看红色箭头这里,本来蓝色电平拉低之后延时10us,时钟才拉高,结果去掉之后,蓝色电平拉低瞬间,时钟拉高,这时候波形更不协调了,那么delay_1和delay_2都去掉呢?
在这里插入图片描述
可以看到图形基本走样了,时钟线快变成一条直线。
3.去掉delay_3
在这里插入图片描述
可以看到去掉delay_3之后,每一次移位,时钟先拉低,然后完成数据切换,时钟拉高,但是拉高不做保持,瞬间拉低进行下一次移位,相当于时钟波形的高电平端被截掉了。

总结

本篇文章目的是给一个案例,一是如何从波形分析数据,二是如何设置合理的延时时间,从而使展现的波形更有利于分析。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foreverwlh

你的鼓励将是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值