跳转到内容

嵌入式系统/PIC 微控制器

来自维基教科书,开放的书籍,开放的世界
(从 PIC 重定向)

由 Microchip 制造的(“外设接口控制器”)微控制器在工程师和爱好者中都很受欢迎。PIC 微控制器有多种“类型”,每种类型都有不同的组件和功能。

许多类型的电子项目都可以使用 PIC 系列微处理器轻松构建,其中包括时钟、非常简单的视频游戏、机器人、伺服控制器等等。PIC 是一款非常通用的微控制器,可以提供多种选择,价格合理。

该系列中的其他微处理器包括 Parallax SXHoltek HT66Fxxx 系列Holtek HT48FxxE 系列,以及一些“PIC-on-a-FPGA”实现。

通用仪器公司生产了一款名为 PIC1650 的芯片,被描述为可编程智能计算机。该芯片是所有 PIC 芯片的鼻祖,在功能上与目前的 16C54 非常接近。它被设计为其 CP1600 微处理器的外设。也许这就是为什么大多数人认为 PIC 代表外设接口控制器。Microchip 从未将 PIC 作为缩写使用,仅作为 PIC。最近,Microchip 开始将其 PIC 称为 PICmicro MCU。

选择哪个 PIC

[编辑 | 编辑源代码]

如何在近 2000 种不同型号的 PIC 微控制器中找到适合你的 PIC 呢?

Microchip 网站有一个很棒的 产品选择工具。你只需输入你的最低要求和可选的期望要求,就会显示结果零件号及其基本功能列表。

你可以直接从 Microchip 的在线商店 Microchip Direct 购买 PIC 处理器。价格与许多经销商相同,有时甚至更优惠。

规则一:只选择你可以实际获得的微处理器。PIC 都是相似的,因此你无需对使用哪种型号过于挑剔。

如果你的学校仓库中只有一种 PIC,就使用它。如果你从 NewarkDigiKey 等公司订购,请忽略任何“缺货”的零件 - 仅订购“有货”的零件。这将为你创建项目节省大量时间。

[编辑 | 编辑源代码]

曾经,PIC16F84 是爱好者最好的 PIC。但 Microchip、Parallax 和 Holtek 现在正在生产许多性能更好、价格更低的芯片,因为它们拥有更高的生产水平。

  1. 我想要一个包含大约 4 个 PIC 推荐的列表,以及*为什么*推荐它们,这样当有更好/更便宜的芯片出现时,就可以轻松确认并将其添加到列表中。

(总结 PICList 针对 PIC 微控制器的初学者清单PIC Elmer 160:附录“A”:“其他 PIC” 2003Wouter van Ooijen :)

PIC:选择一个芯片并 购买一个

许多人推荐以下 PIC 作为爱好者的“第一个 PIC”的不错选择,请注意修订号(例如 16F628A 中的 A)

  • PIC18F4620:它有 13 个模拟输入 - Wouter van Ooijen 建议爱好者使用最大、功能最强大的芯片 [1],这就是它(截至 2006-01)。约 9 美元
  • PIC16F877A -- 16F87x 系列中最大的芯片;有 8 个模拟输入 - 由 Wouter (#2) 推荐;AmQRP;PICList。约 8 美元
  • PIC16F877A ,这可能是爱好者社区中最受欢迎的仍在生产的 PIC。这是其系列中最好的 PIC,曾经是用于大型爱好者项目的“PIC”,以及用于小型项目的 PIC16F84。它具有 14KB 的程序存储器、368 字节的 RAM、40 引脚封装、2 个 CPP 模块、8 个 10 位 ADC 通道。它还具有 UART 和 MSSP,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 的 Flash 存储器,可以使用 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”后缀表示芯片具有可重新编程的 Flash 存储器。
 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(一次性可编程)。以前人们在将程序写入此类芯片之前会仔细检查程序。最近,随着 Flash 存储器成本的下降,这些芯片的使用越来越少,但有些芯片仍然在使用,因为它们可靠性高或成本较低。
 PIC12C
 PIC16C
 PIC17C
 PIC18C

每个系列都包含一个具有所有功能的“完整”成员,以及缺少一项或多项功能的子系列变体成员。例如,在 16F84 系列中,16F84 是功能完整的 PIC,具有 Flash 存储器,程序空间是 16F83 的两倍。该系列还包含 16C84 和 16C83,它们是为数不多的可重新编程的 C 后缀 PIC 之一。在原型设计中,我们通常使用“完整”版本以确保原型至少能正常工作。在原型设计过程中,我们希望反复调整代码、重新编程和测试,直到它能够正常工作。因此,我们使用上述“Flash”系列之一,而不是“OTP”系列,除非有必要。对于短期的生产,建议使用 C 部分。对于非常长的生产线,以前曾使用过一些具有掩模编程 ROM 的 PIC。现在 Microchip 提供了工厂预编程服务。

每个系列的每个成员通常有多种不同的封装。爱好者通常使用塑料双列直插式封装(通常称为 DIP 或 PDIP),因为它最容易插到无焊面包板上进行调试。(“宽 DIP”效果也一样)。他们避免使用陶瓷双列直插式封装 (CDIP),不是因为陶瓷不好(它同样容易插到无焊面包板上),而是因为塑料部件效果一样好,而且便宜得多。

(后来,为了大规模生产,我们可能会找出哪种最便宜的削减版本,它仅仅有足够的东西可以工作,并使用最便宜的封装,它只有足够多的引脚适合这种特定应用… 也许甚至是一个 OTP 芯片)。

然后,每个系列的每个成员的每个不同封装都以“商用温度范围”和“工业温度范围”两种形式提供。

PIC 16x

[edit | edit source]

PIC 16 系列被认为是一个优秀的通用 PIC 系列。PIC 16 通常有 3 个输出端口可用。以下是一些曾经常见的该系列型号。

  1. PIC 16C54 - 最初的 PIC 型号,'C54 采用 18 引脚 DIP 封装,有 12 个 I/O 引脚。
  2. PIC 16C55 - 采用 28 引脚 DIP 封装,有 20 个 I/O 引脚可用
  3. PIC 16C56 - 与 'C54 具有相同的形状尺寸,但功能更多
  4. PIC 16C57 - 与 'C55 具有相同的形状尺寸,但功能更多
  5. PIC 16C71 - 有 4 个 ADC 可用,它们映射到与端口 A 相同的引脚(双重用途引脚)。
  6. PIC 16C84 - 具有在电路中擦除和重新编程 EEPROM 的功能

互联网上提供许多为 PIC16x 系列编写的程序,可免费获取。

基于闪存的芯片,如 PIC16F88,在开发方面方便得多,并且可以运行为上述芯片编写的代码,几乎不需要进行任何更改。

PIC 12x

[edit | edit source]

PIC12x 系列是最小的系列,具有 8 个引脚,最多有 6 个 I/O 引脚可用。当空间和/或成本是一个因素时,这些系列被使用。

PIC 18x

[edit | edit source]

PIC 18x 系列采用 28 引脚和 40 引脚 DIP 封装。它们具有更多端口、更多 ADC 等等… PIC 18 通常被认为是高端微控制器,有时甚至被称为成熟的 CPU。

截至 2007 年,Microchip 目前正在生产 6 款具有 USB 接口的闪存微控制器。所有这些都属于 PIC18Fx 系列。(28 引脚 PIC18F2450、PIC18F2455、PIC18F2550;以及 40/44 引脚 PIC18F4450、PIC18F4455、PIC18F4550)。

PIC 栈

[edit | edit source]

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:recursion)。只要“主”程序的最深可能的嵌套,加上中断例程的最深可能的嵌套,得到的总和小于其运行的微控制器的栈大小,那么一切都会正常工作。一些编译器会自动执行这种调用树分析,如果硬件栈不足,编译器会自动切换到使用“软件栈”。汇编语言程序员必须手动进行这种分析。

你还需要什么

[edit | edit source]

编译器、汇编器

[edit | edit source]

PIC 微控制器的 BASIC、C、Forth 和其他几种编程语言版本都可用。请参阅嵌入式系统/PIC 编程

下载器

[edit | edit source]

你需要一种称为“下载器”的设备,将编译后的程序从你的 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 上列出了许多其他编程器。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 倍于外部振荡器的虚拟振荡频率。例如,如果最大允许振荡频率为 16 MHz,则虚拟振荡频率为 64 MHz。因此,PIC 的执行速度为 64 / 4 = 16 MIPS(每秒百万条指令)。某些 PIC 还内置了振荡器,通常为 4 MHz(对应 1 MIPS),或低功耗非精确 48 kHz 振荡器。这使得可以将两个 I/O 引脚用于其他目的。这些引脚也可以用来产生一个频率,如果您想将其他硬件与某个 PIC 的内部时钟同步,就可以使用这些引脚。

继续阅读 嵌入式系统/PIC 编程

进一步阅读

[编辑 | 编辑源代码]

PICList 档案中包含大量有关使用 PIC 微控制器(以及一般电子设计)的信息。如果您真的遇到困难,可以考虑订阅 PICList,提出您的问题……并作为回报回答其他人的问题。PICList 档案托管在 MassMind

  1. "PIC 微控制器编程器"
  2. "选择 PIC 编程器"
  • Micro&Robot - 877:带有可自编程 PIC 微控制器的机器人套件!您不需要 PIC 编程器。
  • 使用 SDCC 编程 PIC16f628a:一个偶尔更新的示例列表,演示了如何使用 PIC 的外设以及如何使用免费的 SDCC pic 编译器与其他设备进行交互。
华夏公益教科书