judy的博客

MCU去耦和供电要如何进行?

judy的头像

1、建议在印制电路板中,VDD和GND分别由电源层和地层实现。连接到AVDD和AGND引脚的模拟电源应直接布线到电源层和地层,它们不能和任何一个数字电源共享线路连接。

2、数字和模拟电源端都必须安放退藕电容。 数字电源连线上的每两个电源引脚必须至少接有一个100nF电容,并尽量靠近这些引脚。较为理想的是每个电源引脚都有一个10nF或100nF的退藕电容。模拟电源应单独使用100nF和1nF电容并联去藕,并尽量靠近AVDD和AGND引脚。所有这些退藕电容都应是低ESR的陶瓷电容。

3、在硬件设计的某些地方需要附加大量的退藕电容。在供电电源上至少需要一个10uF、低ESR的钽或铝电解电容,通常位于电源输入端或电源稳压器的输出端。 对于大多数的设计,推荐安放多个电容,它们应分布在电路板的四周。

4、为对模拟电源进一步滤波,在模拟电源输入端的电源层和退藕电容之间串入一个磁珠。一个合适的表面安装磁珠规格可以是,电感量为10nH,500mA,直流阻抗为0.3?,封装为0603。

单片机设计有指示灯的好处

judy的头像

在设计单片机线路板的硬件的时候,一般都有指示灯,有时还不止一个,这样做是为什么呢?下面我来简要说一下自己设计电路板和软硬件调试的时候,指示灯所起到的不可忽视的作用。

从设计的角度来说,一块PCB板设计出来,可能会有这样那样的问题(如果有高人说设计出来的板子一定没问题,那么请将这种高人排除),最起码会有运行指示灯,这个灯可以让开发人员和调试很直观的看出芯片的运行状态,方便查问题,因为如果没有任何指示,机器就是死物一个,它不会告诉你它的状态,如果没有指示灯作为参考的话,你就不知道是电没有输入,还是芯片没有运转,还是运转以后其他设备不能工作,还是什么问题,等等。要查问题就要从头查到尾,而有指示灯则省去了好多,一看灯的运行状态和芯片的运行状态不一致,则表明电源没有,或者芯片设计电路,有问题,根本不用去考虑其他外设的问题,可以快速入手查找问题。或者有电源灯,没有亮,也是一个道理,说明电源没有,要不就是灯坏了。这样查问题有针对性。

ARM 内核SP,LR,PC寄存器

judy的头像

深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。

1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。

2、连接寄存器r14(LR):每种模式下r14都有自身版组,它有两个特殊功能。

(1)保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回,通常用下列指令之一:
MOV PC, LR
BX LR

通常子程序这样写,保证了子程序中还可以调用子程序。
stmfd sp!, {lr}
……
ldmfd sp!, {pc}

ARM汇编指令(9)——协处理器指令

judy的头像

1、CDP指令

CDP指令的格式为:

CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

CDP指令用于ARM处理器通知ARM协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM处理器的寄存器和存储器。

指令示例:

CDP P3,2,C12,C10,C3,4 ;该指令完成协处理器P3的初始化

2、LDC指令

LDC指令的格式为:

LDC{条件}{L} 协处理器编码,目的寄存器,[源寄存器]

LDC指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

指令示例:

LDC P3,C4,[R0] ;将ARM处理器的寄存器R0所指向的存储器中的字数据传送到协处理器P3的寄存器C4中。

3、STC指令

STC指令的格式为:

在设计中断时,这九个注意事项要记住!

judy的头像

(1)中断函数不能进行参数传递

(2)中断函数没有返回值

(3)在任何情况下都不能直接调用中断函数

(4)中断函数使用浮点运算要保存浮点寄存器的状态。

(5)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同,被调函数最好设置为可重入的。

(6)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。

(7)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。

(8)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。

IC设计的三种RESET

judy的头像

IC系统中会用到三种reset方式:

(1)Hard reset

指上电时候的reset,通过复位按键来对整个chip进行reset。该reset是全局的,所有的模块内部寄存器都会被reset掉,该reset需要设计去抖电路。

一般芯片初次上电运行,都需要进行复位。

(2)software reset

通过MCU来控制子模块的reset。reset源是一个寄存器,MCU对寄存器写1达到对模块reset的目的。一般用于err handle,当某个模块运行出错,或者系统出错,但是又不能按下复位键,可以通过MCU写寄存器,只对某些出错的模块做reset,其他模块不用reset。

使用该reset,通常并不reset模块的静态配置信息,只reset模块运行时的动态寄存器,以防止reset之后再次工作时,模块的配置信息需要重新加载。

(3)延迟reset

ARM汇编指令(8)——移位指令

judy的头像

1、LSL(或ASL)

LSL(或ASL)的格式为:

通用寄存器,LSL(或ASL) 操作数

LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数所指定的数量向左移位,低位用零来填充。 其中,操作数可以是通用寄存器,也可以是立即数(0~31)。

操作示例

MOV R0, R1, LSL #2 ;将R1中的内容左移两位后传送到R0 中。

2、LSR

LSR的格式为:

通用寄存器,LSR 操作数

LSR可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数可以 是通用寄存器,也可以是立即数(0~31)。

操作示例:

MOV R0, R1, LSR #2 ;将R1中的内容右移两位后传送到R0 中,左端用零来填充。

3、ASR

ASR的格式为:

通用寄存器,ASR 操作数

热电偶工作原理

judy的头像

什么叫热电偶?这就要从热电偶测温原理说起,热电偶是一种感温元件,是一次仪表,它直接测量温度,并把温度信号转换成热电动势信号,通过电气仪表(二次仪表)转换成被测介质的温度。

热电偶测温的基本原理是两种不同成份的材质导体(称为热电偶丝材或热电极)组成闭合回路,当接合点两端的温度不同,存在温度梯度时,回路中就会有电流通过,此时两端之间就存在电动势——热电动势,这就是所谓的塞贝克效应。两种不同成份的均质导体为热电极,温度较高的一端为工作端(也称为测量端),温度较低的一端为自由端(也称为补偿端),自由端通常处于某个恒定的温度下。根据热电动势与温度的函数关系,制成热电偶分度表;分度表是自由端温度在0℃时的条件下得到的,不同的热电偶具有不同的分度表。

在热电偶回路中接入第三种金属材料时,只要该材料两个接点的温度相同,热电偶所产生的热电势将保持不变,即不受第三种金属接入回路中的影响。因此,在热电偶测温时,可接入测量仪表,测得热电动势后,即可知道被测介质的温度。

热电偶实际上是一种能量转换器,它将热能转换为电能,用所产生的热电势测量温度,对

于热电偶的热电势,应注意如下几个问题:

1:热电偶的热电势是热电偶两端温度函数的差,而不是热电偶两端温度差的函数;

总结51单片机避免复位触发的几种方法

judy的头像

51内核的单片机有个比较恼人的特性就是复位期间,IO口呈高电平状态,万一IO口控制的设备是使用高电平触发的话,在复位的瞬间会造成设备触发。

总结一下接触过的解决方法:

1、把MCU换成别的体系的,譬如AVR、PIC等,这些单片机复位时IO口呈浮空高阻状态,不会造成触发。

2、使用反相驱动,MCU输出低电平反相成高电平再去控制设备。复位时的高电平反相后变成低电平,不会触发。这是比较常用的方法,稳定,但布线复杂了不少。

3、使用光耦隔离。光耦隔离后MCU也是输出低电平打开光耦再驱动被控设备,复位时的高电平不会打开光耦,不会造成误触发。

4、使用多余的IO口锁定,这种方法比较奇怪,在没用的IO口里挑一个出来接到NPN管的基极,再把NPN管的发射极接到被控的IO口,复位时所有的IO口呈高电平,NPN管导通,把被控的IO口强行拉低,相当于把被控IO口的电平锁定为低,避免触发被控的设备。这种方法必须配合软件,复位完毕后必须软件把接NPN管基极的那根IO置低电平,释放被控的IO口。这种方法比较少用,毕竟需要有多余的IO口,还必须加上三极管、电阻,布线复杂了不少,成本也增加不少。

单片机开发中的一些实用技巧(上)

judy的头像

很多朋友正在学习单片机开发技术,但开发中免不了要碰到这样、那样的问题,有些问题可能无碍大局,但有一些问题却直接影响到产品的成本、体积、性能。这里介绍笔者的几个技巧,希望对大家的工作有帮助。

一、C语言中嵌入汇编语言

单片机开发中,通常我们使用C语言编写主程序,这样可以充分借助C语言工具提供的运算库函数及强大的数据处理能力。但C语言的可控性不及汇编语言,在有些对时序要求严格的处理上,我们还需用灵活性更强的汇编语言来编写。上海AVR单片机培训这样就产生了C语言和汇编语言混合编程的问题,一般分成三种方式:
1.汇编语言调用C语言函数;
2. C语言调用汇编语言;
3. C语言中嵌入汇编语言。

这里我们主要介绍第3种,即C语言中嵌入汇编语言。

下面的一段程序是主程序调用精确的205μS延时子程序并使P1.0交替输出高、低电平的方波。

页面

订阅 RSS - judy的博客