通过SPI Pic到Pic通信

时间:2014-04-06 23:46:20

标签: c embedded microcontroller pic spi

我试图通过SPI通信使 PIC1 成为主设备, PIC2 成为从设备。我想从 PIC1 (主)发送命令到 PIC2 (从站),然后让它做一些事情。但是,我想通过SPI通信建立从 PIC2 (从机)到数字电位器(MCP4241)的另一个SPI通信。这会有用吗?

举例说明:

PIC1 发送' a' ----> PIC2 读取它

PIC2 ---->建立与数字电位器(MCP4241)的连接

PIC2 ---->将数据发送到数字锅

因此,PIC1和PIC2之间将进行SPI通信,然后是PIC2和数字电位器,我不知道这是否会起作用,因为我需要使用相同的引脚。对于两个PIC,我使用的是pic16f690。

我希望我的问题很清楚,如果这不能解决,我该如何解决?

谢谢!

2 个答案:

答案 0 :(得分:3)

首先,为了方便生活,我建议使用带有2个SPI端口的PIC用于PIC2。

但是,如果您确定只想使用一个SPI端口作为主设备并且是奴隶,那么要记住的是,您真的不希望两个PIC都试图驱动序列同时排队。您可能必须写入TRIS寄存器以使端口三态变为高阻态以及禁用spi外设。

  • 如果你把一些串联电阻放在那里,那么事情会变得不那么糟糕,例如pic1试图将SCLK驱动为高电平,而pic2试图将其驱动为低电平,然后从pic1流向pic2的电流将受到限制

  • 您可以使用额外的GPIO来让pic2在忙碌时告诉pic1。您需要清楚了解两台设备之间的执行流程,这样才不会遇到竞争条件等。

  • 例如,您可以拥有

  • 的流程
  • pic1发送'写锅''命令到pic2
  • pic1知道等待忙碌信号
  • pic2然后断言忙信号
  • pic1看到一个忙碌的信号,现在知道在开始另一个spi事务之前等待它清除
  • pic2使用pot进行spi事务
  • pic2清除忙音信号
  • pic1看到忙信号已清除,并且知道可以进行spi交易
  • pic2不会尝试任何spi交易,直到它获得另一个写锅#'

有很多方法可以实现这样的功能。重要的是在开始实施之前清楚地知道流程是什么

答案 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带宽受到影响。