您的位置:首页单片机AVR单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

基于AVR单片机SPI的串行ADC接口设计

[日期:2008-02-26 ] [来源:net 作者:佚名] [字体: (投递新闻)
完整的操作时序如图(3)所示。使用内参考时,在电源开启后,经过20 ms后参考引脚的4.7μF电容充电完成,可进行正常的转换操作。A/D转换的工作过程是:当为低电平时,在下降沿MAX187的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接口设计与实现
MAX187电源需要加去耦合电容,常见的方法是用一个4.7μF电容和一个0.1μF电容并联。为保证采样精度,最好将MAX187与单片机分开供电。4脚为参考端接一个4.7μF的电容,这是使用内部4.096 V参考电压方式。输入模拟信号的电压范围为0~4.096 V,如模拟输入电压不在这个范围要外加电路进行电压范围的变换。MAX187只有一路模拟输入通道,如输入为多路信号,要外加多路模拟开关。
如图(4)所示,Vinp为模拟信号的输入端,经过MAX187转换后得到12的数据,通过SCLK、CS、DOUT分别与AVR单片机SPI的SCK、SS、MISO相接,在单片机的控制下对数据进行读取。

图(4)MAX187的硬件接线图
程序设计:
程序采用ATmega16编制,在ATmanAvr环境下调试通过。程序的基本思想是:定义PB7脚为时钟SCLK,PB6为数据DOUT,PB4为片选。片选有效后延时8.5μs以上确保转换完成,在时钟SCLK的作用下从数据输出端读出转换的数据后存入两个无符号字符变量中,将这2个字符变量拼成一个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_MAX187(void)
{
static uint temp,temp1;
PORTB&=~(1<<sck);
PORTB&=~(1<<ss);
delay_nus(10); //延时10uS
while(!PORTB&(1<<miso));
SPDR=0x00;
while(!SPSR&(1<<SPIF));
PORTB&=~(1<<sck);
temp=SPDR;
temp=(uint)temp<<8;
SPSR=0x00;
while(!SPSR&(1<<SPIF));
temp1=SPDR;
temp=(uint)((temp|temp1)&0x7fff)>>3;
PORTB|=(1<<ss);
return (temp);
}
4、 总结
本系统充分利用了AVR单片机的SPI模块和MAX187是具有兼容SPI串行接口的A/D转换器。本设计的串行ADC接口具有体积小、速度快、精度高等优点。适用于仪器仪表、传感器、工程检测等方面。
参考文献:
1、Atmel corporation.ATmega16L Datasheet [DB\OL]. http://www.atmel.com
2、马潮. ATmega128原理与开发应用指南上.北京:北京航空航天大学出版社.2004
3、http://www.ouravr.com

本文来源:21IC中国电子网 作者:湖北师范学院 唐重陈 刘海伟
上一页12  GO
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐