与 Pic 16F913 通信

Posted

技术标签:

【中文标题】与 Pic 16F913 通信【英文标题】:Communicating with the Pic 16F913 【发布时间】:2010-07-18 16:28:25 【问题描述】:

这是我的问题,PIC 16F913 的所有通信线路似乎都位于同一组引脚上,这很方便,因为我不必为了通信而牺牲 GPIO 引脚,但是问题是我现在的问题是,如果我在芯片上使用 SPI,如何将信息发送到 RS232?

之所以出现这个问题,是因为我刚买了一个通过 SPI 通信的 CAN 总线芯片,我很想看到 RS232 上的数据,所以我可以看到消息。 (我真的对 CAN 了解不多,所以谁知道这是否有意义)。

这是我看到的选项,也许其他人有更好的想法,而我只是错过了。

    不知何故设置了一个时间方案,每次我获取数据时都会在 SPI 和 RS232 之间切换,

-- 这似乎并不难,应该可以工作,但是假设我不想错过一条消息,如果我在写 RS232 时写了一条消息,我会不会错过它?

2.. 我总是可以使用 SPI,但随后通过 8 条 GPIO 线构建我自己的通信总线,连接到另一个 PIC 16F913,仅使用 GPIO 线,然后由于第二个 PIC 上的 RS232 线是空闲的,我可以只需读取数据并将其吐出即可。

-- 这个是可行的,但现在我们浪费了 2 个芯片和所有 GPIO 线,

必须有更好的方法。或者有吗?

非常感谢任何帮助。

更新:我想澄清一下,显然一种解决方案是使用完全不同的芯片(如果我可以对 18F 进行编程,这实际上可能是我最终要做的事情),但是,我对最坏的情况感兴趣在我资源有限且只有一些 913 的情况下,上述方法是使用此芯片的唯一方法,还是有更好的方法?

【问题讨论】:

为什么一定要使用16F913? 18F 系列中的大多数部件很容易有足够的资源同时使用 MSSP 和 EUSART 模块;其中一些(例如 18F25J11)允许您重新配置外围设备使用的引脚,因此您不需要 84 引脚设备来使用单独的模块。 不幸的是我有pick kit 2,它将通过ICSP进行编程,但由于某种原因,我无法获得必须使用它进行编程的18F4550。所以我有点卡在16系列上。我想知道这是否是 18 系列的电压问题,我需要在不久的将来研究这个问题(学校快要放暑假了……呜呜呜) 您是否将 PGM 引脚拉低以禁用低压编程模式?让引脚浮动是我遇到的常见问题。 至少在使用 ICD2 时,18F 系列(例如 18F14K50)中有几个部件需要适配器来调节编程电压。但是this tutorial 建议您对于您所描述的硬件不需要任何此类适配器。仔细检查您的接线并确保您的保护二极管设置正确(或尝试将其取出,这有时对我有帮助)。 谢谢你们,我没有对它为什么不起作用进行任何真正的调查,但看起来 Mark 建议的教程确实使用了外部 P/S,我只是直接使用USB供电,至于PGM引脚低,我得看看,我不确定,实际上我只是连接了4个引脚进行编程,然后点击“编程”我遇到的另一个问题是MPlab 无法识别我有 ICSP 设置,因此我必须使用 PIK Classic 环境(我的名称可能有误)。不确定那是否也只是不认识它。 【参考方案1】:

您可以对 SPI 总线进行软件实现 - 它比 UART 更容易实现,因为时序并不重要,您可以控制它。

大多数 CAN 芯片都有一些接收缓冲区,因此如果您正忙于使用 UART 做一些事情,那么消息将被缓冲在 CAN 芯片内。但是......你需要确保你可以足够快/经常地从 CAN 芯片中获取信息,这样你就不会丢失一些信息。

您可能必须对 UART Tx 进程使用中断 - 这样您就可以在 UART 上发送数据时接收 CAN 消息。

如果您只对某些消息感兴趣,大多数 CAN 芯片都有过滤器 - 这使得只接收您感兴趣的消息变得容易,通常会显着降低每秒数据包的数量。

【讨论】:

有 SPI 实现的链接吗?不知道从哪里开始。 en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus 敲击 spi 总线并不是什么大问题。或 rs232 就此而言。如果你只想要一个带有 rs232 的调试通道,你可以只敲击发送并保存 uart 引脚以供任何其他接口共享这些引脚。 位爆炸意味着软件将 gpio 引脚配置为 gpio,通用。您可以使用芯片中的调谐计数循环或计时器进行计时。因此,要传输 rs323/serial 而不是将字节写入某个寄存器,触发并忘记,您可以通过更改 gpio 输出电平来发送起始位,计算使起始位足够长所需的时钟周期,然后取您要发送的字节的第一个(lsbit),为此设置输出电平,计数时钟,直到该位单元完成,重复,发送停止位,使输出保持空闲状态。 spi 是一样的,只是更多的 i/o 行 这真的很棒,我的意思是我有点理解它,但还没有真正坐下来做过,我肯定想玩这个。【参考方案2】:

您可以使用 RS232 端口的软件实现。例如,http://mikroe.com 的 c 编译器就带有这样的库。但是将位移到输出引脚应该不会太难,rs232是一个相当简单的协议。

【讨论】:

【参考方案3】:

我强烈建议您将 MCU 更换为 PIC16F1933。

    比较新 更便宜 带有 EUART 和 MSSP 模块。 改进了 MCU 架构。

PIC16F913 MCU 将在未来几年内过时!

【讨论】:

我想我买了它是因为 PickKit 2 板信息上说支持 913,我不确定是怎么回事,但至少使用 ICSP 我可以对其进行编程,除此之外,我不知道如何对其进行编程(其他人是否在实际板上对其进行编程?) 是的,ICSP 是正常的编程方式。当然你也可以用 ProMate 编程器来编程,不过这对于工厂来说是很正常的。 16F913 与 PICKIT 3 兼容。

以上是关于与 Pic 16F913 通信的主要内容,如果未能解决你的问题,请参考以下文章

PIC32单片机端C语言serial bootloader和PC端C#语言bootloader串口通信程序

操作系统实验3共享内存进程间通信实验

视频全面快速的硅光子和光子集成测试方案

自己用C语言写PIC32单片机的serial bootloader

为啥用串口调试助手和pic单片机相连发的指令都没有反应呢。

PIC32MZ 通过USB在线升级 -- USB HID bootloader