【经验】如何使用EFM8SB的PortMatch设计开关键功能?
8位单片机EFM8SB系列是美国芯科实验室(SILICON LABS)针对电池供电系统和小型化设计推出的低功耗MCU。EFM8SB系列通过先进的低功耗技术提供了非常低的电流消耗和快速的唤醒时间,并且包含最多14路的高质量电容触摸传感。EFM8SB具有端口匹配(PortMatch)功能,此功能允许一个或多个端口IO引脚上逻辑电平变化时进行触发事件。通过软件可以控制需要分配引脚期望的逻辑电平,如果此引脚输入的实际电平与软件设置的不匹配,则不匹配事件被触发。端口的不匹配事件可以产生中断,也可以将器件从低功耗模式唤醒。
很多应用中会使用EFM8SB的PortMatch功能来唤醒器件,例如需要电池供电的遥控器,为了尽可能节省功耗,希望按键不操作时MCU一直在休眠状态,而按键按下时MCU唤醒并发送按键命令。那么是否可以使用一个按键实现开关键功能呢,即在唤醒状态下(即开机状态)长按按键3秒钟后MCU进入休眠(即关机状态),而在关机状态下长按按键3秒钟就开机?答案是肯定的,本文就将讨论如何使用EFM8SB的PortMatch来实现此功能。
假如按键不按下时引脚电平是高电平,按下时是低电平。
由于当MCU处于休眠状态时,按键按下需要产生PortMatch事件来唤醒MCU,因此在进入休眠模式之前需要开启PortMatch,并配置引脚为高电平匹配。设备从唤醒状态进入休眠状态时,可以有两种方法用来判断按键状态开始计时。
第一种方法使用PortMatch事件中断来判断按键状态。这要求在开机状态下,PortMatch开启并配置了高电平匹配。PortMatch是电平触发而不是边沿触发,因此当电平状态长时间不匹配时(如这里的长按按键),则会频繁触发PortMatch中断,这样则无法进行3秒计时。为了只产生一次中断,可以在首次进入中断时将匹配电平更改成低电平,但是这样的话当计时达到3秒后,进入休眠模式时又需要配置成高电平,此时如果按键还在按下状态的话,PortMatch事件就会发生,导致MCU又被唤醒。因此这种方法无法实现设备从唤醒状态进入休眠状态。
第二种方法使用While循环查询方式来判断按键状态。这要求在开机状态下,PortMatch关闭,按键按下时不需要产生PortMatch中断,只需要进入While循环语句,并开始3秒计时。时间到后,根据进入休眠状态之前的条件,开启PortMatch并配置高电平匹配,然后进入休眠模式。
但是此时仍然有个问题,就是当进入休眠模式时,按键并不一定已经松开,这样的话引脚外部输入是低电平,而软件配置的是高电平匹配,PortMatch事件就会发生,导致MCU无法休眠。我们可以换一种思路从软件逻辑上来解决这个问题,因为遥控器上一般会有LED指示灯,可以在按键按下达到3秒后先让LED灭掉,然后等按键松开后再开启PortMatch进行配置并进入休眠模式。这样在进入休眠模式之前按键已经松开,PortMatch事件就不会再发生。
用户在使用中只要看到LED灭掉就会认为进入Sleep模式了,会松开按键,然后MCU才真正进入Sleep状态。而在Sleep状态下,只要按键按下MCU就会醒来,但是醒来后先做3秒延时,再开机执行其他代码。
综上,第二种使用While循环查询方式来判断按键状态的方法,可以实现一个按键的开关键功能。
相关技术文档:
Silicon Labs EFM8SB1 8位MCU数据手册 详情>>>
Silicon Labs EFM8SB2 8位MCU数据手册 详情>>>
看到这里您是否又有项目灵感需实现,点击下面开发软件帮你忙。
Silicon Labs Simplicity Studio平台开发工具
Silicon Labs 集成开发环境工具
Silicon Labs 配置向导2开发工具
Silicon Labs FLASH编程开发工具
Silicon Labs 8位MCU Keil PK51 开发工具
Silicon Labs ToolStick 开发工具
Silicon Labs μVision 调试驱动程序开发工具
Silicon Labs 生产编程器开发工具
Silicon Labs .HEX转化.SVF开发工具
Silicon Labs USB复位实用程序开发工具
世强元件电商版权所有,转载请注明来源及链接。
- |
- +1 赞 0
- 收藏
- 评论 2
本网站所有内容禁止转载,否则追究法律责任!
相关推荐
【经验】PCB布线技巧:8位单片机端口Crossbar功能的使用及配置
如果单片机自带Crossbar功能,只要软件配置调整一下各端口功能,PCB布线就会畅通。
设计经验 发布时间 : 2017-08-09
【经验】8位单片机EFM8SB低功耗问题调试汇总
EFM8SB提供了非常优越的低功耗性能,但在设计时还是会遇到实测功耗比理论值高或无法进入Sleep状态等问题。
设计经验 发布时间 : 2017-08-15
8位单片机EFM8的烧录器有哪些?
8位单片机EFM8系列采用C2调试接口,常见的烧录器有:1,官方的EFM8 STK、USB Debug Adapter、ToolStick。2,第三方的U-EC2/6、WizPro200EFM(支持EFM8和EFM32)等。
技术问答 发布时间 : 2016-10-25
【技术】预安装BOOT的新一代的8位MCU
Silicon labs的EFM8系列MCU是C8051F的升级换代产品。较C8051F不同的是,其在出厂时已经固化好BOOT程序。
技术探讨 发布时间 : 2019-07-11
8位单片机EFM8系列中芯片上的UID是什么?
UID是芯片中新加的全球唯一ID,即每个芯片的ID都是不一样的,EFM8系列的MCU上都包含此ID。有两类获取UID的方式,一种通过读取RAM的特定地址获得,一种通过读取Flash的特定地址获得。在早期引入此ID的MCU上(比如EFM8BB1/SB1/SB2)这个ID为32位,在芯片复位时(PC指针被复位至0之前)被复制至RAM中特定位置,用户程序可以读取其值。此位置的RAM仍然可以由用户使用。需要注意的是如果此位置被编译器分配了变量,那么当函数执行至main()时此位置的内容会被初始化代码覆盖。EFM8UB2的UID也是此类,但其位数为128位。在新的EFM8系列MCU上(比如EFM8BB3/LB1/UB1),UID位数为128位,存储在Flash上。
技术问答 发布时间 : 2017-05-05
EFM8LB低功耗8位MCU在使用BOOTLOADER时,如何让程序进入BOOTLOADER?
EFM8LB的芯片进入BOOTLOADER有三种方法。第一种:上电后如果0X0000地址的数据为0XFF,程序会直接进入BOOTLOADER. 第二种:在上电复 位时,如果C2D引脚保持低电平超过50uS,程序会进入BOOTLOADER.第三种: 应用程序将R0赋值为0XA5,然后执行软启动,启动后程序会自动进入 BOOTLOADER。
技术问答 发布时间 : 2017-10-10
【产品】小蜜蜂8位MCU助您轻松迎接物联网时代
Silicon labs推出了一款集小封装和高性价比于一身的多用途8位MCU EFM8BB1,可轻松替代普通8051家族的MCU产品。
新产品 发布时间 : 2019-07-05
推荐一款带ADC的小封装8位MCU,适用于对模拟性能、MCU性能以及电路板尺寸有比较高要求的场合。
推荐EFM8LB11系列8位MCU,该系列MCU内部集成了高精度ADC(14位)、4个12位DAC、内置温度传感器、模拟比较器以及丰富的数字外设和通信接口,FLASH大小为16/32KB,RAM为1.25/2.25KB,封装包括QFN24、QFN32、QFP32以及QSOP24,最小封装3x3mm,具有高性能、低功耗、小封装等特性,非常适用于高性能、低功耗、小封装,对模拟外设有更高要求的应用设计。
技术问答 发布时间 : 2017-05-05
8位单片机EFM8BB21F16可以使用哪些仿真器,与C8051F系列有什么不同?
8位单片机EFM8系列MCU仍然使用了C2接口,所以C8051F使用的仿真器都可以与其通信。目前有如下类型: 1、EFM8 STK 上的J-Link,这种仿真器由Segger开发。 2、Silabs的UDA、第三方的仿真器。 3、Silabs的TOOL STICK。
技术问答 发布时间 : 2017-10-10
8位单片机EFM8BB21F16中比较器参数表中的磁滞和偏移怎么理解?
8位单片机EFM8BB21F16 中比较器的磁滞是V_+在V_-附近时不会马上反转,会滞后一定的电压,磁滞的电压会导致比较器输出反转滞后,如果输入电压比较接近时有干扰可以 避免比较器输出频繁反转。比较器的偏移是指在V_+/V_-很接近时,比较器的输出电平跳转需要一定的上升/下降时间。
技术问答 发布时间 : 2017-10-10
使用8位单片机EFM8BB21F16G开发,同时使能了外部中断INT0和PCA输入捕捉中断,发现PCA计数器的计数值与输入脉冲的周期不符,关闭INT0的话就正确,请问这是什么原因?
造成这种现象一般是因为INT0的触发方式配置成了电平触发,由于INT0的默认中断优先级高于PCA中断,如果是电平触发则会长时间占用INT0的中断服务函数,影响PCA中断服务函数的执行。将INT0的触发方式改为边沿触发可以避免这种现象。
技术问答 发布时间 : 2017-05-05
请问8位单片机EFM8BB系列有汽车级的产品吗?
8位单片机EFM8BB系列的每个型号都有汽车级的型号,经过AEC-Q100的认证。
技术问答 发布时间 : 2017-10-10
对8位单片机EFM8SB20F32G进行编程时,为什么定义一个全局数组变量超过256字节之后,编译器报错?
EFM8SB2单片机集成4.25KB RAM,其中256B的片内SRAM,4KB的片上XRAM,编程时,变量的定义默认使用的是SRAM,所以当定义的变量超出256B时,编译器会报错,可以通过以下方式改进:1、声明全局变量时,声明为XDATA类型;2、设置编译器属性,更改存储模式为“Large”(默认的是“Small”),则编译器会把变量放在XRAM区域中。
技术问答 发布时间 : 2017-05-05
在哪里能找到低功耗8位MCU EFM8SB10F8G的头文件?
使用Silicon Labs的Simplicity Studio 4.0开发软件,连接EFM8SB10F系列开发板,开启Simplicity studio 4.0软件新建项目工程自动生成EMF8SB10F8G头文件在includes文件夹。如需Silicon Labs的Simplicity Studio 4.0开发软件,可以点击链接下载。http://www.sekorm.com/doc/58458.html
技术问答 发布时间 : 2017-05-31
8位单片机EFM8BB21F16SMBus的FIFO有多少个字节?
8位单片机EFM8BB21F16SMBus的FIFO大小为 1个字节,有了FIFO,SMBus总线只有在收到2个字节以后才可能出现阻塞情况。
技术问答 发布时间 : 2017-10-10
电子商城
现货市场
服务
支持微型计算机 、便携式计算机显示设备、投影仪、打印设备、绘图仪、多用途打印复印机、扫描仪、计算机内置电源、电源适配器、充电器、服务器、收款机等产品中国强制性产品认证。
提交需求>
可定制波导隔离器频率覆盖5.5GHz~110GHz,插损损低至0.25dB、隔离度、正向方向功率、封装尺寸参数。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论