历史上的今天
返回首页

历史上的今天

今天是:2025年02月27日(星期四)

正在发生

2018年02月27日 | 基于PIC16F73单片机和ADS8341的SPI通信软硬件实现方法

2018-02-27 来源:eefocus

    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)。其这些特点给数据采集带来了极大的方便。其控制字节如下表所示。

    PIC单片机为美国微芯公司(Ml-CROCHIP)公司生产研发,品种极其丰富,各系列片内功能资源各不相同,可以满足用户不同层次的开发要求。它采用哈佛总线结构和精简指令集(RISC)技术,其寻址方式简单、运行速度快、功耗低、驱动能力强等。在MICROCHIP公司PIC系列产品里,有低档、中挡、高挡单片机,且大部分都带有USART、SPI、IIC等总线接口,有的甚至还带有USB和CAN模块。这些特点给开发者带来了很大的方便。

    根据上表中的介绍,本文中设置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个时钟周期空闲。

 外部时钟模式下的忙状态BUSY保持高电平直到MSB

    2.硬件方法实现SPI通信  SPI是由美国摩托罗拉公司推出的一种同步串行传输规范,常作为单片机外设芯片串行扩展接口。SPI有4条引脚:SS(从器件选择线),SDO(串行数据输出线),SDI(串行数据输入线),SCK(同步串行时钟线)。SPI可以用全双工通信方式同时发送和接受8位数据。在发送数据时,只需将要发送的数据送入发送数据缓冲区SSPBUF中,系统硬件会自动将发送数据缓冲区里的数据装载到移位寄存器SSPSR中,然后根据预先选中的时钟节拍进行移位将数据串行发送,主机在发送8个Bit的数据的同时也接收了8个Bit的数据。

 SPI通信时的PIC16F73与ADS8341的连接电路图

    如上图所示,为硬件实现SPI通信时的PIC16F73与ADS8341的连接电路图,当在启动ADS8341进行数据采集时首先按照要求将8个Bit的控制字串行发送给ADS8341,然后ADS8341开始按照控制字的要求工作,等控制字发送完毕后,向ADS8341发送3个8Bit无效数据,以提供给ADS8341移位时钟DCLK,当这24个Bit的数据发送完毕时,也就接收到了所采集到的16Bit的数据。这样一次数据采样需要了32个时钟周期。

    PIC16f73控制ADS8341工作的子程序如下:

PIC16F73与ADS8341的连接电路图 

  3.软件方法实现SPI通信

    3.软件方法实现SPI通信

使用RBO模拟SPI方式下的移位时钟DCLK

    如上图所示,在此方法中使用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工作的子程序如下:

 PIC16f73控制ADS8341工作的子程序

PIC16f73控制ADS8341工作的子程序


推荐阅读

史海拾趣

Chemi-Con公司的发展小趣事

品质是Chemi-Con公司的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都经过严格的把控。这种对品质的执着追求,使得Chemi-Con的产品在市场上获得了良好的口碑。同时,公司还积极拓展市场,与全球多家知名企业建立了稳定的合作关系,产品远销海外市场。

FCI / Amphenol公司的发展小趣事

FCI公司起源于1988年,当时由Framatome组建,其初衷是作为核能领域外的一个多样化经营项目。然而,随着市场的变化和公司的战略调整,FCI逐渐将重心转向连接器制造。经过20多次的精心收购和策略性扩张,FCI在短短20年内便成长为全球最大的连接器制造公司之一。这一转变不仅展现了FCI对市场敏锐的洞察力,也体现了其卓越的管理能力和执行力。

Allianc公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,Allianc公司开始实施国际化战略。公司积极开拓海外市场,与多家国际知名企业建立了合作关系。同时,公司还加强了对海外市场的调研和分析,针对不同地区的消费者需求推出了定制化产品。这些举措使得Allianc公司在国际市场上的份额不断攀升,品牌影响力也逐渐增强。

GHI Electronics公司的发展小趣事

GHI Electronics深知技术创新是企业持续发展的关键。因此,公司不断加大研发投入,致力于开发具有自主知识产权的产品。其中,ARM微控制器、显示模块、空气质量传感器、模块化系统以及微处理器等主打产品系列,凭借其卓越的性能和稳定的品质,在消费电子、便携设备、通讯/网络等领域获得了广泛应用。这些技术创新不仅巩固了GHI Electronics在市场上的领先地位,也为其未来的发展奠定了坚实的基础。

DURATOOL公司的发展小趣事

DURATOOL公司自成立以来,一直致力于电子工具的技术创新。在20世纪90年代,公司研发出了一款具有革命性的数字万用表,该产品在精确度、稳定性和操作便捷性方面均大幅超越当时的市场主流产品。这一创新不仅为DURATOOL公司赢得了大量忠实用户,也为其在电子测量工具市场树立了技术领先的形象。随后,DURATOOL公司不断加大研发投入,推出了一系列具有竞争力的新产品,逐步巩固了其在电子工具行业的领先地位。

BTCPower公司的发展小趣事

BTCPower深知技术创新是公司发展的核心动力。因此,公司不断加大研发投入,积极引进和培养高素质的研发人才。同时,公司还建立了完善的研发体系和创新机制,鼓励员工提出新的想法和创意。这些举措使得BTCPower在技术创新方面始终保持领先地位。

问答坊 | AI 解惑

电子竞赛中的30m的频率通讯电路图出来了

本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 我们要使用的芯片是:ET13X211作为接收 ET13X221作为发送,电路如图所示 接收电路为: 主程序流产图如下: 详细信息在附件。 [ 本帖最后由 njlianjian 于 2009-9-3 09:15 编辑 ] &nbs ...…

查看全部问答>

收录的印制电路专业词汇中英文对照 (非常有用的)

一、 综合词汇 1、 印制电路:printed circuit 2、 印制线路:printed wiring 3、 印制板:printed board 4、 印制板电路:printed circuit board (PCB) 5、 印制线路板:printed wiring board(PWB) 6、 印制元件:printed component 7、 印 ...…

查看全部问答>

急急急,24v转5v的VICOR电源模块不输出?

哪位大侠给解决下vicor模块电源不输出的问题。 情况是这样的,用的vicor模块是V24C5T50BG,sc端与+out端接的是147.157的Trim up电阻。输入电压正常为:23.99v(+IN -- -IN),PC对-IN端电压6.01v,输出电压不正常0.88v(+out -- -out). 麻烦那位大 ...…

查看全部问答>

mp3播放器在wince下播放歌曲时,暂停后无法继续播放

   mp3的播放器采用标准的wince api函数来编写的,在wince环境下,能够正常播放、暂停和停止播放,但是在暂停后无法继续播放。具体原因是在暂停后,无法获取暂停时MP3播放的位置。在IMediaSeeking类中,GetCurrentPosition函数获取的播放 ...…

查看全部问答>

一个很邪门的问题

我帮别人做个读IO口,然后通过串口发出去的程序,用PC调试正常,怎么试怎么好,但是将单片机接到终端设备上去,终端收到的数据出错,但是如果将这个数据发给一台pc,单片机将数据发给pc,然后pc用相同的串口设置将收到数据发给设备,则设备接收数据 ...…

查看全部问答>

S3C2410怎么利用超级终端把ADS1.2生成的BIN文件烧进FLASH中?

小弟我现在正在学习S3C2410开发板,现在遇到难题!! 我想把ADS1.2生成的BIN文件烧到FLASH运行,可是我不知道怎么操作! 我用UART0连接开发板,并且是烧进线性FLASH中的,既把开发板上的S1挑到右边, 但是出现的屏幕上的信息是是否进入Linux?当我选择NO ...…

查看全部问答>

关于2440从nand启动前4K程序搬运的问题

各位大侠好!   今天看2440的ds,突然注意到一个问题,就是如果从nand启动话,手册上说先把flash里的前4K复制到steppingstone里,再执行里面的程序,但是有个问题,nand flash的操作很复杂,读写都需要一些命令,时序,在arm还没有 ...…

查看全部问答>

请教ST7LITEU05的PWM功能

用如下代码软件仿真,A0口不输出10K的PWM波,大哥看看哪里不对?试了很多了,PWM不工作。void main (void){// Set internal RC clock    RCCR = RCCRH0;     ...…

查看全部问答>

2530 + 2591的硬件设计

TI的参考设计中2591的三个电源端都有TLIN inductor,这个TLIN inductor可以不要的吗?还有就是这个TLIN不知道什么意思。…

查看全部问答>