产品概述

单片机模拟 不同类型单片机之间如何“搭讪”(通信方式)?从这几个实例来看

小编 2024-10-06 产品概述 23 0

不同类型单片机之间如何“搭讪”(通信方式)?从这几个实例来看

几种常用单片机之间的通信方式

①采用硬件UART进行异步串行通信。这是一种占用口线少,有效、可靠的通信方式;但遗憾的是许多小型单片机没有硬件UART,有些也只有1个UART,如果系统还要与上位机通信的话,硬件资源是不够的。这种方法一般用于单片机有硬件UART且不需与外界进行串行通信或采用双UART单片机的场合。

②采用片内SPI接口或I2C总线模块串行通信形式。SPI/I2C接口具有硬件简单、软件编程容易等特点,但目前大多数单片机不具备硬件SPI/I2C模块。

③利用软件模拟SPI/I2C模式通信,这种方式很难模拟从机模式,通信双方对每一位要做出响应,通信速率与软件资源的开销会形成一个很大的矛盾,处理不好会导致系统整体性能急剧下降。这种方法只能用于通信量极少的场合。

④口对口并行通信,利用单片机的口线直接相连,加上1~2条握手信号线。这种方式的特点是通信速度快,1次可以传输4位或8位,甚至更多,但需要占用大量的口线,而且数据传递是准同步的。在一个单片机向另一个单片机传送1个字节以后,必须等到另一个单片机的接收响应信号后才能传送下一个数据。一般用于一些硬件口线比较富裕的场合。

⑤利用双口RAM作为缓冲器通信。这种方式的最大特点就是通信速度快,两边都可以直接用读写存储器的指令直接操作;但这种方式需要大量的口线,而且双口RAM的价格很高,一般只用于一些对速度有特殊要求的场合。

从上面几种方案来看,各种方法对硬件都有很大的要求与限制,特别是难以在功能简单的单片机上实现,因此寻求一种简单、有效的,能在各种单片机之间通信的方法具有重要的意义。③、④方案中,双方单片机要传递的每一位或每一个字节做出响应,通信数据量较大时会耗费大量的软件资源,这在一些实时性要求高的地方是不允许的。

针对这一问题,假设在单片机之间增加1个数据缓冲器,大批数据先写入缓冲区,然后再让对方去取,各个单片机对数据缓冲器都是主控模式,这样必然会大大提高通信效率。谈到数据缓冲,我们马上会想到并行RAM,但是并行RAM需要占用大量的口线(数据线+地址线+读写线+片选线+握手线),一般在16条以上。这是一个让人望而生畏的数字,而且会大大增加PCB面积并给布线带来一定的困难,极少有人采用这种方式。串行接口的RAM在市场上很少见,不但难以买到而且价格很高。移位寄存器也可以做数据缓冲器,但目前容量最大的也只128位,因为是“先进先出”结构,所以不管传递数据多少,接收方必须移完整个寄存器,灵活性差而且大容量的移位寄存器也是少见难买的。一种被称为“铁电存储器”芯片的出现,给我们带来了解决方法。

利用铁电存储器作为数据缓冲器的通信方式

铁电存储器是美国Ramtran公司推出的一种非易失性存储器件,简称FRAM。与普通EEPROM、Flash-ROM相比,它具有不需写入时间、读写次数无限,没有分布结构可以连续写放的优点,因此具有RAM与EEPROM的双得特性,而且价格相对较低。

现在大多数的单片机系统配备串行EEPROM(如24CXX、93CXX等)用来存储参数。如果用1片FRAM代替原有EEPROM,使它既能存储参数,又能作串行数据通信的缓冲器。2个(或多个)单片机与1片FRAM接成多主-从的I2C总线方式,增加几条握手线,即可得到简单高效的通信硬件电路。在软件方面,只要解决好I2C多主-从的控制冲突与通信协议问题,即可实现简单、高效、可靠的通信了。

实例(双单片机结构,多功能低功耗系统)

(1)硬件

W78LE52与EMC78P458组成一个电池供电、可远程通信的工业流量计。78P458采用32.768kHz晶振,工作电流低,不间断工作,实时采集传感器的脉冲及温度、压力等一些模拟量;W78LE52采11.0592MHz晶振,由于它的工作电流较大,采用间断工作,负责流量的非线性校正、参数输入、液晶显示、与上位机通信等功能,它的UART用于远程通信。2个单片机共用1片I2C接口的FRAM(FM24CL16)组成二主一从的I2C总线控制方式,W78LE52的P3.5、P3.2分别与78P458的P51、P50连接作握手信号线A与B。我们把握手线A(简称A线)定义为总线控制、指示线,主要用于获取总线控制权与判别总线是否“忙”;握手线B(简称B线)定义为通知线,主要用于通知对方取走数据。

(2)I2C总线仲裁

由于我们采用的是二主一从的I2C总线方式,因此防止2个主机同时去操作从机(防冲突)是一个非常重要的问题。带有硬件I2C模块的器件一般是这样的,器件内部有1个总线仲裁器与总线超时定时器:当总线超时定时器超时后指示总线空闲,这时单片机可以发出获取总线命令,总线仲裁器通过一系列操作后确认获取总线成功或失败;超时定时器清零,以后的每一个SCL状态变化对总线所有主机的超时定时器进行清零,以防止它溢出,指示总线正处于“忙”状态,直到一个主机对总线控制结束不再产生SCL脉冲;超时定时器溢出,总线重新回到“空闲”状态。但是目前大多数单片机没有配备硬件I2C模块,而且当2个主机的工作频率相差较大时,超时定时器定时值只能设为较大的值,这样也会影响总线的使用效率。

下面介绍一种用软件模拟I2C总线仲裁的方式(I2C读写操作程序的软件模拟十分多见,这里不再多述):用1条握手线A,当A线高电平时,指示总线空闲;当其中一个主机要获取总线控制权时,先查询总线是否空闲,“忙”则退出,空闲则向A线发送一个测试序列(如:1000101011001011),在每次发送位“1”后读取的A线状态。如果读取状态为“0”,马上退出,说明有其它器件已经抢先获取总线;如果一个序列读取的A线状态都正确,则说明已成功获得总线控制权,这时要拉低A线以指示总线“忙”,直到读写高A线,使总线回到“空闲”状态。不同的主机采用不同的测试序列,或产生随机测试序列,测试序列长度可以选得长一些,这样可以增加仲裁的可靠性。

(3)通信协议

一个可靠通信体系,除了好的硬件电路外,通信协议也至关重要。在单片机系统RAM资源与执行速度都非常有限的情况下,一个简捷有效的协议是非常重要的。下面具体介绍一种比较适用于单片机通信的协议,数据以包的形式传送。数据包结构:

①包头——指示数据包的开始,有利于包完整性检测,有时可省略;

②地址——数据包要传送的目标地址,若只有双机通信或硬件区分地址可以省略;

③包长度——指示整个数据包的长度;

④命令——指示本数据包的作用;

⑤参数——需要传送的数据与参数;

⑥校验——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或者是它们的组合;

⑦包尾——指示数据包的结尾,有利于包完整性检测,有时可省略。

(4)通信流程

首先,要在FRAM里划分好各个区域,各个单片机的参数区、数据接收区等。然后,单片机可以向另一个单片机发送数据包,发送完毕之后通过向握手线B发送1个脉冲通知对方取走数据;接收方读取数据并进行处理后,向FRAM内发送方的数据接收区写入回传数据或通信失败标志,再向握手线B发送1个脉冲回应发送方。

如果需要单片机2发送的话,只需交换一下操作过程即可。

4 总结

通过实践可知,以上方法是可行的。与其它方法相比具有发下优点:

①简单。占用单片机口线少(SCL、SDA、握手线A、握手线B)。

②通用。软件模拟I2C主机方式,可以在任何种类的单片机之间通信。

③高效。由于采用数据缓冲,可以在不同时钟频率、不同速度的单片机之间通信;读写数据时,可以I2C总线的最高速度进行,可以实现1次传送大量数据;在一个单片机向FRAM传送数据时,另一个单片机无须一一作出响应或等待,可以进行其它程序操作,提高软件工作效率。

④灵活。通信硬件接口对于各个单片机是对等的,通过软件配置,每个单片机既可以根据需要主动发送通信,也可以只响应其它单片机的呼叫。

⑤容易扩展。通过增加地址识别线,修改通信协议,即可做到多机通信。

以下是需要注意的地方:

①为了提高通信效率,握手线B最好使用中断端口,负脉冲宽度一定要满足速度较低单片机中断信号要求。如果没有中断的话应增加1条口线,用改变端口状态的方法通知对方,等待对方查询,而不是负脉冲。

②向对方发送负脉冲时,应屏蔽自己的中断。

③由于参数与通信缓冲区同时设在同一片FRAM内,要避免对参数部分的误操作。一个较好的解决办法是把参数存放在地址的后半部分(A2=1),在进行通信操作时,把FRAM的WP引脚拉高(地址在后半部分的单元写保护),这样可以有效地防止测验时对参数区误操作。

④由于I2C总线在一个时间段内只有1个主机和1个从机,所以当1个单片机正在写通信数据时,另一个单片机是不能对FRAM进行操作的。如果需要实时、频繁地读取FRAM中参数的话,请预先将参数读入RAM单元使用或另外增加专门存放参数的芯片。

数字电路,模拟电路单片机基础知识!

数字电路

1数字信号: 指的是在时间上和数值上都是离散的信号;即信号在时间上不连续,总是发生在一序列离散的瞬间;在数值上量化,只能按有限多个增量或阶梯取值。(模拟信号:指在时间上和数值上都是连续的信号。)

2数字电路主要研究: 电路输入、输出状态之间的相互关系,即逻辑关系。分析和设计数字电路的数学工具是逻辑代数,由英国数学家布尔1849年提出,因此也称布尔代数。

3逻辑代数有三种最基本的运算: 与、或、非。基本逻辑的简单组合称为复合逻辑。

4 逻辑代数三个基本规则: 代入规则、反演规则和对偶规则。

5 化简电路是为了降低系统的成本,提高电路的可靠性,以便使用最少集成电路实现功能。

6 把若干个有源器件和无源器件及其导线,按照一定的功能要求制作在同一块半导体芯片上,这样的产品叫集成电路。最简单的数字集成电路就是集成逻辑门,以基本逻辑门为基础,可构成各种功能的组合逻辑电路和时序逻辑电路

7TTL门电路 :是目前双极型数字集成电路使用最多的一种,由于输入端和输出端的结构形成都采用了半导体三极管,所以也称晶体管-晶体管逻辑门电路。TTL与非门是TTL门电路的基本单元。最常用的集成逻辑门电路TTL门和CMOS门。

8集成逻辑门 ,按照其组成的有源器件的不同可分为两大类:一类是双极性集体管逻辑门,主要有TTL门 (晶体管-晶体管逻辑门)、ECL门 (射极耦合逻辑门)、I2C门 ;另一类是单极性绝缘栅场效应管逻辑门,简称MOS门。

问题集锦

1同步电路和异步电路的区别是什么?

同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。

异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。

2什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?

将两个门电路的输出端并联以实现与逻辑的功能成为线与。 在硬件上,要用OC门来实现,同时在输出端口加一个上拉电阻。 由于不用OC门可能使灌电流过大,而烧坏逻辑门。

3解释setup和hold time violation,画图说明,并说明解决办法。

Setup/hold time是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。

保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time不够,数据同样不能被打入触发器。

建立时间(Setup Time)和保持时间(Hold time)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。

4什么是竞争与冒险现象?怎样判断?如何消除?(汉王笔试)

在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。

产生毛刺叫冒险。判断方法:代数法、图形法(是否有相切的卡诺圈)、表格法(真值表)。如果布尔式中有相反的信号则可能产生竞争和冒险现象。

冒险分为偏“1”冒险和偏“0”冒险

解决方法:一是添加布尔式的消去项;二是在芯片外部加电容;三是加入选通信号。

5名词:SRAM、SSRAM、SDRAM: (SRAM:静态RAM; DRAM:动态RAM; SSRAM:Synchronous Static Random Access Memory同步静态随机访问存储器。它的一种类型的SRAM。SSRAM的所有访问都在时钟的上升/下降沿启动。地址、数据输入和其它控制信号均于时钟信号相关。这一点与异步SRAM不同,异步SRAM的访问独立于时钟,数据输入和输出都由地址的变化控制。SDRAM:Synchronous DRAM同步动态随机存储器

6FPGA和ASIC的概念,他们的区别。

答案:FPGA是可编程ASIC。 ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。与门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点。

7单片机上电后没有运转,首先要检查什么?

a、首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压,例如常用的5V。b、接下来就是检查复位引脚电压是否正常。分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。c、然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形;经过上面几点的检查,一般即可排除故障了。如果系统不稳定的话,有时是因为电源滤波不好导致的。在单片机的电源引脚跟地引脚之间接上一个0.1uF的电容会有所改善。如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如220uF的。遇到系统不稳定时,就可以并上电容试试(越靠近芯片越好)。

8什么是同步逻辑和异步逻辑?

同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。

9你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?

常用逻辑电平:12V,5V,3.3V;TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V。

相关问答

单片机 如何实现多路 模拟 量的数据采集、显示?

现在的单片机都带有ad转换模块,并且转换的通道多达10个以上,首先硬件要保证模拟量输入到ad转换的接口,然后编写软件程序,一般使用单片机的dam功能,实现多路...

单片机 的I/O接口能输入或输出 模拟 信号吗? - 懂得

单片机的I/O接口,如果该I/O口有AD功能就可以,以模拟量信号输入,如果该I/O口有PWM功能就可以,以PWM调制信号输出,或者通过滤波以模拟量信号输出,现在...

如何扩展 单片机 模拟 输入接口(除了加 单片机 )?

模拟输入口扩展可以用ADC0809来实现,一片ADC0809可以扩展8个模拟输入口。模拟输入口扩展可以用ADC0809来实现,一片ADC0809可以扩展8个模拟输入口。

stc90c58rd+ 单片机 模拟 12路64级pwm输出,串口工作时,调光出现闪烁,怎么解决?

T0中断太频繁了,因为同级中断,T0优先,所以总抢占中断,串口被边缘话了。修改一下程序:T0中断太频繁了,因为同级中断,T0优先,所以总抢占中断,串口被边缘话了。...

请问 单片机 输出的信号是什么类型的?

单片机输出的信号通常是数字信号,即0或1的电平信号。这是因为单片机的工作方式是基于二进制的,它们内部的逻辑电路只能处理数字信号。单片机的输出端口可以驱...

单片机 ,电路设计,电路 模拟 ,需要怎样的电脑配置?

普通的就可以~!没有什么要求啊~!但是最好装XP系统比较好~!普通的就可以~!没有什么要求啊~!但是最好装XP系统比较好~!

如何判别一款 单片机 的哪些脚是输入、输出 模拟 信号的,哪些是输入、输出数字信号的?

任何一个芯片都会有对应的引脚图纸的,别人是没法知道的,只有看厂家提供的图纸连续的信号叫模拟信号,不连续的信号叫数字信号方波即高低电平,是数字信号,正...

请问在51 单片机 控制系统中,如何实现对多路 模拟 信号的同时测量?

普通单片机实现多路模拟量的数据采集、显示需要:外部连接一个多通道输入的ADC芯片,单片机按照一定的周期驱动模拟开关切换到不同的模拟通道,设计模数转换控制...

51 单片机 模拟 信号转数字信号 - OSCHINA - 中文开源技术交...

单片机自带AD转换歪,这都是我8年前干的事情,单片机本身就支持模拟信号转数字信号,你只需要接收数字信号进行处理就行。51单片机将模拟信号转数字信号,谁有类似...

用三菱编程指令,STC 单片机 上的 模拟 电位器数据如何采集?

可以的,你可以用三菱PLC的专用协议配合STC程序通过串口通讯。或用自由协议,自由协议比较复杂,但STC那边实现起来比较简单直接用串口按规则把电位器的值发送...

猜你喜欢