4.4 ATmega328P微处理器

每个Arduino(开放硬件)电路,包括Femtoduino在内,都是以Atmel微控制器作为系统核心的。微控制器类似于微处理器,除了具有一个处理器核,微控制器还有自己的RAM、ROM和I/O外围电路,包括模数转换器(ADC)。这样就使微控制器电路比微处理器电路更加易于设计和制造。

Ateml是微控制器领域的领导厂商,ATmega328p是Atmel的8位微控制器系列中功能最强大的一款。下面是其部分功能的介绍:

·32KB flash RAM、2KB SRAM和1KB EEPROM

·20MHz CPU

·8位模数转换(ADC)通道

·共32个引脚,其中23个I/O引脚

使用Atmel微控制器的一个重要优点是,能够获得免费的软件工具。Atmel免费提供Atmel Studio,下载网址:http://www.atmel.com/tools/atmelstudio.aspx

4.4.1 ATmega328P的引脚

面对ATmega328P的32个引脚名称,处理起来可能令人迷惑。首先,23个I/O引脚可以分成三个端口:

·B端口——包括8个引脚,PB0~PB7。

·C端口——包括7个引脚,PC0~PC6。

·D端口——包括8个引脚,PD0~PD7。

器件的大部分引脚具有多种用途,对于每种用途,每个引脚会使用不同的名称。例如,依据端口B的配置方式,引脚PB2有三个不同的名字:

·SS——配置为SPI(Serial Peripheral Interface,串行外设接口)总线主从选择

·OC1B——配置为对B输出进行匹配比较的计时器/计数器1输出

·PCINT2——配置为引脚中断请求2

幸运的是,读者不必深入理解这些角色,甚至不必探究如何配置这些端口——Arduino框架为大家处理了这些细节。但是读者应当理解,这个原理图中使用的引脚名称可能会不同于其他ATmega328P原理图中的引脚名称。

表4-2列出微控制器的每个引脚。每个I/O都用它的端口、位置和圆括号里的用途来标识。例如,端口B的第五个引脚命名为PB4,它的用途是Master In/Slave Out(主入/从出),因此在表中它的设计标号是PB4(MISO)。

表4-2 ATmega328p的引脚

这些引脚名称是基于Atmel的命名习惯。Arduino框架为微控制器的引脚重新赋予了自己的名称。在本单元的原理图中,ATmega328P的引脚使用Atmel的名称,但是连接引脚的导线将使用Arduino给出的名称。

用一个例子来说明这个问题。标有PC6(RESET)的引脚将与信号名称为RESET的导线相连,这个连接ATmega328p的信号,在设计中用来对电路进行复位。

4.4.2 绘制电路原理图——ATmega328p

在Femtoduino电路中,大多数微控制器的引脚连接到排座上,这样Femtoduino电路就能插进面包板中。少数引脚与复位电路、串行外设接口(SPI)、电源和地相连。图4-7所示为包括ATmega328p的子电路。

下面讲解如何在EAGLE中设计这个子电路。从器件的左上角开始,按逆时针方向讲解。

1)在EAGLE中,打开前面单元中包括子电路的原理图(*.sch)。激活Add工具,打开eagle-book元件库。

2)选择ATmega328p,将其放在电压调整子电路的右边,周围留下足够的空间。

3)使用Add工具,将下列元件加入设计:一个VCC、四个GND、一个LED_0805(LED2)、一个RES_0603(R3)、一个CAP_0603(C5)和一个CSTCE(Y1)。

图4-7 ATmega328p子电路

4)从RESET引脚画出一条导线,将其命名为RESET信号,用于微控制器与更早提到的复位开关的连接。为这个信号创建一个标签,并放在信号左侧。

5)移动Y1和一个GND到PB6引脚的左侧。连接Y1的引脚1到PB6(XTAL),连接Y1的引脚3到PB7(XTAL2)。连接Y1的引脚2到GND。

6)移动C5和一个GND到AREF引脚的左侧。旋转C5使之水平放置。画两条导线:一条从AREF到C5的右侧引脚,另一条从C5的左侧引脚到GND。把连接AREF到C5的导线指定为AREF信号,并为这个信号创建一个标签。

7)从引脚PC0~PC5、ADC6和ADC7画出导线,并给导线分别赋信号名A0、A1、A2、A3、A4、A5、A6和A7。对其中每一个信号都分别创建一个标签并移动到导线左侧。

8)移动一个GND到微控制器底部的中间位置,与微控制器的GND1、GND2和GND3引脚相连。

9)移动R3、LED2和GND到微控制器的右下方,旋转R3使之垂直放置。

10)绘制三条导线:一条从PB5(SCK)到R3的上侧引脚,一条从R3的下侧引脚到LED2的上侧引脚,还有一条导线从LED2的下侧引脚到GND。其中第一条导线指定为信号D13/SCK。

11)从引脚PB0~PB4出发绘制导线,并分别指定为信号D8、D9、D10、D11/MOSI和D12/MISO。为每个信号创建标签,并将各标签移动到导线右侧。

12)从引脚PD0~PD7出发绘制导线,并分别指定为信号D0、D1、D2、D3、D4、D5、D6和D7。为每个信号创建标签,并将各标签移动到导线右侧。

13)移动VCC到微控制器顶部的中间位置。连接VCC到微控制器的AVCC、VCC1和VCC2引脚。

14)为电路元件指定如下数值和名称:Y1设为16MHz,C5设为0.1μF,R3设为330,LED2设为BLUE。使用Smash工具重新整理这些名称和数值。