基于PIC16F73单片机和ADS8341的SPI通信软硬件实现方法
扫描二维码
随时随地手机看文章
PIC单片机为美国微芯公司(Ml-CROChip)公司生产研发,品种极其丰富,各系列片内功能资源各不相同,可以满足用户不同层次的开发要求。它采用哈佛总线结构和精简指令集(RISC)技术,其寻址方式简单、运行速度快、功耗低、驱动能力强等。在MICROCHIP公司PIC系列产品里,有低档、中挡、高挡单片机,且大部分都带有USART、SPI、IIC等总线接口,有的甚至还带有USB和CAN模块。这些特点给开发者带来了很大的方便。
1.ADS8341的特性 ADS8341是一种比较新的逐次逼近式的16位的A/D转换器件,其需要2.7~5V单电压供电,具有4通道单独输入或2通道差动输入,可以通过一个8位的控制字来选择其输入通道,且转换速率大于100kHz,精度比较高,具有86dB的信噪比,带有串行外围接口(SPI)。其这些特点给数据采集带来了极大的方便。其控制字节如下表所示。
根据上表中的介绍,本文中设置ADS8341的控制命令字为94H,即S置1,控制信号开始,A2A1A0置001,选择通道CHO,SGL/DIF置1,选择单通道输入,PDIPDO置00,选择低功耗模式和工作方式为外部时钟模式。
在本文中外部时钟模式工作,即ND的移位时钟由PIC16F73提供,外部时钟控制A/D转换过程和输入时钟。当ADS8341接收完控制字节的最后一位紧接着的一个时钟周期过后BUSY脚就会被ADS8341拉高,随后转换结果会建立并在后16个时钟周期的下降沿出现在DOUT上,如下图时序图所示在外部时钟模式下的忙状态BUSY保持高电平直到MSB被建立,要消耗一个时钟周期,16位的转换数据完全输出需要16个时钟周期,这样一次数据采样最少需要25个时钟周期。因为PIC16F73单片机连接都用8Bit传送数据,这意味着必须增加一个额外的传送来捕获LSB,这里采用了32个时钟周期来处理这样的要求,每次转换用32个时钟周期,前8个时钟周期用于发送控制字,后24时钟周期将采样结果从ADS8341输出。最后8个时钟周期的第一个时钟周期用来捕获LSB位,剩下的最后7个时钟周期空闲。
2.硬件方法实现SPI通信SPI是由美国摩托罗拉公司推出的一种同步串行传输规范,常作为单片机外设芯片串行扩展接口。SPI有4条引脚:SS(从器件选择线),SDO(串行数据输出线),SDI(串行数据输入线),SCK(同步串行时钟线)。SPI可以用全双工通信方式同时发送和接受8位数据。在发送数据时,只需将要发送的数据送入发送数据缓冲区SSPBUF中,系统硬件会自动将发送数据缓冲区里的数据装载到移位寄存器SSPSR中,然后根据预先选中的时钟节拍进行移位将数据串行发送,主机在发送8个Bit的数据的同时也接收了8个Bit的数据。
如上图所示,为硬件实现SPI通信时的PIC16F73与ADS8341的连接电路图,当在启动ADS8341进行数据采集时首先按照要求将8个Bit的控制字串行发送给ADS8341,然后ADS8341开始按照控制字的要求工作,等控制字发送完毕后,向ADS8341发送3个8Bit无效数据,以提供给ADS8341移位时钟DCLK,当这24个Bit的数据发送完毕时,也就接收到了所采集到的16Bit的数据。这样一次数据采样需要了32个时钟周期。
PIC16f73控制ADS8341工作的子程序如下:
3.软件方法实现SPI通信
如上图所示,在此方法中使用RBO模拟SPI方式下的移位时钟DCLK,RB1模拟专用输入引脚SDI,RB2模拟专用输出引脚DOUT。RB3用以判断一个字节的数据是否转换完成。模拟DCLK时钟时,高电平和低电平的输出时间必须大于或等于Tch和Tcl.的最小值,根据ADS8341的数据采集时序图1可以对单片机写控制程序。
空闲时让RBO口置低电平以使DCLK停留在低电平上。当要发送控制字时,首先判断其第一位是1还是0,若是0则先把RB2口置低,然后RBO口置3个指令周期时间(3T>Tch=Tcl.)的高电平后再置3个指令周期时间低电平,就将一位O送出。若是1,则将RB2口置高,然后RBO口置3个指令周期时间(3T>Tch=Tcl.)的高电平后再置3个指令周期时间低电平,就将一位1送出。同理,连续将控制字的8个Bit发送完毕。当控制字发送完毕后,用RBO模拟16个移位时钟周期,最后用RBO模拟空走8个移位时钟周期以从ADS8341中输出LSB位,这样一次数据采样需要了32个时钟周期。PIC16F73在每个移位时钟DCLK的下降沿时读出PORTB的Bitl位,然后送给状态寄存器STATUS的状态标志位C,再使用循环左移指令RLF将状态标志位C里的数值移进RESUALTG和RESUALTL寄存器里,
PIC16f73控制ADS8341工作的子程序如下: