Arduino的详细介绍(基于Mega2560)(转载)

很早之前入手了一块Arduino

Mega2560,当时只是认为其操作简单且更加人性化,开源方便,想了解了解。最新搞项目想用Arduino试试控制8路舵机,但网上找的Servo库大多说只支持9,10接口,很是恼火(资料怎么写就怎么搬,到底是不是只支持9,10接口有几个知道?又有几个知道为什么?)。

另外本人长期逛各种论坛,发现国内民间创客极客水平还是普遍低下的,Arduino虽说开源但国内确实找不到多少参考资料,这无形之中成了小小的阻碍,于是本人花了点时间为广大Arduino爱好者整理翻译此份资料,一是想丰富网上资源,二是以一种更加简便的方式带部分人入门。了解原理才能谈创意,不求甚解只能做个小玩家。

了解Arduino的最好平台当然是官网,我相信官网肯定不会遗漏自己产品最有特色的东西,因此以它为参考绝对没错。另外,必要部分辅助以百科,以及各位广大亲爱博友的资料(就不一一列举了,在此谢过)。本文以Arduino Mega 2560为基础解释,其他板子都差不多。

一:概述

Arduino Mega 2560是基于ATmega2560的微控制板,有54路数字输入/输出端口(其中15个可以作为PWM输出),16路模拟输入端口,4路UART串口,16MHz的晶振,USB连接口,电池接口,ICSP头和复位按钮。简单地用USB连接电脑或者用交直流变压器就能使用。

Mega 2560 是Arduino Mega系列的升级版。Mega 2560与之前的板子(最大)不同在于:它没用FTDI USB-to-serial驱动芯片,而是用ATmega16U2编程作为USB-to-serial传输器(V1版本使用8U2)。

总结如下:

控制器ATmega2560

工作电压5V

输入电压(推荐)7-12V

输入电压(限制)6-20V

数字I/0口54 (含15路PWM输出)

模拟输入口16

每个I/0口直流电流40 mA

3.3v口直流电流50 mA

闪存(Flash Memory)256 KB(其中8 KB用作bootloader)

静态存储器(SRAM)8 KB

EEPROM4 KB

时钟16 MHz

二:电源

这部分就不说了,涉及3.3v和5v供电。

三:存储器

ATmega2560有256k的闪存可存储程序(其中8kb用作bootloader),有8kb的SRAM和4kb的EEPROM(可使用EEPROM library(点击看详细介绍)进行读写)。

(1)RAM

随机存取存储器(英文:random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。

SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,且功耗较大。所以在主板上SRAM存储器要占用一部分面积。SRAM的速度快但昂贵,一般用小容量的SRAM作为更高速CPU和较低速DRAM

之间的缓存(cache)。

(2)EEPROM

带电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。

(3)闪存(Flash Memory),EEPROM的变种:

在断电情况下仍能保持所存储的数据信息分为NOR型NAND型闪存(NAND型更为普遍常见,一般说的是NAND型):

内存和NOR型闪存的基本存储单元是bit,用户可以随机访问任何一个bit的信息。

而NAND型闪存的基本存储单元是页(Page)。每一页的有效容量是512字节的倍数。NAND型闪存以块为单位进行擦除操作(一块一块地擦)。闪存的写入操作必须在空白区域进行,如果目标区域已经有数据,必须先擦除后写入,因此擦除操作是闪存的基本操作。一般每个块包含32个512字节的页,容量16KB;而大容量闪存采用2KB页时,则每个块包含64个页,容量128KB。

简言之,RAM数据断电不可保存,因而常用于CPU与外设之间做缓存用;EEPROM掉电数据不丢失,用于编程读写使用;有时由于需要改写的数据量比较大,因而在EEPROM基础上出现了Flash Memory(NAND型)。我们编写好程序之后就是在bootloader引导下下载到Flash Memory里面的(因为每次程序下载都有重新刷新一个区域块来保存下载的程序,因而使用Flash Memory)。我相信新手对各种存储器都会有一定了解了。

四:输入输出

54路接口都可作为输入输出,并使用pinMode(), digitalWrite()digitalRead()(点击看详细介绍)功能。5v电压操作,每个接口的电流最大40mA并且接口有内置20-50千欧的上拉电阻。另外,有的接口有特殊功能。

Serial(串口):

Serial 0:0 (RX) and 1 (TX);

Serial 1: 19 (RX) and 18 (TX);

Serial 2: 17 (RX) and 16 (TX);

Serial 3: 15 (RX) and 14 (TX).

一共四组串口。其中Serial0也被连接到Tmega16U2 USB-to-TTL Serial芯片(上文有介绍,我们USB连接电脑用的就是这个串口)。RX接收数据,TX传输数据。

External Interrupts(外部中断):

2 (interrupt 0),

3 (interrupt 1),

18 (interrupt 5),

19 (interrupt 4),

20 (interrupt 3),

21 (interrupt 2)。

每个引脚都可配置成低电平触发,或者上升、下降沿触发。详见attachInterrupt()(点击看详细介绍)功能。

PWM(脉冲调制):

2~13口;

44~ 46口。

提供8位PWM输出。由analogWrite()(点击看详细介绍)功能实现。

SPI(串行外设接口):

50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)。使用SPI  library(点击看详细介绍)库实现。

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。

SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

(1)MOSI– SPI总线主机输出/ 从机输入(SPI Bus Master Output/Slave Input);

(2)MISO– SPI总线主机输入/ 从机输出(SPI Bus Master Input/Slave Output);

(3)SCLK –时钟信号,由主设备产生;

(4)CS – 从设备使能信号,由主设备控制(Chip select),有的IC此pin脚叫SS。

其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。

接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

:现有1,2号设备支持SPI接口,则可以都挂到主控的SPI线上,之后如果要控制1号设备,则由主控发送CS=1号,选中1号设备,那么1号设备就可以通过MOSI,MISO两根线在SCLK时钟控制下和主机进行通信了。

LED:

13引脚。这是板上自带的LED灯,高电平亮,低电平灭。

TWI:

20 (SDA) 和21 (SCL)。使用Wire library(点击查看详细介绍)实现功能。

TWI(Two—wire Serial Interface)接口是对I^2C总线接口的继承和发展,完全兼容I^2C总线,具有硬件实现简单、软件设计方便、运行可靠和成本低廉的优点。TWI由一根时钟线和一根传输数据线组成,以字节为单位进行传输。TWI_SCL\TWI_SDA是TWI总线的信号线。SDA是双向数据线,SCL是时钟线SCL。在TWI总线上传送数据,首先送最高位,由主机发出启动信号,SDA在SCL 高电平期间由高电平跳变为低电平,然后由主机发送一个字节的数据。数据传送完毕,由主机发出停止信号,SDA在SCL 高电平期间由低电平跳变为高电平。

模拟输入:

Mega2560有16个模拟输入,每个提供10位的分辨率(即2^10=1024个不同的值)。默认情况下他们测量0到5v值。可以通过改变AREF引脚analogReference()功能改变他们变化范围的上界。

AREF:是AD转换的参考电压输入端(模拟口输入的电压是与此处的参考电压比较的)。使用analogReference()(点击查看详细介绍)完成功能。

例:

参考电压是5V,AD精度是10位的,

在模拟输入端输入2.5V,AD转换结果就是512(1024×(5/2.5))

Reset:低电平有效,不用多说了吧。

五:通信

Arduino Mega2560提供4路UARTs通信,即Serial通信。数据通过ATmega8U2/ATmega16U2时候指示灯会闪烁(除了0和1口)。

使用SoftwareSerial library(点击看详细介绍)可以使用Mega2560的任意数字接口通信。Mega2560同样支持TWI和SPI通信。

六:编程

Mega2560使用Arduino IDE环境编程(这个相信再新的新手也知道)。事先在闪存(Flash Memory)里烧入bootloader引导程序(上文介绍有8kb),这样我们就可以每次下载程序了。它使用的是原始的STK500通信协议。(bootloader一般使用C语言或者汇编编写,考虑部分人的兴趣,这里也提供些资料:bootloader

你也可以绕过bootloader利用Arduino ISP通过ICSP (In-Circuit Serial Programming)header来编程(这是采用额外编程器的方式,这种方式当然不赞成,很麻烦)。

The ATmega16U2(上面说的串口编程芯片,Mega2560的特色)固件源码可以从Arduino

repository获得。ATmega16U2/8U2使用DFU bootloader下载,可以用以下方式激活:

1.V1版本的板子:连接板子后面的跳线(靠近意大利的地图),之后重置ATmega8U2(1版本为这个芯片)。

2.V2及之后的版本:有个将8U2/16U2 HWB线连到地的电阻,它使板子很容易进入DFU模式,你之后可以使用Atmel's FLIP software(Windows) 或者DFU

programmer(Mac OS X and Linux) 下载新的固件。或者你可以使用额外的编程器通过ISP下载(跟上面跳过bootloader下载程序时的方法一样,此方法高端啊)。具体参考:Seethis user-contributed

tutorialfor more information.

七:自动(软件)复位:

不说了。

八:USB过流保护:

不说了,好的硬件设计应该这么做。

九:物理特性和兼容:也不说了,都是继承和发展。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo阅读 3,606评论 1 20
  • Arduino Due有14个数字I/O,6个模拟I/O,一个复位开关,一个ICSP下载口,7-12v电源供电。 ...
    麦牛2013阅读 3,180评论 0 8
  • 1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本...
    荣卓然阅读 1,745评论 0 5
  • ​​​本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:...
    OpenJetson阅读 3,251评论 0 13
  • 路灯下,又见那个男人,蹲靠在栏杆上。跟前的地瓜还是满满一挑。已经是夜里九点了,他怎么还不回家?同样的问题,我...
    3097阅读 349评论 0 0