打打基础,回头看看avr单片机AD,DA,SPI等_飞鸿踏雪_新浪博客

废话少说了 先谈谈SPI

同步串行通信:需要一个CLK控制数据传输,异步不需要

AVR有硬件SPI接口:好处是快,而且有中断,模拟的只能查询使用多个单片机需要设定主从机。

硬件方面:PB4(ss)为设定从机的,PB5(MISI)为发送数据,PB6(MISO)接受数据的,PB6(CLK)时钟控制

SPI

   *1 寄存器 SPCR (控制寄存器)

                                                                0

   SPIE       SPE      DORD         MSIR        CPOL         CPHA        SPR1       SPR0

SPI中断使能  使能SPI  数据次序    主从选择     时钟级性     时钟相位    和SPI2X决定采集的速率

                       0

DORD 为1低位先发送,为0高位先发送

MSIR 为1主机模式    为0从机模式

CPOL 为1sck空闲高电平  0为低电平

CPHA 为1上升沿采集数据 0下降沿采集

SPI2X    SPR1       SPR0   决定采集的速率的 ,可以看时钟频率选择的分频表确定 

SPI2X在状态寄存器中

 

*2寄存器 SPSR(控制寄存器)

                                                                0

   SPIF       WCOL      —          —                                       SPi2x

  中断标志   写碰撞                                                                     速率

 SPIF 数据发送后, SPIF为置1  -----可用查询这位来确定是否发送完成

*2寄存器 SPDR(数据寄存器)

 

  数据传输模式

DA,AD原理我在这里就不讲了主要讲应用

指标分辨率和精度,分辨率由位确定,并非分辨率越高精度就越高,另外要注意转换时间

这里用了DA芯片AD5300(倒了居然这样命名) 

 

  对照为低有效,按照空闲位置为低电平,采集数据为下降沿,可以选对应的相应的时钟选择表设定单片机的spi

   然后就要交互数据了,首先需要有数据的格式吧,AD5300为16位一个数据的方式,具体可参见手册

 写程序

   先对spi初始化,对应的控制脚为输出,时钟和输出的数据线,使能芯片

   接着对单片机写spi控制 0x57  128分频,高位先发送

   对应16位放在了****DDDD  DDDD**** 故需要转换下,讲一个数据的高4为右移,放在高8字节,低4位左移,放在低8字节就可以发送了,还需注意要将查询用的spsr(状态寄存器)置0

   发送时先发高位数据,再发低位的  判断是否发完,用了do  while()执行查询spsr接while也可以,发好了要关闭芯片使能 芯片低电平工作,这里置高就关了

 

已投稿到:
郑重声明:资讯 【打打基础,回头看看avr单片机AD,DA,SPI等_飞鸿踏雪_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——