2

我正在尝试将两个 PIC 16f627 芯片(使用 PICC-Lite 编程)与一个 I/O 引脚(RA2,在已知点改变方向)和一个由其中一个芯片驱动的 CLK 引脚连接在一起。

我最初设置了它,所以有一个主人和一个奴隶。主机将写入一个 8 位“命令”,I/O 引脚的 TRIS 位将被翻转,从机将以 16 位“应答”响应。

我已经进行了(临时的,大的)延迟,以确保没有时间问题。

写/读命令工作正常,两端翻转状态(TRISA)。然而,此时,当主机从之前写入的引脚读取时,即使引脚物理上为 1,它也始终读取 0!

据我所知,TRISA设置正确(=如果输入则设置为位),CMCON(=7)也是如此,我相信CONFIG字;两个芯片都是一样的(嗯,倒置),输入在从机上工作……我还试图确保两个芯片的 TRISA 永远不会同时为 0。

我试过的: - 改变从机,而不是试图发回数据,它只是在很长的时间间隔内切换它的输出引脚的值。这可以在输出线上看到,但在输入引脚的值上看不到。- 只是将状态从输入引脚传递到不同的输出引脚(输出保持为零;虚拟放置表明该引脚上的一般输出有效) - 将 PORTA 和 TRISA 的值写入 LCD - TRISA 正确,但 PORTA 为 0 (即使连接到引脚的线为高电平) - 将 I/O 线连接到 LED 表明它正在改变,但端口上的输入值没有 - 连接电压表显示合适的电压(等于 V+ ) - 我尝试将 Master 换成替代品(它认为它可能遭受了一些物理损坏),尽管这没有任何区别 - 我'

我正在用头撞墙。任何提示或想法将不胜感激!我可能不得不依靠使用两个引脚(尽管我有点希望我能够在某个时候通过一条共享 I/O 线插入多个从站……)

4

2 回答 2

0

原始帖子很旧,但如果其他人有这个问题,您可能想发布您的代码。不是说他/她这样做了,但原始发布者可能一直在读取引脚的锁存值而不是端口值。也就是说,读取最后写入的内容,而不是引脚上实际接收到的电压。

在命令和响应之间的时间越长,在 2 个处理器之间保持良好的时序就越困难。为什么不实现一个主设备和从设备都在处理每一位的协议。将导致同步发生的速度比 OP 提出的方案快 24 倍。

这是我所看到的:主机使用通过电阻连接到高电平的开漏引脚(我认为在这种情况下为 A4)输出一个 8 位命令。但随后主机继续输出 16 个零。哦,忘了说 1 的 lo 长于三态(或 hi,因为我们通过电阻连接 hi),而 0 的 lo 短于三态(或 hi,因为我们通过电阻连接 hi)。另一端的从机收到了 8 位命令,并没有注意 16 个零。现在,每次主机降低线时,如果从机的响应在该位位置为零,则从机将不做任何事情。但是,如果响应为 1,则从机也将在比主机更长的时间内发送 lo。由于主机和从机是开漏输出,并且通过将这两个引脚连接在一起产生的电气注释通过电阻器连接起来,所以没有问题。信号看起来像一个普通的 1。这就是主软件的想法。也就是说,当主控器输出 16 个零时,主控器正在读取端口值的 0 和 1。这完全取决于奴隶是否会留在外面,因为它希望主人认为零,如果奴隶会跳进去并按住线路更长时间导致主人认为,啊,那是一。

于 2014-01-13T05:44:04.627 回答
-1

如果您只有两个可用的 I/O 引脚,并且您正在考虑将来添加更多从设备,我建议您使用标准协议而不是自己制作。I2C 可以正常工作,但您需要切换到具有 MSSP 模块的设备。

于 2011-07-06T15:15:18.603 回答