本帖最后由 mars4zhu 于 2014-11-17 19:52 编辑
由于有段时间迷恋于非常容易变成的ARduino单片机开发环境,也自己在淘宝上买了小板子,但是网上看到有人用面包板做的arduino最小系统,于是自己手痒也做了一块。记了应用笔记。
Arduino采用的都是Atmel的AVR系列单片机, 从Atmega8--Atmega2560, 基本上每种flash配置的都丝毫不拉下。
采用面包板搭建Arduino最小系统——Arduino-Nano开发板
目 录
插图索引
表格索引
1 概述本文描述了采用面包板、双列直插元件、ATMEGA8A-PU芯片,搭建一个兼容Arduino的最小系统,命名为Arduino-Nano开发板。 Arduino-Nano已通过USB-ASP下载器将arduino的bootloader下载至其中,因此日后运行只需要点击Arduino IDE的upload,就可以运行编译后的sketch。 1.1. 芯片性能Arduino-Nano基于ATMEGA8A-PU芯片,具有如下特征: l CPU性能 l 130 Powerful Instructions – Most Single-clock Cycle Execution l 32 x 8 General Purpose Working Registers l Fully Static Operation l Up to 16MIPS Throughput at 16MHz l On-chip 2-cycle Multiplier l 存储空间 l 8KBytes of In-System Self-programmable Flash program memory, l 512Bytes EEPROM l 1KByte Internal SRAM l 外设 l Two 8-bit Timer/Counters with Se parate Prescaler, one Compare Mode l One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode l Real Time Counter with Separate Oscillator l Three PWM Channels l 6-channel 10-bit Accuracy ADC in PDIP package l Byte-oriented Two-wire Serial Interface l Programmable Serial USART l Master/Slave SPI Serial Interface l Programmable Watchdog Timer with Separate On-chip Oscillator l On-chip Analog Comparator l 23 Programmable I/O Lines 芯片引脚定义如下: 图 11 ATMEGA8引脚和对应的arduino引脚定义图 1.2. 采用的软硬件平台与工具。硬件工具:Arduino-Nano(见第2章BOM列表 )、USB-ASP。 软件工具:Arduino IDE、Fritzing、ProgISP 仪器仪表工具:万用表(BEST DT9205A)、示波器(Tek MSO-4104)、USB转SER串口(CH341A)。
2 原理图与BOM本着最小系统的原则,即电路最简单、连线最少、采用元件最少,根据ATMEGA8A-PU的Datasheet描述,能省则省。 2.1. 原理图采用最简单的电路结构,根据datasheet描述,在编程CKOPT熔丝后(CKOPT=0)可启用XTAL1与XTAL2引脚自带的内部电容,故省略外部电容。采用Fritzing软件绘制示意图如下: 图 21 Arduino-Nano的原理图与面包板示意图 2.2. 元件清单总结Arduino的BOM如下: 表 21 Arduino-Nano的BOM元件清单
元件名
|
数量
|
规格/型号
|
备注
|
预计价格¥
|
IC1
|
1
|
ATMEGA8A-PU
|
|
6-8
|
R1
|
1
|
330Ω/直插型
|
|
0.05
|
LED1
|
1
|
Any Color
|
Uled1 + Iled1*R1 = 5V
|
0.5
|
XTAL1
|
1
|
16MHz/直插型
|
|
0.5
|
面包板
|
1
|
常见
|
|
2
|
插针线
|
若干
|
|
针脚适用于面包板
|
1
|
BOM成本总计:¥12
|
3 安装与运行根据原理图安装后,实物图如下: 图 31 Arduino-Nano安装后的实物图 3.1. 设置ATMEGA8A的熔丝由于Arduino对于频率和bootloader等设置有要求,因此必须对ATMEGA8A芯片的熔丝(Fuse)进行设置,才能利用Arduino开发。 熔丝设置必须采用编程器,本次使用的是编程器是USB-ASP,对应的编程软件是ProgISP。 ATMEGA8A的出厂熔丝设置是Lfuse = 0xE1,Hfuse = 0xD9,如下: 图 32 ATMEGA8A出厂熔丝设置 而Arduino要求的熔丝设置为Lfuse = 0xDF, Hfuse = 0xCA,注意在修改熔丝设置中,前往不能讲SPIEN和RSTDISBL改变,否则无法使用串行编程器下载而只能采用特制的高压并行下载器下载。 图 33 ATMEGA8A的arduino熔丝设置 在ProgISP软件中设置了上述熔丝后,即可开展开发工作。 3.2. 利用USB-ASP下载Arduino编译后的Sketch打开Arduino-IDE, Tools->Board选择Arduino NG or older,Tools->Processor选择ATmega8,Tools->Serial选择连接的串口号COMx,Tools->Programmer选择你所使用的编程器(本例采用的是USB-ASP)。 为测试多种功能,编写代码如下:
int led = 9; // the pin that the LED is attached to
int pushButton = 2;
int brightness = 0; // how bright the LED is
int fadeAmount = 1; // how many points to fade the LED by
String inputString = ""; // a string to hold incoming data
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
Serial.begin(9600);
pinMode(pushButton, INPUT_PULLUP);
pinMode(led, OUTPUT);
inputString.reserve(100);
}
// the loop routine runs over and over again forever:
void loop() {
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000);
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
Serial.print("Hello, SB!, voltage = ");
Serial.print(voltage);
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.print(", buttonState = ");
Serial.println(buttonState);
unsigned long currentMillis = millis();
Serial.print("Current Mills = ");
Serial.println(currentMillis);
}
// wait for 30 milliseconds to see the dimming effect
delay(10);
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
Serial.print("R: ");
Serial.println(inputString);
inputString = "";
}
}
}
编译(verify)成功后,选择File->Upload Using Programmer,即可通过编程器将编译后的hex文件写入ATMEGA8A芯片。此时可以看到LED动作,同时串口可以接受并发送各种信号和字符串。 3.3. 下载arduino的bootloader为方便可以不用编程器而通过arduino的UART下载。只需要将arduino的bootloader烧入芯片中即可。 在ProgISP中,选择 arduino-1.5.2\hardware\arduino\avr\bootloaders\atmega8\ATmegaBOOT-prod-firmware-2009-11-07.hex,下载到ATMEGA8芯片中,后续即可使用arduino的upload功能下载hex文件。只需在点击upload后将芯片复位即可。
版本历史(Revision History)
版本号
|
发布时间
|
内容
|
A0
|
2014-02-25
|
初次发布。
|
|