嵌入式系统/PIC 微控制器
由 Microchip 制造的(“外设接口控制器”)微控制器在工程师和爱好者中都很受欢迎。PIC 微控制器有各种“口味”,每种都有不同的组件和功能。
许多类型的电子项目可以使用 PIC 微处理器系列轻松构建,其中包括时钟、非常简单的电子游戏、机器人、伺服控制器等等。PIC 是一款非常通用的微控制器,可以提供多种选择,价格合理。
该系列的其他微处理器包括 Parallax SX、Holtek HT66Fxxx 系列、Holtek HT48FxxE 系列 以及一些“PIC-on-a-FPGA”实现。
通用仪器生产了一款名为 PIC1650 的芯片,被称为可编程智能计算机。该芯片是所有 PIC 芯片的鼻祖,在功能上与目前的 16C54 相似。它被设计为其 CP1600 微处理器的外设。也许这就是为什么大多数人认为 PIC 代表外设接口控制器。Microchip 从未使用 PIC 作为缩写,只是用 PIC。最近,Microchip 开始将其 PIC 称为 PICmicro MCU。
如何在近 2000 种不同的 PIC 微控制器型号中找到适合您的 PIC 呢?
Microchip 网站有一个非常棒的产品选择工具。您只需输入最低要求,并选择性地输入所需的可选要求,就会显示生成的零件编号及其基本特性列表。
您可以直接从 Microchip 的在线商店Microchip Direct 购买 PIC 处理器。价格与许多分销商相同,有时甚至更优惠。
规则一:只选择您可以实际获得的微处理器。PIC 都是相似的,因此您不必过于挑剔要使用哪种型号。
如果您的学校仓库里只有一种 PIC,就使用它。如果您从 Newark 或 DigiKey 等公司订购,请忽略任何“缺货”的零件,只订购“有货”的零件。这将节省您大量用于创建项目的时间。
曾经,PIC16F84 是爱好者最棒的 PIC,遥遥领先。但由于生产水平的提高,Microchip、Parallax 和 Holtek 现在正在制造许多芯片,它们甚至更好,而且往往更便宜。
- 我想要一个包含前 4 名左右 PIC 推荐的列表,以及*为什么*推荐它们,以便当有更好/更便宜的芯片出现时,可以轻松地确认并添加到列表中。
(总结 PICList PIC 微控制器入门清单、PIC Elmer 160:附录“A”:“其他 PIC” 2003 以及 Wouter van Ooijen :)
PIC:选择一颗芯片,然后购买。
许多人推荐以下 PIC 作为爱好者“第一个 PIC”的不错选择,请考虑修订号(例如 16F628A 中的 A)
- PIC18F4620:它有 13 个模拟输入——Wouter van Ooijen 建议爱好者使用最大且功能最强大的芯片 [1],而这是(截至 2006 年 1 月)最大的芯片。约 9 美元
PIC16F877A——16F87x 系列中最大的芯片;有 8 个模拟输入——Wouter 推荐 (#2);AmQRP;PICList。约 8 美元- PIC16F877A,这可能是爱好者社区中最受欢迎的仍在生产的 PIC。这是其家族中最棒的 PIC,曾经与 PIC16F84 一起是较大爱好者项目的“首选 PIC”。具有 14KB 的程序存储器、368 字节的 RAM、40 引脚封装、2 个 CPP 模块、8 个 ADC 通道,每个通道可实现 10 位。它还支持 UART 和 MSSP,后者是一个 SSP,能够充当主控,控制连接到 I2c 和 SPI 总线的任何设备。与迄今为止提到的其他 PIC 相比,没有内置振荡器,这一点需要注意。此外,这款 PIC 的功能与价格相比相对昂贵。这可能是 Microchip 为了促使迁移到更好的芯片而采取的措施。——Ivaneduardo747 推荐;Wouter (#2);AmQRP——[2]。约 9 美元
PIC16F88——有 7 个模拟输入——AmQRP 推荐;SparkFun。约 5 美元- PIC16F88,它是 PIC16F628A 的增强版本。它拥有 16F628 的所有功能,外加两倍的程序存储器,7KB;七个 10 位 ADC,一个 SSP(同步串行端口),能够接收通过 I2C 和 SPI 总线发送的消息。它还支持自编程,这一功能被某些开发板用来避免使用编程器,节省了购买编程器的成本。——Ivaneduardo747 推荐;AmQRP——SparkFun。约 5 美元
PIC16F628——比 PIC16F84A 便宜,内置 4 MHz 时钟和 UART,但没有模拟输入——Wouter 推荐 (#3);AmQRP——约 4 美元- PIC16F628A,这是一款不错的入门级 PIC,因为它与过去爱好者最喜欢的 PIC 之一 PIC16F84 兼容。这样,初学者就可以从大量的项目和程序目录中选择,尤其是使用 PIC 汇编器等低级语言创建的项目和程序。它具有 18 引脚封装、3.5KB 的闪存,使用 20MHZ 晶体时,每秒可执行高达 500 万条指令 (MIPS)。需要注意的是它没有模拟-数字转换器 (ADC)。与 PIC16F84A 相比,它有一个 UART,能够生成和接收 RS-232 信号,这对于调试非常有用。有些人觉得讽刺的是,这款芯片比功能更少的 PIC16F84A 还便宜。——Ivaneduardo747 推荐;Wouter (#3) AmQRP——约 5 美元
- PIC16F1936,一款功能强大的中档 PIC,带有 11 个通道、10 位 ADC;两个间接指针寄存器;XLP(超低功耗)用于电池供电设备的低功耗消耗。——某些人在 PICList 上推荐它作为 16F877 更快、更好、更便宜的替代品。——约 3 美元
- PIC12F683,一款小型 8 引脚微控制器。它是一款适用于小型应用的不错的微控制器,因为它体积小、功耗相对较高,并且具有多种功能,如 4 个 ADC 通道和内置 4MHZ 振荡器。——Ivaneduardo747 推荐;[3]。约 2.50 美元
Microchip 自 2003 年以来推出了许多新零件,其中是否有任何零件在某些方面比这些芯片更适合爱好者使用? 待办事项:"开始 PIC 编程:什么 PIC 芯片适合入门?" 是否有任何有用的建议添加到以上内容中?
有几个不同的“系列”。
- “F” 后缀表示芯片具有可重新编程的闪存。
PIC10F—in super-tiny 6 pin packages PIC12F—in tiny 8-pin packages PIC14F PIC16F—in tiny 14-pin packages PIC18F PIC24F PIC24E PIC24H dsPIC30F dsPIC33F dsPIC33E
- “C” 后缀表示芯片使用 EPROM 存储器。其中一些芯片曾经使用非常昂贵的紫外线擦除器擦除。这种方法主要由公司使用。但大多数这些芯片是专门制造的,一旦写入就不能更改:它是 OTP(一次性可编程)。人们过去会在将程序写入此类芯片之前仔细检查他们的程序。最近,随着闪存成本的下降,这种芯片的使用越来越少,但其中一些仍然被使用,因为它们具有可靠性或降低了成本。
PIC12C PIC16C PIC17C PIC18C
每个系列都有一个具有所有功能的“完整”成员和一些缺少某些功能的变体成员。例如,在 16F84 系列中,16F84 是功能最全面的 PIC,具有闪存,其程序空间是 16F83 的两倍。该系列还包括 16C84 和 16C83,它们是少数可重新编程的 C 后缀 PIC 之一。对于原型设计,我们通常使用“完整”版本以确保我们能够使原型能够正常工作。在原型设计期间,我们希望反复调整代码、重新编程和测试,直到它正常工作。因此,除非必要,否则我们使用上述“闪存”系列,而不是“OTP”系列。对于短期生产,建议使用 C 部件。对于非常长的生产线,一些带有掩码编程 ROM 的 PIC 被使用。现在,Microchip 提供工厂预编程服务。
每个系列的每个成员通常都有几种不同的封装。爱好者通常使用塑料双列直插式封装(通常称为 DIP 或 PDIP),因为它最容易插入无焊面包板 并进行调试。(“宽 DIP”也一样好)。他们避免使用陶瓷双列直插式封装 (CDIP),不是因为陶瓷不好(它同样容易插入无焊面包板),而是因为塑料部件同样好用且便宜得多。
(稍后,为了大规模生产,我们可能会弄清楚哪种最便宜的简化版本仅仅具有足够的性能来正常工作,并且采用最便宜的封装,该封装仅具有足够数量的引脚来满足此特定应用… 甚至可能是一个 OTP 芯片)。
然后,每个系列每个成员的每种不同封装都有“商业温度范围”和“工业温度范围”。
PIC 16 系列被认为是 PIC 的一个良好通用系列。PIC 16 通常具有 3 个输出端口。以下是该系列中一些曾经很常见的型号
- PIC 16C54 - 最初的 PIC 型号,'C54 提供 18 引脚 DIP 封装,有 12 个 I/O 引脚。
- PIC 16C55 - 提供 28 引脚 DIP 封装,有 20 个可用 I/O 引脚
- PIC 16C56 - 与 'C54 具有相同的外形尺寸,但功能更多
- PIC 16C57 - 与 'C55 具有相同的外形尺寸,但功能更多
- PIC 16C71 - 具有 4 个可用 ADC,它们映射到与端口 A 相同的引脚(双用途引脚)。
- PIC 16C84 - 具有在电路中擦除和重新编程 EEPROM 的能力
网上有许多为 PIC16x 系列编写的程序可以免费获取。
基于闪存的芯片(如 PIC16F88)在开发方面更加方便,并且可以运行为上述芯片编写的代码,几乎不需要更改。
PIC12x 系列是最小的系列,具有 8 个引脚,最多 6 个可用 I/O 引脚。当空间和/或成本是一个因素时,这些芯片就会被使用。
PIC 18x 系列提供 28 引脚和 40 引脚 DIP 封装。它们具有更多端口、更多 ADC 等… PIC 18 通常被认为是高端微控制器,有时甚至被称为成熟的 CPU。
Microchip 目前(截至 2007 年)生产 6 款具有 USB 接口的闪存微控制器。它们全部属于 PIC18Fx 系列。(28 引脚 PIC18F2450、PIC18F2455、PIC18F2550;以及 40/44 引脚 PIC18F4450、PIC18F4455、PIC18F4550)。
PIC 栈是一个专用的寄存器组(与程序员可访问的寄存器分开),它只能用于在函数调用(或中断)期间存储返回地址。
- 12 位:具有 12 位内核的 PIC 微控制器(第一代 PIC 微控制器)(包括大多数 PIC10、一些 PIC12、少数 PIC16)在其硬件栈中只有 2 个寄存器。12 位 PIC 程序中的子程序最多只能嵌套2 层,否则栈就会溢出,数据就会丢失。编写 12 位 PIC 程序的人们会花很多努力来解决这个问题。(这些人被迫严重依赖避免使用硬件栈的技术。例如,宏、状态机和软件栈)。
- 14 位:具有 14 位内核的 PIC 微控制器(大多数 PIC16)在其硬件栈中具有 8 个寄存器。这使得函数调用更容易使用,即使编写它们的程序员应该意识到一些剩余的问题 [4].
- 16 位:具有 16 位内核的 PIC 微控制器(所有 PIC18)具有“31 层深”的硬件栈深度。这对于大多数人编写的程序来说已经足够深了。
许多算法涉及将数据推送到某个栈中,然后稍后从该栈中拉取数据。在 PIC 上编写此类算法的人们必须为数据使用一个单独的软件栈(类似于Forth)。(使用其他微处理器的人们通常为子程序返回地址和这个“栈数据”共享一个栈)。
调用树分析可用于查找程序使用的最深子程序嵌套。(除非程序使用w:递归)。只要“主”程序的最深嵌套加上中断例程的最深嵌套的总和少于其运行的微控制器的栈大小,那么一切都会正常工作。一些编译器会自动执行这种调用树分析,如果硬件栈不足,编译器会自动切换到使用“软件栈”。汇编语言程序员被迫手动执行这种分析。
PIC 微控制器提供了 BASIC、C、Forth 和几种其他编程语言的版本。请参阅嵌入式系统/PIC 编程.
你需要一个名为“下载器”的设备来将编译后的程序从你的 PC 传输到微控制器并将其烧录到微控制器中。(不幸的是,“编程”有两种含义—请参阅嵌入式系统/术语#编程)。
下载器有两种类型。如果你在系统中拥有 PIC,并且想要更改软件,
- 使用“IC 编程器”类型的设备,你必须取出 PIC,将其插入“IC 编程器”,重新编程,然后将 PIC 放回你的系统中。
- 使用“在线编程器”样式的设备(ICSP),您无需接触PIC本身,只需将编程器的电缆直接插入您(希望)放置在PIC旁边的接头,重新编程,然后拔下电缆。
(不完整)的编程器列表包括
- BobProg - 带外部电源的简单 ICSP 编程器 [5]
- JDM 编程器 为 LVP 微控制器修改 [6]
- PIC16F84 的在线编程器 PIC16F84 编程器
- IC 编程器 ICProg 程序:12Cxx、16Cxxx、16Fxx、16F87x、18Fxxx、16F7x、24Cxx、93Cxx、90Sxxx、59Cxx、89Cx051、89S53、250x0、PIC、AVR、80C51 等。
- 许多其他编程器在 MassMind 上列出。
许多人更喜欢在可能的情况下使用“引导加载程序”进行编程。引导加载程序在第 引导加载程序和引导扇区 章中详细介绍。
电源
[edit | edit source]任何电子电路中最重要的部分是电源。PIC 编程器需要 +5 伏和 +13 伏稳压电源。需要两个电源是由于不同的编程算法
- 高功率编程模式 - 在这种模式下,我们通过将 PIC 的 RB7(数据)和 RB6(时钟)引脚驱动为低电平,同时将 MCLR 引脚从 0 驱动到 VCC(+13v)来进入 PIC 的编程模式。
- 低功率编程模式 - 此算法仅需要 +5v 用于编程操作。在此算法中,我们将 RB3(PGM)从 VDD 驱动到 GND 以进入编程模式,然后将 MCLR 设置为 VDD(+5v)。
这已经在 PIC 燃烧器硬件内部处理。如果您好奇如何做到这一点,您可能想查看在线的各种 PIC 燃烧器硬件原理图。[1][2]
引脚图
[edit | edit source]振荡器电路
[edit | edit source]所有 PIC 微控制器都内置了可用的 RC 振荡器电路,尽管它们很慢,而且颗粒度很高。也可以应用外部振荡器电路,最高频率为 20 MHz。PIC 指令每个机器指令周期需要 4 个时钟周期,因此可以以 5 MHz 的最大有效速率运行。但是,某些 PIC 内置了 PLL(锁相环)乘法器。用户可以启用 4 倍乘法器,从而产生 4 x 外部振荡器的虚拟振荡器频率。例如,在允许的最大振荡器为 16 MHz 的情况下,虚拟振荡器以 64 MHz 运行。因此,PIC 将执行 64 / 4 = 16 MIPS(每秒百万条指令)。某些 PIC 还内置了振荡器,通常为 4Mhz 用于精确的 1MIPS,或低功耗不精确的 48kHz。这释放了两个 I/O 引脚用于其他目的。如果您想将其他硬件与一个 PIC 的内部时钟同步,这些引脚也可以用来产生频率。
编程
[edit | edit source]继续使用 嵌入式系统/PIC 编程。
进一步阅读
[edit | edit source]PICList 档案中有很多关于使用 PIC 微控制器(以及一般的电子设计)的信息。如果您真的不知道怎么办,您可以考虑订阅 PICList,提出您的问题……并作为回报回答其他人的问题。PICList 档案托管在 MassMind
- PIC 微控制器文档指南 将更详细地介绍。
- 遥控飞机/RCAP 讨论了一个使用 PIC16F876A 的项目。
- Parallax SX 常见问题解答 由 Guenther Daubach 提供
- Microchip PIC:原始制造商的网站
- PICmicro 控制器入门 由 Wouter van Ooijen 提供
- “PIC 16F628A:为什么 PIC 16F84 现在已经过时。”
- “PIC 16F88:为什么 PIC 16F84 现在真的已经过时。”
- “带有描述、原理图和源代码的免费 PIC 资源和项目。”
- “使用 C 编程语言编程 PICmicros”
- “使用其他编程语言编程 PICmicros:Forth、JAL、BASIC、Python 等”
- “8 位 PIC® 微控制器解决方案手册” 描述了每个 PIC 微控制器系列中 PIC 硬件堆栈的大小,以及各个系列之间其他主要差异。
- Micro&Robot - 877:带有自编程 PIC 微控制器的机器人套件!您不需要 PIC 编程器。
- 使用 SDCC 编程 PIC16f628a:一个偶尔更新的示例列表,展示了如何使用 PIC 的外设以及使用免费 SDCC pic 编译器与其他设备交互。