Arduino Uno:将 ATMega328p-u 用作独立设备
Arduino Uno:将 ATMega328p-u 用作独立设备
注意:本文摘自我的博客: http://www.raddev.us/Arduino/
如果您使用过 Arduino,那么您就知道如何为其编写程序。我将程序(如下所示)上传到我的 Arduino Uno(仿制品)板(亚马逊链接)上,以简单地闪烁数字引脚 5 上的 LED。
setup(){
int LED = 5;
pinMode(LED, OUTPUT);
}
loop(){
delay(500);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
我们使用 Arduino Uno 来编程连接到 IC(集成电路)插槽上板的 ATmega328p 芯片。
完成芯片编程后
但是,在您完成芯片编程后,您继续将其连接到 Arduino Uno 板上是没有意义的。该板占用大量空间,实际上用于为您提供一种轻松编程芯片的方法。
这是您从 Uno 上移除芯片后的样子。
您可以看到我移除芯片的插槽,并且您可以看到芯片本身比板小得多。这意味着您的最终产品可以更小。
但是,我们如何让芯片运行我们的程序呢?
构建为 ATmega328p 供电的电路
这是我们将要构建的初始电路的快速快照。
这非常简单。它是一根 GND(接地)线连接到 ATmega328p 的引脚 8。它是一根 5V 线(来自面包板导轨)连接到 ATmega328p 的引脚 7。
然后您可以看到我将 LED 的阳极(正极)引脚连接到 ATmega328 的 PD5,因为这与 Arduino Uno 上的数字引脚 5 相同。
这_应该_就是您所需要的。但是正如您所看到的,LED 没有亮起。
实际上,ATmega328p 在图片中已通电,但由于某种原因,它没有运行我们的草图。为什么?
ATmega328p 在 Arduino Uno 上的设置方式
这一切都与 ATmega328p 在 Uno 上工作的方式有关。当制造商设置芯片以与 UNO 一起使用时,他们必须在 ATmega328p 上设置一些称为熔丝位的内部开关,以便它与相关的 Arduino Uno 硬件正常工作。
这些设置是约定俗成的(任意选择,但 Arduino 用户期望如此)。
除非您有 AVR(Atmel) ISP(在线系统编程器/编程器),否则您无法设置熔丝。
ATMega328p 可以以各种速度运行
ATmega328p 可以以各种时钟速度运行。它可以以 1Mhz(每秒一百万个周期)、8Mhz 和 16Mhz 运行。但是,它只有在连接外部晶振时才能以 16Mhz 运行。
Arduino Uno 板上的 16Mhz 晶振
Arduino Uno 板确实有一个 16Mhz 晶振。
我在下图中突出显示了晶振
由于制造商已将这些芯片设置为使用外部晶振(振荡器)运行,因此没有晶振,芯片将无法正常运行。
ATmega328p 数据表
如果您查看 数据表并转到第 5.1 节,您将看到 ATmega328p-u(DIP 双列直插封装)的引脚图。
晶振引脚
您可以看到引脚 7 是 VCC,引脚 8 是 GND,就像我之前提到的那样。但是现在,我们需要找到应该安装晶振的地方。如果您仔细观察,您会看到引脚 9 标记为 xtal1,引脚 10 标记为 xtal2。 xtal 是晶振的缩写。
两个 22pF 电容器
但是,通过查看此图,您不会知道您还需要向这些引脚添加两个 22pF 陶瓷(非极性)电容器。
您会将一个电容的一个引脚连接到引脚 9,另一个引脚连接到地。然后,您将另一个电容的一个引脚连接到引脚 10,另一个引脚连接到地。然后,您将连接 16Mhz 晶振,以便一个引脚在引脚 9 上,一个引脚在引脚 10 上。
这是它在面包板上的快速快照(然后,在本文的底部,我将为您提供一个原理图,以便您可以更轻松地查看事物的连接方式)。
现在,当您为该电路供电时,它实际上将运行草图。
澄清一些事情
希望,这将澄清一些事情
- 您实际上可以独立运行芯片 - 并且您应该这样做,因为它占用的空间更小。
- 如果您还没有成功让它工作,可能是因为您没有添加 16Mhz 晶振:没有它,它将无法工作。
- 您绝对需要 22pF 电容。我尝试使用 47pF,但它不起作用。使用 22pF 电容。
继续构建,继续学习。
~raddevus (roger deutsch)