和爷爷一起学Arduino:对Arduino端口的深入了解(三)

内容分享23小时前发布
0 2 0

和爷爷一起学Arduino:对Arduino端口的深入了解(三)

四、端口的内部复用

AVR系芯片的设计是超级精妙的,每个引脚有2~4个复用。只有一种应用的,几乎没有。要玩大型的、复杂的项目,就要深入了解Arduino端口的内幕。

4.1 ADC

在(一)里已经说过了,A0~A7基本结构也是数字口,只是内置了ADC,因而可以兼作模拟输入。多数项目,模拟输入口需求不多。因此,提议你留起需要的模拟输入口后,把剩下的模拟口优先用作数字口。

4.2 PWM

在(二)里已经说过了,D3、D5、D6、D9、D10、D11这六个数字口内置了PWM,可以兼作模拟输出。为什么在4.1节要说把多余的模拟口优先用作数字口?就由于数字口往往不够用。如果有较多需要PWM输出的,你先要留起PWM口。

4.3 UART

你用串口直连、USB、RS-232等多种通信时,实则都是在玩UART,Universal Asynchronous Receiver/Transmitter,通用异步收发器。UART是串行通信,只需要发送口和一个接收口。Arduino内置支持UART通信,使用D0作为RX(接收口),D11为TX(发送口)。因此,如果你的代码里需要做UART通信,你就得留出D0和D1。你在PC上编的代码要上传(确切说是下传)到Arduino板,走的也是D0和D1,也是UART通信。代码上传不搭界,由于上传时,代码还没有运行。

4.4 I2C

I2C,Inter-Integrated Circuit,芯片间总线。也写作IIC。Atmel也搞了一个一模一样,叫TWI,Two Wire Interface,双线接口。由于Arduino主要采用Atmel的AVR系芯片作为主芯片,因此,Arduino的资料里,也往往称之为TWI。

Arduino UNO板和NANO板的TWI(I2C)占用两个模拟输入口,A4作为SDA(Serial Data Line,串行数据线),A5作为SCL(Serial Clock Line,串行时钟线)。Lennardo板则是占用D20和D3。Mega2560板和Due板占用D20和D21。

通过I2C与Arduino板通信的组件许多。譬如,Sparkfun的加速度计和陀螺仪、DS1307实时时钟、HT16K33等LED显示点阵、LCD1602等多种液晶屏、PCFC8575等多种端口扩展板、PCA9685十六路舵机扩展板、AT24C等EEPROM存取接口、MLX90640 红外热像仪模块、Grove颜色识别传感器、VL53L1X ToF 测距模块传感器、LM75温度传感器、WM8960音频编译码模块、M5双摇杆、INA226电压电流功率监视模块、……。还有许多。I2C也可以连接两个Arduino板,或作为总线,把至多128个Arduino板连成一个物联网。

4.5 SPI

SPI,Serial Peripheral Interface,串行外设接口。是一种高速、全双工的通信总线。I2C是两线通信,SPI是四线通信。SCK:Serial ClocK,串行时钟信号。MOSI:Master Output Slave Input,主出从入。MISO:Master Input Slave Output,主入从出。SS:Selection Signal,选择信号。

UNO板与NANO板占用D13作为SCK,D11作为MOSI,D12作为MISO。Mega2560板占用D52、D51、D50 。如果有多个从设备,就需要片选信号SS,可以任意选一个或更多个数字口。

采用SPI的组件也不少,特别是需要与Arduino高速交换信息的组件,只能采用SPI。譬如,多种SD存储卡读写模块、EEPROM模块、FLASH模块、MCP3008八通道ADC、12864等许多种液晶屏、倾角传感器、九轴传感器、AS5048A磁编码模块、ADXL345三轴重力加速度传感器、SX1278无线射频数据传输模块、STM32F407高速视频传输模块等等。

4.6 CLKO

数字口D8兼作系统时钟分频输出。当外部组件需要与Arduino时钟精准同步时,你就得使用这个引脚,引出系统时钟,接入要同步的组件的外部时钟输入。这时,就不能再项目里使用D8口了。

4.7 外部中断

需要对外部组件做实时响应时,要使用外部中断。外部中断也是实现多进程并发的手段。UNO板有两个外部中断,D2是INT0,D3是INT1。如果不够,还可以使用引脚变化中断,PCINT0~23,共24个。ATmega328的大多数引脚兼作引脚变化中断。

4.8 定时器/计数器

ATmega328内部有3个定时器/计数器,占用端口见下表。

序号

0

1

2

输入

D4

D8、D5

输出

D6、D5

D9、D10

D11、D3

4.9 还有许多

AVR系芯片的设计是超级精妙的,每个引脚有2~4个复用。其它复用,后来再说。

© 版权声明

相关文章

2 条评论

  • 头像
    猎奇鸭 投稿者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    昵昵兔 投稿者

    谢谢。

    无记录
    回复