项目四 基于SPI串行总线接口DA芯片TLC5615的使用 电气自动化技术专业
项目功能 项目知识点与技能点 项目知识准备 硬件电路 软件设计 项目实施
【项目功能】 通过ATMEGA16单片机同步串行接口向D/A转换芯片TLC5615送入相关数字量,通过D/A转换所得到的电压控制LED亮灭。 掌握SPI同步串行通信技术,并能合理 运用到实际项目中。
【项目知识点与技能点】 SPI总线的通信协议 ATmega16单片机SPI接控制与数据传输过程 ATmega16 SPI接口相关寄存器的设置 D/A转换芯片TLC5615的相关内容
【项目功能】 一、SPI总线通信协议概述 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步外设接口,允许MCU与各种外围设备以串行方式进行通信和数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等. 一般使用4 线制:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输入数据线MOSI 和低电平有效的从机选择线SS 。
二、ATmega16单片机SPI接控制与数据传输过程 1)控制与传输过程 如下图所示为SPI数据传输系统的结构方框图。SPI的数据传输系统由主机和从机两个部分构成,主要由主、从机双方的两个移位寄存器和主机SPI时钟发生器组成,主机为SPI数据传输的控制方。由SPI的主机将SS输出线拉低,作为同步数据传输的初始化信号,通知从机进入传输状态。然后主机启动时钟发生器,产生同步时钟信号SCK;预先将在两个移位寄存器中的数据在SCK的驱动下进行循环移位操作,实现了主-从之间的数据交换。主机的数据由MOSI(主机输出-从机输入)进入从机,而同时从机的数据MISO(主机输入-从机输出)进入主机。数据传送完成,主机将SS线拉高,表示传输结束。
引脚 方向(主SPI) 方向(从SPI) MOSI 用户定义 输入 MISO SCK SS
2)SPI初始化及数据传送程序示例 下面将以ATmega16单片机为例说明如何将SPI设置为主机,以及如何进行简单的数据传送。MOSI对应ATmega16单片机PB5引脚,MISO对应ATmega16单片机PB6引脚,SCK对应ATmega16单片机PB7管脚,SS对应ATmega16单片机PB4管脚。
(1)设置SPI为主机并进行简单的数据发送: void spi_masterset(void) { /* 设置MOSI 和SCK 为输出,其他为输入 */ DDRB = (1<<DDB5)|(1<<DDB7); /* 使能SPI 主机模式,设置时钟速率为fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); } void spi_mastertransmit(char data) /* 启动数据传输 */ SPDR = data; /* 等待传输结束 */ while(!(SPSR & (1<<SPIF)));
(2)设置SPI为从机并进行简单的数据接收。 void spi_slaveset(void) { /* 设置MISO 为输出,其他为输入 */ DDRB = (1<<DDB6); /* 使能 SPI */ SPCR = (1<<SPE); } char spi_slavereceive(void) /* 等待接收结束 */ while(!(SPSR & (1<<SPIF))); /* 返回数据 */ return SPDR;
3)SS引脚的功能 ·从机方式 当SPI 配置为从机时,从机选择引脚SS总是为输入。SS 为低将激活SPI 接口, MISO成为输出( 用户必须进行相应的端口配置) 引脚,其他引脚成为输入引脚。
·主机方式 当SPI被配置为主机时(寄存器SPCR的MSTR位置“1”),用户可以决定SS引脚方向。如果SS引脚被设为输出,该引脚将作为通用输出口,不影响SPI系统,通常用于驱动从机的SS引脚。
三、ATmega16 SPI接口相关的寄存器简单介绍 1)SPI控制寄存器-SPCR • Bit 7 – SPIE: 使能SPI 中断 置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中断使能位置位,就会引发SPI中断。 • Bit 6 – SPE: 使能SPI SPE 置位将使能SPI。进行任何SPI 操作之前必须置位SPE。 • Bit 5 – DORD: 数据次序 DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。
• Bit 4 – MSTR: 主/ 从选择 MSTR置位时选择主机模式,否则为从机。如果MSTR为"1”,SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须重新设置MSTR 进入主机模式。 • Bit 3 – CPOL: 时钟极性 CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低电平。 • Bit 2 – CPHA: 时钟相位 CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿采样。
• Bits 1, 0 – SPR1, SPR0: SPI 时钟速率选择1 与0 确定主机的SCK 速率。SPR1 和SPR0 对从机模式没有影响。SCK和振荡器频率fOSC之间的关系下表所示。 SPI2X SPR1 SPR0 SCK频率(MHz) 0 0 0 fOSC/4 0 0 1 fOSC/16 0 1 0 fOSC/64 0 1 1 fOSC/128 1 0 0 fOSC/2 1 0 1 fOSC/8 1 1 0 fOSC/32 1 1 1 fOSC/64
在发送当中对SPI 数据寄存器SPDR写数据将置位WCOL。WCOL可以通过先读SPSR,紧接着访问SPDR 来清零。 2)SPI的状态寄存器-SPSR • Bit 7 – SPIF: SPI 中断标志 串行发送结束后,SPIF 置位。若此时寄存器SPCR 的SPIE 和全局中断使能位置位,SPI中断即产生。如果SPI 为主机, SS 配置为输入,且被拉低, SPIF 也将置位。进入中断服务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着访问SPDR来对SPIF清零。 • Bit 6 – WCOL: 写碰撞标志 在发送当中对SPI 数据寄存器SPDR写数据将置位WCOL。WCOL可以通过先读SPSR,紧接着访问SPDR 来清零。
• Bit 5..1 – Res: 保留 保留位,读操作返回值为零。 • Bit 0 – SPI2X: SPI 倍速 置位后SPI 的速度加倍。若为主机,则SCK 频率可达CPU 频率的一半。若为从机,只能保证fosc /4。
SPI 数据寄存器为读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。 3)SPI数据寄存器-SPDR SPI 数据寄存器为读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。
四、DA转换芯片TLC5615的相关知识 1)TLC5615的工作特性 TLC5615是带有3线串行接口且具有缓冲输入的10位DAC,输出可达2倍Ref的变化范围。其特点如下: ·5V单电源工作。 ·3线制串行接口。 ·高阻抗基准输入。 ·电压可达基准电压两倍。 ·内部复位。
2)TLC5615的引脚及功能说明 DIN:串行数据输入端。 SCLK:串行时钟输入端。 CS:片选信号。 DOUT:串行数据输出端,用于级联。 AGND:模拟地。 REFIN:基准电压输入。 OUT:DAC模拟电压输出端。 VDD:电源端。
【硬件电路】 ATmega16单片机与DA转换芯片TLC5615的电路连接图
原理图说明: 如图所示,ATmega16单片机为该电路的核心控制器件,通过SPI同步串行传输数据的方法,向DA转换芯片TLC5615送入相关数字量,经转换后输出模拟电压量。D为一发光二极管,通过限流电阻接于输出端。输出电压随输入数字量的变化而变化,从而实现了小灯的渐亮、渐灭。R1为一电位器,由它改变TLC5615 DA转换芯片的参考电压。
【软件设计】 程序流程图
【项目实施】