【问题标题】:PIC 16f627 using a pin for both input and outputPIC 16f627 使用一个引脚用于输入和输出
【发布时间】:2011-02-26 03:13:19
【问题描述】:

我正在尝试将两个 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换成替代品(它认为它可能遭受了一些物理损坏),但这没有任何区别 - 我读过这可能是一个“读取-修改-写入”问题,但我找不到任何建议来确保 Pic16s 上不是这种情况......(没有 LAT 端口 AFAIK?)

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

【问题讨论】:

  • 我认为问题在于 TRISA 在(不受支持的)pic 16f628 上使用时无法在 picc-lite 中正常工作 - 结果其中一个芯片是 16f628。将 i/o 引脚移至 PORTB 似乎可行——不过,能够将引脚用作 PORTA 上的输入会很好!
  • 您使用的是电压参考模块吗?您是否在将 CMCON 设置为 7 时设置了存储库 1?
  • VRCON[6] 应该是0。是这样吗?
  • 你能把代码放在这里吗?

标签: io hardware pic master-slave microchip


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不需要 MSSP 模块。您可以通过软件来完成。
    • 您可以很容易地实现主机,但如果没有 MSSP 或具有中断功能的引脚,尤其是对于初学者来说,从机实现可能会很棘手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多