【Arduino】 基础知识

Arduino UNO的原理图:https://www.arduino.cc/en/Main/ArduinoBoardUno

原理图PDF:https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

 

 

Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。UNO已经发布到第三版,与前两版相比有以下新的特点:

  • 在AREF处增加了两个管脚SDA和SCL,支持I2C接口;增加IOREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板。
  • 改进了复位电路设计
  • USB接口芯片由ATmega16U2替代了ATmega8U2

概要

  • 处理器 ATmega328
  • 工作电压 5V
  • 输入电压(推荐) 7-12V
  • 输入电压(范围) 6-20V
  • 数字IO脚 14 (其中6路作为PWM输出)
  • 模拟输入脚 6
  • IO脚直流电流 40 mA
  • 3.3V脚直流电流 50 mA
  • Flash Memory 32 KB (ATmega328,其中0.5 KB 用于 bootloader)
  • SRAM 2 KB (ATmega328)
  • EEPROM 1 KB (ATmega328)
  • 工作时钟 16 MHz

电路图和PCB

所有的参考设计是基于Atmega8,168,or 328,他们的管脚是兼容的

电源

Arduino UNO可以通过3种方式供电,而且能自动选择供电方式

  • 外部直流电源通过电源插座供电。
  • 电池连接电源连接器的GND和VIN引脚。
  • USB接口直接供电。

电源引脚说明

  • VIN --- 当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向UNO直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。
  • 5V --- 通过稳压器或USB的5V电压,为UNO上的5V芯片供电。
  • 3.3V --- 通过稳压器产生的3.3V电压,最大驱动电流50mA。
  • GND --- 地脚。

存储器

ATmega328包括了片上32KB Flash,其中0.5KB用于Bootloader。同时还有2KB SRAM和1KB EEPROM。

输入输出

  1. 14路数字输入输出口:工作电压为5V,每一路能输出和接入最大电流为40mA。每一路配置了20-50K欧姆内部上拉电阻(默认不连接)。除此之外,有些引脚有特定的功能
    • 串口信号RX(0号)、TX(1号): 与内部 ATmega8U2 USB-to-TTL 芯片相连,提供TTL电压水平的串口接收信号。
    • 外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。
    • 脉冲宽度调制PWM(3、5、6、9、10 、11):提供6路8位PWM输出
    • SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
    • LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED,反之输出为低时LED熄灭。
  2. 6路模拟输入A0到A5:每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限。除此之外,有些引脚有特定功能
    • TWI接口(SDA A4和SCL A5):支持通信接口(兼容I2C总线)。
  3. AREF:模拟输入信号的参考电压。
  4. Reset:信号为低时复位单片机芯片。

通信接口

  1. 串口:ATmega328内置的UART可以通过数字口0(RX)和1(TX)与外部实现串口通信;ATmega16U2可以访问数字口实现USB上的虚拟串口。
  2. TWI(兼容I2C)接口:
  3. SPI 接口:

下载程序

  • Arduino UNO上的ATmega328已经预置了bootloader程序,因此可以通过Arduino软件直接下载程序到UNO中,参见[[]]。
  • 可以直接通过UNO上ICSP header直接下载程序到ATmega328,参见[[]]。
  • ATmega16U2的Firmware(固件)也可以通过DFU工具升级,参见[[]]。注意要点
  • Arduino UNO上USB口附近有一个可重置的保险丝,对电路起到保护作用。当电流超过500mA是会断开USB连接。
  • Arduino UNO提供了自动复位设计,可以通过主机复位。这样通过Arduino软件下在程序到UNO中软件可以自动复位,不需要在复位按钮。在印制板上丝印"RESET EN"处可以使能和禁止该功能。

【Arduino Mega2560】

  • 基于ATmega2560的主控开发板,采用USB接口
  • 具有54路数字输入/输出口,16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。
  • 工作电压:5V 推荐输入电压范围:7-12V; 输入电压范围:6-20V; 数字输入输出口:54 ;模拟输入输出口:16 ;每个I/O口的输出电流:40mA; 3.3V管脚的输出电流:50mA; 内存空间:256KB; SRAM:8KB; EEPROM:4KB; 时钟频率:16MHz

  • 输入输出:

    • 54路接口都可作为输入输出,并使用pinMode(), digitalWrite()digitalRead(),5V电压,每个IO口最大电流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).SoftwareSerial library,通信时数据灯会闪烁

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

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

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

    • Analog输入:16个模拟输入,每个提供10位的分辨率(即2^10=1024个不同的值)。默认情况下他们测量0到5v值。可以通过改变AREF引脚analogReference()功能改变他们变化范围的上界。AREF:是AD转换的参考电压输入端(模拟口输入的电压是与此处的参考电压比较的)。使用analogReference()(点击查看详细介绍)完成功能。

【IDE使用】

  1. get an arduino board and usb cable
  2. download the arduino IDE :http://www.arduino.cc/en/Main/Software
  3. connect the board,   the green power(labelled PWR) go on.
  4. install the driver, if download, you will find the USB Serial Port to see your board
  5. open arduino examples:  file->examples                                               
  6. select your board:                                                                         
  7.  select your serial port

  8. upload your program

或者下载 arduino agent create 使用网页版进行编程。

【基础语法】

pinMode(pin, mode)

pin: the number of the pin whose mode you wish to set

modeINPUTOUTPUT, or INPUT_PULLUP. (see the (digital pins) page for a more complete description of the functionality.)

digitalRead()

Reads the value from a specified digital pin, either HIGH or LOW.

digitalRead(pin) return high,low

int ledPin = 13;   // LED connected to digital pin 13
int inPin = 7;     // pushbutton connected to digital pin 7
int val = 0;       // variable to store the read value

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
  pinMode(inPin, INPUT);        // sets the digital pin 7 as input
}

void loop()
{
  val = digitalRead(inPin);     // read the input pin
  digitalWrite(ledPin, val);    // sets the LED to the button's value
}

Serial:串口通信

Serial.begin(); //开启串口
Serial.end();    //关闭串口
Serial.available();//判断串口缓冲器是否有数据装入
Serial.read();    //读取串口数据
Serial.flush();    //清空串口缓存
Serial.print();    //写入字符串数据到串口
Serial.println();   //写入字符串数据+换行到串口
Serial.write();     //写入二进制数据到串口
Serial.SerialEvent();//read时触发的事件函数
Serial.readBytes(buffer,length);//读取固定长度的二进制流
#include <SoftwareSerial.h>
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率
}

void loop() {
  //如果串口接收到数据,就输出到蓝牙串口
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  //如果接收到蓝牙模块的数据,输出到屏幕
  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路途…

点滴记录

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值