我试图通过SPI通信使 PIC1 成为主设备, PIC2 成为从设备。我想从 PIC1 (主)发送命令到 PIC2 (从站),然后让它做一些事情。但是,我想通过SPI通信建立从 PIC2 (从机)到数字电位器(MCP4241)的另一个SPI通信。这会有用吗?
举例说明:
PIC1 发送' a' ----> PIC2 读取它
PIC2 ---->建立与数字电位器(MCP4241)的连接
PIC2 ---->将数据发送到数字锅
因此,PIC1和PIC2之间将进行SPI通信,然后是PIC2和数字电位器,我不知道这是否会起作用,因为我需要使用相同的引脚。对于两个PIC,我使用的是pic16f690。
我希望我的问题很清楚,如果这不能解决,我该如何解决?
谢谢!
答案 0 :(得分:3)
首先,为了方便生活,我建议使用带有2个SPI端口的PIC用于PIC2。
但是,如果您确定只想使用一个SPI端口作为主设备并且是奴隶,那么要记住的是,您真的不希望两个PIC都试图驱动序列同时排队。您可能必须写入TRIS寄存器以使端口三态变为高阻态以及禁用spi外设。
如果你把一些串联电阻放在那里,那么事情会变得不那么糟糕,例如pic1试图将SCLK驱动为高电平,而pic2试图将其驱动为低电平,然后从pic1流向pic2的电流将受到限制
您可以使用额外的GPIO来让pic2在忙碌时告诉pic1。您需要清楚了解两台设备之间的执行流程,这样才不会遇到竞争条件等。
例如,您可以拥有
有很多方法可以实现这样的功能。重要的是在开始实施之前清楚地知道流程是什么
答案 1 :(得分:1)
您可能想要从主PIC1控制底池,但您必须有自己的理由。
通过执行以下操作可能会起作用:
在PIC1和PIC2之间增加1k串联电阻(MOSI,MISO和 SCLK)。
将数字电位器的CSpot也连接到PIC1。通过做 这样,PIC1就会知道PIC2正在使用SPI总线。
当CSpot为高电平(无效)时,PIC1仅发送SPI数据。
当PIC1处于非活动状态时,PIC2仅作为主设备运行。
串联电阻将保护PIC1输出免受PIC2的电压冲击。但是,当PIC1没有发送任何信息时,请阅读PIC数据手册,看看这些端子是否表现为HiZ。
确保查看串联电阻是否不大,以免SPI带宽受到影响。