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

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

3天内不再提示

面向接口的编程——SPI总线和IIC总线

AGk5_ZLG_zhiyua 来源:互联网 作者:佚名 2017-10-26 18:20 次阅读

>>> 4.4.1 中断与事件驱动

无论采用哪种总线都使用时钟信号和数据/控制线,时钟信号由 MCU 主机进行控制。用于控制的信号线中的 SPI 为 4 根,除了具有传输的信号外,还具有片选信号,通过该信号的有效与否,主机指定哪个器件作为目标对象。

>>> 4.6.1 SPI 总线简介

在这里,以 LPC824 为例来介绍主机 SPI 的原理和应用设计。

  • SSEL:片选输入

当 SPI 作为主机时,则在串行数据启动前驱动 SSEL 信号,使之变为有效状态,并在串行数据发送后释放该信号,使之变为无效状态。默认 SSEL 为低电平有效,也可将其选为高电平有效。当 SPI 作为从机时,处于有效状态的任意 SSEL 信号都表示该从机正在被寻址。

  • MOSI :主机输出从机输入

MOSI 信号可将串行数据从主机传送到从机。当 SPI 作为主机时,则串行数据从 MOSI输出;当 SPI 作为从机时,则串行数据从 MOSI 输入。

  • MISO :主机输入从机输出

MISO 信号可将串行数据由从机传送到主机。当 SPI 作为主机时,则串行数据从 MISO输入;当 SPI 作为从机时,则串行数据输出至 MISO。

  • SCK:时钟信号

SCK 同步数据传送时钟信号。它由主机驱动从机接收,使用 SPI 接口时,则时钟可编程为高电平有效或低电平有效。

>>> 4.6.2 74HC595 接口

在同一时钟信号作用下,74HC595 实现数据的串行输入/并行输出转换。除了 8 个并行输出口之外,74HC595 还有 5 个输入控制口,其中的Q 7 ~ Q 0 端输出;同时将V CC ,从而保证 74HC595 处于永久选通状态。另外还有 3 个输入端:CP 时钟信号端、D 数据输入端与 STR 锁存信号,其分别连接 MCU 的 SCK、MOSI 与 SSEL,详见图 4.18。

图 4.18 74HC595 电路图

在 CP 时钟信号上升沿的作用下,保证将加载 D端的二进制数据依次送入 74HC595 中。当数据移位完成后,在 STR 上升沿的作用下,数据将一次性地在 Q 7 ~ Q 0 端输出,从而保证在移位的过程中,输出端的数据保持不变。

MiniPort-595 模块采用 74HC595 扩展 8 路 I/O,可以直接驱动 LED 显示模块,其对应AM824-Core 的 MiniPort 接口 J4 功能定义详见图 4.19(b)。MiniPort-595 模块输出信号引脚J2 功能定义详见图 4.19(c)。

图 4.19 595 模块实物与控制接口定义

假设要将 1000 0000 串行传送到 74HC595 的并行输出端 Q 7 ~ Q 0,此数据在时钟脉冲的作用下,从 Q 7 ~ Q 0逐位送到串行数据输入端 D。待 8 个时钟脉冲过后,10000000在Q 7 ~ Q 0并行输出。AMetal针对 74HC595 提供了相应的 hc595.h 接口,详见程序清单 4.44。

程序清单 4.44 hc595.h 接口

由此可见,在初始化 74HC595 相关的操作后调用 hc595_send_data(),则串行输入并行输出一个 8 位二进制数,74HC595 的输出管脚当作 8位 I/O 口使用。此前控制 8 个 LED 流水灯不得不使用 8 个 I/O 口,现在有了 74HC595,则可以节省的更多 I/O 口留作其它用途。

显然,只要将 AM824-Core 主机、MiniPort-595 模块的 MiniPort A(排针)与 MiniPort-LED 模块的 MiniPort B(排母)直接对插即可,其原理图详见图 4.20,模块的组合详见图 4.21(a),组合之后对应 MCU 的 MiniPort 接口 J4 端口功能定义详见图 4.21(b),MCU 通过 STR、CP和 D 这 3 个端口控制 74HC595 芯片驱动8 个 LED,详见程序清单 4.45。

图 4.20 8 路输出 I/O 扩展

图 4.21 模块组合实物与控制接口定义

程序清单 4.45 74HC595 通用接口范例程序

显然,同样可以用 74HC595 来驱动数码管的 8 个段,其原理图详见图 4.22。

图 4.22 2 位数码驱动电路

将AM824-Core、MiniPort-595模块的MiniPort A(排针)与MiniPort-View模块的MiniPort B(排母)3 个模块直接对插即可,详见图 4.23(a),组合之后对应 MCU 的MiniPort接口J4功能定义详见图4.23 (b)。MCU 除了使用 STR、CP 和 D 端口控制74HC595,还需要使用 COM0 和 COM1控制数码管的位选。

图 4.23 模块组合实物与控制接口定义

其实使用 74HC595 与直接使用 I/O驱动数码管,唯一的不同是段码的输出方式不一样,因此仅需修改段码传送函数,并将实现代码添加到digitron1.c 中,详见程序清单 4.46。

程序清单 4.46 新增 74HC595 驱动数码管的相关函数

由于用户不会直接调用 digitron_hc595_segcode_set(),因此仅将 digitron_hc595_init()和digitron_hc595_disp_scan()添加到程序清单 4.47 所示的 digitron1.h 接口中。

程序清单 4.47 digitron1.h

当使用 74HC595 驱动数码管时,只要调用相关函数即可,详见程序清单 4.48。

程序清单 4.48 74HC595 驱动数码管实现秒计数器范例程序

4.7 I2C 总线

>>> 4.7.1 I2C 总线简介

I2C 总线(Inter Integrated Circuit)是 NXP 公司开发的用于连接微控制器与外围器件的两线制总线,不仅硬件电路非常简洁,而且还具有极强的复用性和可移植性。I2C 总线不仅适用于电路板内器件之间的通信,而且通过中继器还可以实现电路板与电路板之间长距离的信号传输,因此使用 I2C 器件非常容易构建系统级电子产品开发平台。其特点如下:

  • 总线仅需 2 根信号线,减少了电路板的空间和芯片管脚的数量,降低了互连成本;

  • 同一条 I2C 总线上可以挂接多个器件,器件之间按不同的编址区分,因此不需要任何附加的 I/O 或地址译码器;

  • 非常容易实现 I2C 总线的自检功能,以便及时发现总线的异常情况;

  • 总线电气兼容性好,I2C 总线规定器件之间以开漏 I/O 互连,因此只要选取适当的上拉电阻就能轻易实现 3V/5V 逻辑电平的兼容;

  • 支持多种通信方式,一主多从是最常见的通信方式。此外还支持双主机通信、多主机通信与广播模式;

  • 通信速率高,其标准传输速率为100Kbps (每秒100K位),在快速模式下为400Kbps,按照后来修订的版本,位速率可高达 3.4Mbps。

>>> 4.7.2 LM75B 接口

AM824-Core 选择与 LM75A 兼容的 LM75B 数字测温传感器,其关断模式下消耗的电流仅为 1μA。

1. 特性

LM75B 是 NXP 半导体推出的具有 I2C 接口的数字温度传感器芯片,其关键特性如下:

  • 器件地址 1001xxx,同一总线上可以外扩 8 个器件;

  • 供电范围:2.8~5.5V,温度范围:-55~125℃;

  • 11 位 ADC 提供温度分辨率达 0.125℃;

  • 精度:±2℃(-25~100℃),±3℃(-55~125℃)。

LM75B 的管脚排列详见图 4.24,从机地址为 0x90,A0~A2 分别为地址选择位 0~2,且必须在 SCL 串行时钟输入与 SDA 串行数据信号线上添加上拉电阻。当芯片过热时,则关断输出。

图 4.24 LM75B 管脚图

2. 应用电路

LM75B 典型应用电路详见图 4.25,R5 和 R6 是 I2C总线的上拉电阻。由于板载只有一片 LM75B,因此不用考虑芯片的地址问题,即可将芯片的 A0~A2 引脚直接接地。OS 为芯片的过热输出,可以外接继电器等器件实现独立温控器的功能。由于是通过 MCU 实现测温的,因此该引脚可以悬空。只要短接(J13_1、J13_2)与(J11_1、J11_2),则 SDA、SCL 分别与 PIO0_18、PIO0_16 相连。

图 4.25 LM75B 应用电路图

如图 4.26 所示为 AM824-Core 的加热电路,R32 的阻值为 20~50Ω(2W)。短接 J14_2与J14_3即可将焊接在LM75B附近的加热电阻R32与KEY相连,当 KEY 键按下时,则 R32 开始发热,此时电阻上产生的热量会通过较粗的导线传导到 LM75B 的下面,于是LM75B 也会跟着热起来。如果电阻越小,则通过的电流越大,产生的热量也就越大。当按键按下时电路导通,这时可以通过测温电路观察温度上升情况。

图 4.26 加热电路

3. 温度测量

针对 LM75B,AMetal 提供了相应的软件包,其函数原型为:

显然,使用这两个通用接口,很容易读取当前的温度值。由于只有两位数码管,因此只显示整数部分;当温度为负数时,也不显示负,仅显示温度值,详见程序清单 4.49。

程序清单 4.49 LM75 温度读取和显示范例程序

将程序编译后下载到开发板上运行,如果数码管显示 28,表示当前温度为 28℃。如果按下加热按键,则低阻值加热电阻 R32 开始发热,那么显示的温度值会不断升高。

在显示温度值时,之所以将温度值右移了 8 位,这是因为 lm75_read()读取的数值是实际温度的 256 倍,所以实际温度应该是读取的值除以 256.0。同时,由于不需要显示小数部分,所以直接右移 8 位,就表示除以了 256,只剩下了整数部分。

>>> 4.7.3 温控器

下面将结合此前编写的程序,使用 LED、蜂鸣器、数码管、矩阵键盘和温度采集,实现一个简易的温控器。

1. 功能简介

使用标准I2C接口LM75B温度传感器采集温度在数码管上显示,由于只有两位数码管,因此只显示整数部分;当温度为负数时,也不显示负,仅显示温度值。

可设置温度上限值和温度下限值,当温度高于上限值或低于下限值时,则蜂鸣器鸣叫。

2. 状态指示

在调节过程中,使用两个 LED 用于状态指示,用短路跳线器连接 J9 和 J10 即可。

  • LED0 亮:表明当前值为上限值,数码管显示上限值;

  • LED1 亮:表明当前值为下限值,数码管显示下限值;

  • 两灯闪烁:表明正常运行状态,数码管显示环境温度值。

3. 操作说明

设置上下限值时,共计使用 4 个按键。即:

  • SET 键:用于进入设置状态。点击后首先进入温度上限值设定,再次点击可进入温度下限值设定,再次点击回到正常运行状态;

  • 左移/右移键:用于切换当前调节的位(个位/十位)。当进入设置状态后,当前调节的位会不断的闪烁;点击该键可以切换当前调节的位,由个位切换到十位,或由十位切换到个位;

  • 加 1 键:当进入设置状态后,当前调节的位会不断的闪烁,按该键可以使该位上的数值增加 1;

  • 减 1 键:当进入设置状态后,当前调节的位会不断的闪烁,按该键可以使该位上的数值增减 1。

(1)设置上限值

首次按下 SET 键进入上限值设置,此时 LED0 点亮,数码管显示上限值温度,个位不停闪烁。按“加 1 键”或“减 1 键”可以对当前闪烁位上得值进行调整,按下“左移/右移键”可以切换当前调节的位。

(2)设置下限值

在设置上限值的基础上,再次点击 SET 键即可进入下限值的设定,此时 LED1 点亮,数码管显示下限值温度,个位不停闪烁。按“加 1 键”或“减 1 键”可以对当前闪烁位上的值进行调整,按“左移/右移键”可以切换当前调节的位。

4. 功能实现

如程序清单 4.50 所示为温控器的范例程序,程序中比较繁琐的是按键的处理程序。为了使程序结构更加清晰,分别对 3 种按键:切换状态(KEY0)、切换当前调节位(KEY2)、调节当前位的值(KEY1 和 KEY3)写了 3 个函数,各个函数直接在 key_process()按键处理程序中调用。其它部分均在 while(1)主循环中完成,主要完成 3 件事情:温度值的采集,每隔 500ms 进行一次;键盘扫描,每隔 10ms 进行一次;数码管扫描,每隔 5ms 进行一次。

程序清单 4.50 综合实验范例程序


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

    关注

    4

    文章

    100

    浏览量

    27442
  • IIC总线
    +关注

    关注

    1

    文章

    65

    浏览量

    20152
  • 接口编程
    +关注

    关注

    0

    文章

    9

    浏览量

    8704

原文标题:周立功:面向接口的编程——SPI 总线和IIC 总线

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SPI总线学习笔记

    SPI是一种全双工的串行通信总线,最早由Motorola提出,虽然应用广泛,但没有一个统一的总线标准。相较于IIC总线
    发表于 09-20 15:17 502次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>学习笔记

    IIC总线通讯接口器件的CPLD实现

    IIC总线通讯接口器件的CPLD实现摘要:介绍了采用ALTERA公司的可编程器件EPF10K10LC84-3实现IIC
    发表于 10-30 14:57

    IIC总线SPI总线通信详解

    IIC总线SPI总线通信介绍
    发表于 12-23 07:02

    IIC总线具有哪些特点

    4路模拟输入、一路DAC输出和一个IIC总线接口。其主要的功能特性如下:单电源供电,典型值为5V。通过3个硬件地址引脚编址。8位逐次逼近式A/D转换。片上跟踪与保持电路,采样速率取决与IIC
    发表于 12-09 07:40

    什么是IIC总线

    都具有标准的接口,通过地址来识别通信对象,使他们可以经由IIC总线互相直接通信。IIC总线由SDA数据线和SCL时钟线俩条线构成通信线路,既
    发表于 01-24 08:27

    基于PC/104 总线与CPLD 的SPI 接口设计

    本文根据SPI 同步串行接口的通信协议,介绍了在CPLD 中利用VHDL 语言实现PC/104 总线扩展SPI 接口的设计原理和
    发表于 05-30 09:28 41次下载

    基于CP2120的SPI与I2C总线接口转换电路设计

    基于CP2120的SPI与I2C 总线接口转换电路设计:SPI总线和FC总线应用广泛,但由5--
    发表于 04-12 08:35 55次下载

    数字接口系列文章之SPI总线

    数字接口系列文章之SPI总线  串行外设接口 (SPI) 总线是一种运行于全双工模式下的同步串
    发表于 01-08 10:46 813次阅读
    数字<b class='flag-5'>接口</b>系列文章之<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>

    SPI接口总线介绍

    SPI接口总线介绍 SPI 可以作为主、从器件工作,并可在同一总线上支持多个主、从器件。SPI
    发表于 11-24 08:41 4634次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b><b class='flag-5'>总线</b>介绍

    IIC总线接口学习

    在多主设备IIC 总线模式下,多个S3C2440A 微处理器可以从从属设备接收或发送串行数据。主设备S3C2440A 可以初始化和终止一个基于IIC 总线的数据传输。在S3C2440A
    发表于 04-27 15:31 61次下载
    <b class='flag-5'>IIC</b><b class='flag-5'>总线</b><b class='flag-5'>接口</b>学习

    深度解析IICSPI总线协议的区别与应用场景

    IIC vs SPI: 哪位是赢家?我们来对比一下IICSPI的一些关键点: 第一,总线拓扑结构/信号路由/硬件资源耗费
    的头像 发表于 12-22 16:48 1.8w次阅读
    深度解析<b class='flag-5'>IIC</b>和<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>协议的区别与应用场景

    IIC总线接口的资料详细说明

    S3C2440A RISC 微处理器可以支持多主设备 IIC 总线串行接口。专用串行数据线(SDA)和串行时钟线(SCL)承载总线主设备和连接IIC
    发表于 05-18 08:00 6次下载
    <b class='flag-5'>IIC</b><b class='flag-5'>总线</b><b class='flag-5'>接口</b>的资料详细说明

    数字接口(续)— SPI 总线

    数字接口(续)— SPI 总线
    发表于 11-07 08:07 0次下载
    数字<b class='flag-5'>接口</b>(续)— <b class='flag-5'>SPI</b> <b class='flag-5'>总线</b>

    浅谈SPI总线通信接口及其协议

    上篇内容我们介绍了IIC总线通信接口及其协议,这一篇文章我们介绍另一种项目开发中非常常见的通信接口——SPI
    的头像 发表于 03-22 16:11 1191次阅读
    浅谈<b class='flag-5'>SPI</b><b class='flag-5'>总线</b>通信<b class='flag-5'>接口</b>及其协议

    AXI IIC总线接口介绍

    LogiCORE™IPAXI IIC总线接口连接到AMBA®AXI规范,提供低速、两线串行总线接口,可连接大量流行的设备。
    的头像 发表于 09-28 15:56 4541次阅读