如果已经熟悉Arduino,那么很可能已经使用过Arduino Uno板和它的ATmega328p微控制器。本文将指导如何将这个微控制器从Arduino Uno开发板上移除,并独立使用它来运行程序。
首先,让回顾一下如何为Arduino Uno编写程序。以下是一个简单的程序,用于在数字引脚5上闪烁一个LED灯:
void setup() {
int LED = 5;
pinMode(LED, OUTPUT);
}
void loop() {
delay(500);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
这段代码首先定义了一个名为LED的变量,并将其设置为数字引脚5。然后,它将这个引脚设置为输出模式。在loop函数中,程序交替地将LED灯打开和关闭,每个状态持续500毫秒。
当完成编程后,可能会考虑将ATmega328p芯片从Arduino Uno开发板上移除,因为开发板占用的空间较大,而芯片本身要小得多。这样,最终产品可以更加紧凑。
移除芯片后,会看到芯片比开发板小得多,这意味着最终产品可以更小。但是,如何让芯片运行程序呢?
将构建一个简单的电路来为ATmega328p芯片供电。电路包括一根接地线(GND)连接到芯片的第8引脚,以及一根5V线(来自面包板轨道)连接到第7引脚。
然后,将LED的阳极(正极)引脚连接到ATmega328p的PD5引脚,这与ArduinoUno上的数字引脚5相同。理论上,这就是需要的所有连接。但是,可能会发现LED并没有亮起。
这与ATmega328p在Arduino Uno上的设置方式有关。制造商在为Uno设置芯片时,必须设置ATmega328p内部的一些开关,称为熔丝位,以便它能够与Arduino Uno硬件正确配合工作。
这些设置是约定俗成的(虽然是任意选择的,但Arduino用户期望它们是这样的)。除非有一个AVR(Atmel)ISP(In System Programmer/Programming),否则无法设置这些熔丝位。
ATmega328p可以以不同的时钟速度运行。它可以以1MHz(每秒一百万次循环)、8MHz和16MHz运行。然而,它只能在附加外部晶体的情况下以16MHz运行。
ArduinoUno开发板确实有一个16MHz的晶体。
在下面的图片中,已经标出了晶体的位置:
由于制造商已经将这些芯片设置为与外部晶体(振荡器)一起运行,如果没有晶体,芯片将无法正常工作。
如果查看ATmega328p的数据手册,并翻到第5.1节,会看到一个清晰的引脚图。
晶体引脚:可以看到第7引脚是VCC,第8引脚是GND,正如之前提到的。但现在,需要找到应该安装晶体的位置。如果仔细看,会看到第9引脚标有xtal1,第10引脚标有xtal2。xtal是晶体的缩写。
然而,仅凭这个图,不会知道还需要在这些引脚上添加两个22pF的陶瓷(非极性)电容器。
将一个电容器的一个引脚连接到第9引脚,另一个引脚连接到地。然后,将另一个电容器的一个引脚连接到第10引脚,另一个引脚连接到地。然后,将16MHz晶体连接,使其一个引脚在第9引脚,另一个引脚在第10引脚。
这是在面包板上的快速快照(在本文底部,将为提供原理图,以便更容易地看到连接方式)。