0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MAXQ2000进行安全系统控制

星星科技指导员 来源:ADI 作者:ADI 2023-02-07 13:53 次阅读

报警控制面板几乎是每个人日常生活的一部分,无论是在家里还是在工作中。本文介绍使用MAXQ2000低功耗LCD微控制器的报警控制应用示例,该微控制器是在MAX-IDE开发环境中创建的。MAXQ2000可以方便地与安全应用中常用的外设接口,包括LCD显示器、PIN输入键盘、压电喇叭和蜂鸣器以及磁簧开关。

常见的报警控制面板包含多个输入设备,需要用户显示器。这些系统的常用组件包括:

接受用户输入的设备:4 x 4 开关键盘。

向用户显示输出的设备:LCD显示器。

输入设备:磁簧开关。

输出装置:压电喇叭。

这几个元件可以通过简单的应用和功能强大、灵活的MAXQ2000微控制器进行管理和控制。该应用可供下载,是使用MAX-IDE开发环境用MAXQ汇编语言编写的。该代码针对MAXQ2000评估板,使用以下附加硬件

键盘:灰山 16 按钮(4 行 x 4 列)键盘 96BB2-006-F

压电喇叭:CEP-1172

磁簧开关:标准单回路型

设计目标

我们的示例应用程序执行以下任务:

监视磁簧开关以确定门/窗是打开还是关闭。

允许用户通过在键盘上输入 PIN 来布防或撤防系统。

在液晶屏上向用户显示状态信息

通过发出压电喇叭的声音,提供按键和传感器打开/关闭事件的音频指示。

如果在系统布防时传感器打开,则连续发出喇叭声。

报警控制应用程序的行为由四种离散状态组成:关闭、打开、设置和警报(图 1)。

poYBAGPh50eAYtMyAABgjfCqWjU264.gif?imgver=1

图1.警报控制应用程序在四种主要状态下运行:关闭、打开、设置和警报。

磁簧开关接口

在报警系统中,磁簧开关安装在两部分:磁铁和实际的磁簧开关。磁铁部分放置在门或窗的移动部分,而开关部分放置在框架上。当门或窗关闭时,磁铁关闭簧片开关,指示非报警状态。如果系统布防,门窗打开,簧片开关改变状态,允许MAXQ2000发出入侵警报。

干簧开关只需连接端口引脚P2000.5和P2.5即可连接至MAXQ3。当 P5.2 设置为/下拉 (PD = 1, PO = 0) 且 P5.3 设置为弱上拉输入 (PD = 0, PO = 1) 时,当磁簧开关闭合时,P5.3 将读取零,当磁簧开关打开时,P<>.<> 将读取 <>。

move PD5.2, #1 ; Drive one side of reed switch LOW move PO5.2, #0 move PD5.3, #0 ; Set weak pullup high on other side move PO5.3, #1 ... ML_Closed_Check: move C, PI5.3 jump NC, ML_Closed_L ; Switch is closed, continue in this state call ShortBeep call ShortPause call ShortBeep call ShortPause call ShortBeep call ShortPause call ShortBeep call ShortPause jump ML_Open ; Switch is open, transition to OPEN state

与 4 x 4 键盘接口

键盘用于报警控制系统,用于安全输入PIN码、布防/撤防系统以及更改配置。此示例应用程序中使用的键盘由 16 个开关组成,以 4 x 4 网格形式组织。开关以行和列矩阵连接在一起(图2),因此按下键盘开关将一行连接到一列线。例如,按下“3”键将第 1 行和第 3 列连接在一起。

pYYBAGPh50yAYuiGAAAhefpgGJU387.gif?imgver=1

图2.键盘开关形成一个由四行四列组成的网格。

键盘提供八个接口引脚,键盘矩阵的每一行和每列一个引脚。键盘和MAXQ2000评估板如图所示连接。

连接 端口销 JU2 引脚
1 第 1 行 P6.0 54
2 第 2 行 P6.1 52
3 第 3 行 P6.2 50
4 第 4 行 P6.3 48
5 科尔 1 P6.4 46
6 科尔 2 P6.5 44
7 科尔 3 P7.0 42
8 科尔 4 P7.1 40

对于此应用,评估板应配置如下。

拨码开关。

以下开关必须关闭:所有 SW1 交换机、SW3.1、SW3.7、SW3.8、SW6.1、SW6.4、SW6.5、SW6.6、SW6.7 和 SW6.8。

所有其他 DIP 开关可以处于任何状态。

运动员

以下跳线必须处于打开状态:JU5、JU6、JU8 和 JU9。

必须关闭以下跳线:JU1、JU2、JU3 和 JU11。

所有其他跳线可以处于任何状态。

按列扫描

键盘的行和列排列使得在任何时候都可以轻松读取四个开关的状态,无论是行还是列。要在一列中读取四个开关,首先必须将该列的行拉低,所有其他列三态(图 3)。接下来,必须在每行线上设置一个弱上拉。最后,四行线连接到端口引脚输入。当按下某一行上的开关时,该行的输入将为低电平,否则为高电平。

类似地,通过将该行线拉低并在所有四列上设置输入和弱上拉,可以读取连续四个开关的状态。行和列是可以互换的。

在我们的设置中,四行线(键盘引脚 1 到 4)都连接到同一个输入端口 (P6[3:0]),这使得同时读取它们更容易。因此,示例应用程序一次扫描一列交换机。连接到键盘的八个端口引脚线有四种设置状态,每种状态都允许读取四个开关。当正在读取的开关闭合时,所有输入线都读低,当开关打开时,所有输入线都读高。

P6.0 P6.1 P6.2 P6.3 P6.4 P6.5 P7.0 P7.1
1 输入 - 1 输入 - 4 输入 - 7 输入-* 三态 三态 三态
2 输入 - 2 输入 - 5 输入 - 8 输入 - 0 三态 三态 三态
3 输入 - 3 输入 - 6 输入 - 9 输入-# 三态 三态 三态
4 输入 - A 输入 - B 输入 - C 输入 - D 三态 三态 三态

3546fig03.gif?imgver=1

图3.MAXQ2000将列1拉低,读取前四个键盘开关的状态。

中断驱动的状态机

这四列必须快速发送,以便任何按键在释放之前都有时间阅读。此外,为防止开关的弹跳触点注册多次按下,在注册之前必须按住键一定时间。通过将定时器驱动的中断例程作为应用程序的核心,可以同时完成这两个因素。这允许应用程序定期扫描四列中的每一列,并计算按下键的时间长度。

RELOAD equ 0FF00h StartTimer: move IIR.3, #1 ; Enable interrupts for module 3 move IMR.3, #1 move T2V0, #RELOAD move T2R0, #0h move T2C0, #0h move Acc, T2CFG0 ; Set timer 0 to run from HFClk/128 and #08Fh or #070h move T2CFG0, Acc move T2CNA0.3, #1 ; Start timer 0 move T2CNA0.7, #1 ; Enable timer 0 interrupts ret

计时器的重新加载值控制中断触发的频率。此值必须足够短,以便识别所有按键。此外,为了确保密钥响应不会缓慢,重新加载值也必须足够长,以便它不会占用过多的处理时间。上面显示的值0FF00h(大约每2.4ms一次)是通过实验达到的。

一旦一组四个开关的列线被驱动为低电平,则可能需要一些时间才能通过按下的开关操作的连接将其输入线拉低。该时间受开关的导通电阻和同时按下多少列开关的影响。为了避免在将柱线拉低和读取四个开关之间延迟中断服务例程,给定状态的柱线在前一个状态下被驱动为低电平(图 4)。

pYYBAGPh6oiAZMM6AACGQu1PTLg872.png

图4.在四种按键扫描状态中,应用程序读取四个开关的状态,并准备读取接下来的四个开关。

由于MAXQ2000的中断向量(IV)可以即时设置,应用在中断向量寄存器中保存下一个状态值。每当计时器中断触发时,当前密钥扫描状态的处理程序例程都会将中断向量地址设置为下一个状态的处理程序例程。

org  0000h

Main:
   call    InitializeLCD

   move    PD6, #010h         ; For state 1
   move    PO6, #00Fh         ; For all states
   move    PD7, #000h         ; For state 1
   move    PO7, #000h         ; For all states

   move    IV, #State1
   call    StartTimer
   move    IC, #1            ; Enable global interrupts

   jump    $


State1:
   push    PSF
   push    Acc

   move    Acc, PI6
   and     #000Fh            ; Grab lowest four bits only
   sla4
   move    A[13], Acc

   move    PD6, #020h        ; For state 2
   move    PD7, #000h

   move    T2V0, #RELOAD     ; Set reload value
   move    T2CNB0.1, #0      ; Clear interrupt flags
   move    T2CNB0.3, #0
   move    IV, #State2

   pop     Acc
   pop     PSF

   reti

其他四种状态的处理程序例程类似,只是在 A[13] 保持寄存器中先前收集的开关位中略微调整为 OR。状态例程使用三个工作累加器。

A[13] 保存通过键盘的电流传递上读取的所有开关状态的位数组。状态 4 读取完成后,此寄存器包含以下位,其中一位表示打开(释放)键开关,零位表示关闭(按下)键开关。


15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0
* 7 4 1 2 5 8 0 3 6 9 # D C B 一个

去抖动开关

达到状态 4 并扫描所有键后,必须决定是否接受按下的任何键。处理去抖动的一种简单方法是为 16 个开关中的每一个保持一个计数器值。每次达到状态 4 并按下该键时,计数器都会递增。如果未按下该键,计数器将递减。当计数器达到某个值时,将注册按键。为了防止按住键重复(通常在计算机键盘上允许,但在小键盘上不允许),必须允许计数器递减到零(通过释放键),然后才能再次注册该键。

由于我们在单个寄存器中拥有所有 16 个键的状态,因此有一种更简单、内存密集度更低的去抖动解决方案。应用程序维护单个计数器值,每次位模式与上一次传递中读取的模式匹配时,该计数器值都会递增。

State4:
   push    PSF
   push    Acc

   move    Acc, PI6
   and     #000Fh            ; Grab low four bits only
   or      A[13]
   cmp     A[15]
   jump    E, State4_End    ; Ignore the last debounced pattern

   cmp     A[14]
   jump    E, State4_Match

   move    LC[0], #DEBOUNCE
   move    A[14], Acc       ; Reset current bit array

为了防止键重复,一旦位模式静态足够长,就可以接受,必须先接受不同的位模式(包括未按下任何键的空闲状态),然后才能再次接受第一个位模式。

处理同时按键

使用键盘输入设备时,可以同时按键。去抖动代码可确保如果在第一个键之后立即按下第二个键,则去抖间隔将重新开始,但在实践中要足够短,以免成为问题。

一旦位模式被接受,就可以通过使用累加器将所有 16 位单独旋转到进位中并依次检查每个位来执行每个按下键位的操作。以下代码仅响应第一个按下的键,但这可以很容易地更改。

State4_Match:
   djnz    LC[0], State4_End
   move    A[15], Acc       ; Reset last debounced pattern

   rrc
   jump    NC, State4_KeyA
   rrc
   jump    NC, State4_KeyB
   rrc
   jump    NC, State4_KeyC
   rrc
   jump    NC, State4_KeyD

   rrc
   jump    NC, State4_Key3
   rrc
   jump    NC, State4_Key6
   rrc
   jump    NC, State4_Key9
   rrc
   jump    NC, State4_KeyPound

   rrc
   jump    NC, State4_Key2
   rrc
   jump    NC, State4_Key5
   rrc
   jump    NC, State4_Key8
   rrc
   jump    NC, State4_Key0

   rrc
   jump    NC, State4_Key1
   rrc
   jump    NC, State4_Key4
   rrc
   jump    NC, State4_Key7
   rrc
   jump    NC, State4_KeyStar

   jump    State4_End

与液晶显示器接口

MAXQ2000评估板附带的LCD显示屏具有如图5所示的段定义。

3546fig05.gif?imgver=1

图5.LCD 显示屏包含 7 个半 <> 段字符。

首先,LCD显示屏必须初始化为静态驱动模式并启用。完成此操作后,可以通过适当设置段将字符写入显示器。

InitializeLCD:
   move    LCRA, #03E0h      ; xxx0001111100000
                             ;    00            - DUTY : Static
                             ;      0111        - FRM  : Frame freq
                             ;          1       - LCCS : HFClk / 128
                             ;           1      - LRIG : Ground VADJ
                             ;            00000 - LRA  : RADJ = max

   move    LCFG, #0F3h       ; 1111xx11
                             ; 1111     - PCF  : All segments enabled
                             ;       1  - OPM  : Normal operation
                             ;        1 - DPE  : Display enabled

   move    LCD0, #00h        ; Clear all segments
   move    LCD1, #00h
   move    LCD2, #00h
   move    LCD3, #00h
   move    LCD4, #00h
   ret

输入密码

在“已关闭”、“设置”和“警报”状态下,可以输入 PIN 以将警报控制器更改为另一种状态。输入每个字符时,A[10] 中保存的工作值将左移并使用新字符进行 OR,LCD 显示屏上的小数点向左移动以指示输入的字符数。出于安全原因,正在输入的 PIN 不会显示在显示屏上。

State4_Key0:
   move    Acc, #0000h
   jump    State4_Shift

State4_Key1:
   move    Acc, #0001h
   jump    State4_Shift

State4_Key2:
   move    Acc, #0002h
   jump    State4_Shift

....

State4_Shift:
   move    A[12], Acc

   move    Acc, A[10]
   cmp     #0FFFFh         ; flag indicating no PIN entry allowed
                           ;    in current state
   jump    E, State4_NoKey

   move    Acc, A[11]      ; key count
   cmp     #04             ; if already at 4 (should have been cleared)
   jump    E, State4_NoKey

   add     #1
   move    A[11], Acc

   move    Acc, A[10]
   sla4
   or      A[12]
   move    A[10], Acc

输入所有四个字符后,将根据硬编码值检查 PIN。如果输入的值与 PIN 匹配,则会发生相应的状态转换。

PIN_VALUE        equ 03870h       ; Just a random number

;; "Closed" state code

ML_Closed:
   move    A[10], #00000h         ; Reset PIN value
   move    A[11], #0              ; Reset number of PIN chars entered

   move    LCD3, #LCD_CHAR_C
   move    LCD2, #LCD_CHAR_L
   move    LCD1, #LCD_CHAR_5
   move    LCD0, #LCD_CHAR_D

ML_Closed_L:
   move    Acc, A[11]
   cmp     #4                     ; 4 characters entered?
   jump    NE, ML_Closed_Check

   move    Acc, A[10]
   cmp     #PIN_VALUE             ; PIN matches?
   jump    E, ML_Set

   call    LongBeep               ; Beep on incorrect PIN and reset
   move    A[10], #0000h
   move    A[11], #0
   move    LCD3.7, #0

ML_Closed_Check:
   move    C, PI5.3               ; Check reed switch
   jump    NC, ML_Closed_L        ; Closed, stay in current state

   call    ShortBeep              ; 4 short beeps signal transition
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   jump    ML_Open                ; Switch opened, go to OPEN state

使用压电喇叭

在我们的应用中,一个小压电喇叭用于执行两个功能:(1) 在按下按键或输入错误 PIN 时提供音频反馈,以及 (2) 在系统布防时簧片开关打开时发出警报。

为了便于演示,MAXQ2000连接两个端口引脚,连接一个小的压电喇叭。端口引脚被差分驱动以增加对压电喇叭的电流驱动,驱动器代码中使用的环路计数决定了发出的音调的频率。

ShortBeep:
   move    LC[1], #100       ; Number of cycles
SB_L1:
   move    PO5.6, #0
   move    PO5.7, #1

   move    Acc, #2000        ; Count for forward polarity period
SB_L2:
   sub     #1
   jump    NZ, SB_L2

   move    PO5.6, #1
   move    PO5.7, #0

   move    Acc, #2000        ; Count for reverse polarity period
SB_L3:
   sub     #1
   jump    NZ, SB_L3

   djnz    LC[1], SB_L1
   ret

在实际的报警系统中,将使用更强的驱动电路来运行压电喇叭,并且喇叭将以其谐振频率驱动以增加音量。

结论

MAXQ2000通过专用的LCD控制器外设轻松直接地与LCD显示器接口。使用MAXQ2000提供的灵活的端口引脚配置,可以直接读取多路复用键盘。定时器中断驱动的状态机允许扫描矩阵中的所有密钥并进行去抖动,而对处理器开销的影响最小。最后,使用MAXQ2000上的通用端口引脚,也可以轻松控制压电喇叭和磁簧开关。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15239

    浏览量

    171222
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4278

    浏览量

    164145
  • 计数器
    +关注

    关注

    32

    文章

    2126

    浏览量

    92997
收藏 人收藏

    评论

    相关推荐

    语音数据集在智能家居安全系统中的应用与挑战

    随着智能家居的普及,家庭安全问题日益受到人们的关注。智能家居安全系统通过整合各种传感器和设备,实现对家庭环境的实时监控和报警,保障家庭成员的安全。语音数据集在智能家居安全系统中发挥着重
    的头像 发表于 12-25 09:50 229次阅读

    基于远程家庭安全系统的设计

    电子发烧友网站提供《基于远程家庭安全系统的设计.pdf》资料免费下载
    发表于 10-24 11:29 0次下载
    基于远程家庭<b class='flag-5'>安全系统</b>的设计

    TPM是否可以作为嵌入式信息安全系统的主控?

    目前想开发一个嵌入式信息安全系统,实现建立TLS连接以及密钥和证书的安全存储以及日志的安全存储,类似于HSM。目前硬件上HSM集成在MCU中,成本太高且资源过于浪费,因此考虑使用TPM作为系统
    发表于 10-23 09:17

    基于单片机控制的小车平衡系统控制

    电子发烧友网站提供《基于单片机控制的小车平衡系统控制.pdf》资料免费下载
    发表于 10-09 16:20 0次下载
    基于单片机<b class='flag-5'>控制</b>的小车平衡<b class='flag-5'>系统控制</b>

    Arm®系统控制和管理接口平台设计文档

    本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。
    发表于 08-02 10:25

    汽车安全系统中霍尔传感器的使用案例

    乘客安全是汽车设计最关键的要素之一。因此,必须一如既往地提高安全系统的可靠性,以减少并最终防止司乘人员在遭遇事故时受到伤害。
    发表于 07-05 09:30 833次阅读
    汽车<b class='flag-5'>安全系统</b>中霍尔传感器的使用案例

    储物柜安全系统的构建

    电子发烧友网站提供《储物柜安全系统的构建.zip》资料免费下载
    发表于 07-04 10:29 0次下载
    储物柜<b class='flag-5'>安全系统</b>的构建

    ESP32键盘数据库安全系统

    电子发烧友网站提供《ESP32键盘数据库安全系统.zip》资料免费下载
    发表于 06-25 15:56 0次下载
    ESP32键盘数据库<b class='flag-5'>安全系统</b>

    Lifi安全系统开源设计

    电子发烧友网站提供《Lifi安全系统开源设计.zip》资料免费下载
    发表于 06-19 10:52 0次下载
    Lifi<b class='flag-5'>安全系统</b>开源设计

    MAX6951/MAX6950 LED显示驱动器与MAXQ2000控制器的通信

    MAX6951/MAX6950 SPI LED驱动器简单易用的共阴极显示器驱动器,通过SPI串行接口连接微控制器。MAXQ系列微控制器集成了SPI模块,可通过SPI接口与LED驱动器通信。这里介绍的例程有助于用户理解MAX695
    的头像 发表于 06-16 15:34 578次阅读
    MAX6951/MAX6950 LED显示驱动器与<b class='flag-5'>MAXQ2000</b>微<b class='flag-5'>控制</b>器的通信

    使用NodeMcu的火灾报警安全系统

    电子发烧友网站提供《使用NodeMcu的火灾报警安全系统.zip》资料免费下载
    发表于 06-14 10:57 0次下载
    使用NodeMcu的火灾报警<b class='flag-5'>安全系统</b>

    选择MAXQ2000控制器和MAX1132 ADC接口的SPI时钟模式

    图1所示为MAX1132评估板原理图,图2给出了系统的配置图。为连接MAX1132评估板与MAXQ2000评估板,将MAX1132评估板上的SCLK、/CS、DOUT和DIN引脚连接
    的头像 发表于 06-12 16:54 379次阅读
    选择<b class='flag-5'>MAXQ2000</b>微<b class='flag-5'>控制</b>器和MAX1132 ADC接口的SPI时钟模式

    采用MAXQ2000控制器和MAX6970 LED驱动器显示不同的LED排序

    MAX6970为8端口、36V恒流LED驱动器,采用4线串口。利用本应用笔记提供的信息,MAX6970配合MAXQ2000 16位RISC微控制器使用,可以在选择不同按键时得到各种简单的LED排序。
    的头像 发表于 06-12 16:10 325次阅读
    采用<b class='flag-5'>MAXQ2000</b>微<b class='flag-5'>控制</b>器和MAX6970 LED驱动器显示不同的LED排序

    利用MAXQ2000和MAX6960构建股价显示系统

    本应用笔记介绍了一套基于MAX6960显示驱动器和MAXQ2000控制器(MAXQ20内核)的股价显示系统,并提供了构建该系统的所有必备信
    的头像 发表于 06-09 15:42 791次阅读
    利用<b class='flag-5'>MAXQ2000</b>和MAX6960构建股价显示<b class='flag-5'>系统</b>

    汽车安全系统的支柱

    摩托罗拉SPI(串行外设接口)及其变体因其低引脚数和紧凑的设计特性而成为系统设计人员的热门选择。随着安全要求的不断提高,现在比以往任何时候都更需要一个行业标准接口,以避免使用自定义驱动程序进行多个供应商接口。SafeSPI行业标
    的头像 发表于 05-26 11:42 1286次阅读
    汽车<b class='flag-5'>安全系统</b>的支柱