解密歌斐资产:8年总资本管理规模1500亿,80家GP3600+初创公司,中国新兴产业深度支持者
06-18
摘要:本文是为了提高ADC转换的精度,加快工作速度而进行的。
主要介绍AVR单片机的SPI和MAX接口设计,并提供软件编程实现。
关键词:SPI、AVR 单片机、MAX 1、AVR 单片机的 SPI 接口 SPI(Serial Peripheral Interface---串行外设接口)总线系统是一种同步串行外设接口,允许 MCU 进行通信和以串行方式与各种外围设备交换数据,广泛应用于各种工业控制领域。
基于该标准,SPI系统可以直接与各厂家生产的多种标准外围设备接口。
SPI接口通常包含4条线:串行时钟(SCK)、主输入/从输出数据线(MISO)、主输出/从输入数据线(MOSI)和低电平有效从选择线SS。
在从机选择线SS使能的前提下,主机的SCK脉冲将在数据线上传输主/从机的串行数据。
主/从机典型连接图如图(1)所示: 图(1)主/从机连接图 串行外设接口 SPI 可以实现 ATmega16 与外设数据的高速同步传播。
ATmega16 SPI 的特性如下:全双工、3 线同步数据传输、主/从操作、LSB 优先或 MSB 优先、7 个可编程比特率、传输结束中断、写入冲突标志检测、可从空闲状态从动模式唤醒,作为主机时采用二速模式(CK/2)。
如图(2)所示,系统包括两个移位寄存器和一个主时钟发生器。
通过将所需从机的 SS 引脚拉低,主机启动通信过程。
主设备和从设备将需要的数据放入相应的移位寄存器中,主设备在SCK引脚上产生时钟脉冲来交换数据。
主设备的数据从 MOSI 移出,从从设备 MISO 移入。
从机数据从 MISO 移出,从从机 MOSI 移入。
主设备通过拉高从设备的SS来实现与从设备的同步。
图(2)SPI主从互连 下面介绍SPI的几个特殊寄存器: 1.1 SPI控制寄存器—SPCR SPIE为SPI中断使能,设置后只要SPSR 寄存器的 SPIF 和 SREG 寄存器的全局中断使能位被置 1,SPI 中断将被触发。
设置 SPE 将启用 SPI。
DORD置位时,先发送数据的LSB;否则,首先发送数据的MSB。
当 MSTR 置位时选择主机模式,否则选择从机模式。
CPOL置位表示空闲,SCK为高电平;否则,空闲时SCK为低电平。
CPHA 决定数据是在 SCK 的起始沿还是结束沿进行采样。
通过设计SPR1和SPR0来确定主机的SCK速率。
1.2 SPI 状态寄存器—SPSR SPIF 为中断标志位。
串行传输完成后,SPIF 被置位。
如果此时寄存器SPCR的SPIE和全局中断使能位被置位,则将产生SPI中断。
进入中断程序后,SPIF 将自动清零。
传输过程中向SPI数据寄存器SPDR写入数据会置位WCOL。
设置SPI2X后,SPI的速度将加倍。
1.3 SPI 数据寄存器—SPDR SPDR 数据寄存器是一个读/写寄存器,用于在寄存器文件和SPI 移位寄存器之间传输数据。
写入寄存器将启动数据传输,读取寄存器将读取寄存器的接收缓冲区。
SPI 系统在发送方向只有 1 个缓冲区,在接收方向只有 2 个缓冲区。
也就是说,发送时必须等到移位过程完成后才能写入SPI数据寄存器。
接收数据时,在下一个字符移位过程结束之前,需要通过访问SPI数据寄存器来读取当前接收到的字符。
否则第一个字节将会丢失。
本设计中使用的串行ADC芯片是MAXIM公司。

在AVR单片机SPI主机的控制下,完成MAX转换后的数据读取操作。
2。
MAX简介 MAX是Maxim公司推出的一款12位A/D转换芯片。
内部包含采样/保持电路,单路5V工作电源,转换速度8.5μs,片内4.V参考电压,模拟输入范围0~VBEF。
三线串行接口,兼容SPI、QSPI、MicroWire总线。
MAX采用采样/保持电路和逐位比较寄存器将输入的模拟信号转换为12位数字信号。
其采样/保持电路不需要外接电容。
MAX有2种工作模式:正常模式和睡眠模式。
将其设置为低电平进入睡眠模式,电流消耗将降至10μA以下。
置高或左悬空即可进入正常工作模式。
完整的操作顺序如图(3)所示。
使用内部基准时,上电后,基准引脚的4.7μF电容在20ms后充电,即可进行正常的转换操作。
A/D转换的工作过程为:低电平时,MAX的T/H电路在下降沿进入保持状态,开始转换。
8.5μs后,DOUT输出高电平作为转换完成标志。
此时,可以在SCLK端输入一系列脉冲,将结果从DOUT端移出并读入单片机进行处理。
数据读取完成后将置高。
需要注意的是,设置为低电平开始A/D转换后,只有检测到DOUT有效(或延迟8.5μs以上)后,才能发送SCLK移位脉冲来读取数据,SCLK的个数为至少13。
发送脉冲后,应设置为高电平。
图(3)SPI/Microwire串行接口时序图(CPOL=CPHA=0) 3.串行ADC接口设计与实现 MAX电源??需要添加去耦电容。
常用的方法是使用一个4.7μF电容和一个0.1μF电容并联。
为了保证采样精度,最好分别给MAX和单片机供电。
4脚连接4.7μF电容作为参考端,采用内部4.V参考电压模式。
输入模拟信号的电压范围为0~4。
V,如果模拟输入电压不在这个范围内,则必须添加外部电路来转换电压范围。
MAX只有1个模拟输入通道。
如果输入是多个信号,则必须添加多个模拟开关。
如图(4)所示,Vinp为模拟信号输入端。
经过MAX转换后,得到12的数据。
分别通过SCLK、CS、DOUT连接到AVR单片机SPI的SCK、SS、MISO。
在单片机的控制下读取数据。
图(4)MAX硬件接线图 编程: 程序使用ATmega16编译,并在ATmanAvr环境下调试通过。
程序的基本思路是:定义PB7引脚为时钟SCLK,PB6为数据DOUT,PB4为片选。
片选有效后,延时大于8.5μs,保证转换完成。
在时钟SCLK的作用下,从数据输出端读取转换后的数据,并存储在两个无符号字符变量中。
这两个字符变量组合成一个16位无符号整型变量函数返回值返回,返回值的低12位有效。
#define ss 4 //PB4 #define mosi 5 //PB5 #define miso 6 //PB6 #define sck 7 //PB7 PORTB = 0x4f; DDRB = 0xb0 ;//PB口初始化 void spi_init(void) { SPSR = 0x0; SPCR = 0x50; } unsigned int ADC_MAX(void) { 静态 uint temp,temp1; PORTB&=~(1>3; PORTB|=(1< 在仪器仪表、传感器、工程测试等方面。 参考文献: 1.ATmega16L数据表[DBOL]。 : 北京航空航天大学出版社。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
最新文章
PCBA质检员的日常工作内容
美国法院裁定VoIP不属于电信服务,需征税
雷达嵌入式工控主板如何使用?工控主板故障分析
摩托罗拉在西班牙促销Z8手机
中宇买下了一台三星机型,品牌和规模是合作的主要原因
舰载军用加固计算机热设计
谷歌开始对仍由HTC生产的谷歌手机进行内部测试
英国EE分享LTE发展经验教训,面临终端-语音-回传三大挑战