MAX1270学习笔记.docx
- 文档编号:5362891
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:15
- 大小:171.57KB
MAX1270学习笔记.docx
《MAX1270学习笔记.docx》由会员分享,可在线阅读,更多相关《MAX1270学习笔记.docx(15页珍藏版)》请在冰豆网上搜索。
MAX1270学习笔记
MAX1270
特点:
①逐次逼近型12位串行A/D转换器,线性误差小于1/2LSB;
②5V单电源供电;
③4个软件可控模拟电压输入范围:
0—+10V,0—+5V,-10V—+10V,-5V—+5V
④8个独立模拟输入通道(本采样电路使用通道0);
⑤110kpbs采样速率;最大承受异常电压为16.5V;
⑥内部(4.096V)或外部电压基准源;
⑦内部或外部时钟。
±
Max1270(PDIP封装)引脚功能介绍:
1、CH0—CH7:
8个独立模拟信号输入通道;
2、REF、REFADJ:
用以调整基准电压源;
3、SCLK:
串行输入时钟,同步DIN或DOUT数据线上的信号;
4、DIN:
数据输入线(串行);
5、DOUT:
数据输出线(串行);
6、SSTRB:
指示转换是否完成;
7、SHDN:
低电平时,Max1270进入睡眠状态;
8、CS:
片选信号,低电平有效。
图1引脚和典型接法
Max1270的控制寄存器
表1Max1270的控制寄存器
BIT7
(MSB)
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
(LSB)
START
SEL2
SEL1
SEL0
RNG
BIP
PD1
PD0
BIT
NAME
说明
7(MSB)
START
CS拉低后,START=1则控制字节开始生效
6,5,4
SEL2,SEL1,
SEL0
AD通道寄存器,见表2
3
RNG
输入电压范围选择位,见表3
2
BIP
输入电压极性选择位,见表3
1,0(LSB)
PD1
PD0
时钟模式,见表4
表2ADC通道选择
SEL2
SEL1
SEL0
ADC通道
0
0
0
CH0
0
0
1
CH1
0
1
0
CH2
0
1
1
CH3
1
0
0
CH4
1
0
1
CH5
1
1
0
CH6
1
1
1
CH7
表3MAX1270的电压范围和极性选择
MAX1270的电压范围和极性选择
输入电压范围
RNG
BIP
负电压满刻度(V)
零刻度
(V)
正电压满刻度(V)
0to+5V
0
0
—
0
5
0to+10V
1
0
—
0
10
±5V
0
1
-5
0
5
±10V
1
1
-10
0
10
表4省电模式和时钟选择
PD1
PD0
模式
0
0
活跃模式,内部时钟,ADC转换总是开启
0
1
活跃模式,外部时钟,ADC转换总是开启
1
0
待机省电模式(STBYPD)、时钟模式不受影响。
1
1
全部省电模式(FULLPD)、时钟模式不受影响
Max1270的控制时序描述
单片机将CS拉低后输入8位控制命令。
此8位控制命令字可对ADC进行配置,可选择输入通道,单/双极性,量程,输入模拟信号电压范围,时钟模式等。
当ADC转换完成时,会使SSTRB由高变低,此时即可读取DOUT上的12位ADC数据。
图2MAX1270ADC转换时序图(内部时钟13clock和16clock)
ADC数据转换
图3ADC数据转换示意图
正确取出12位ADC数据之后,由图3,当电压测量为无极性(0to+5V0to+10V)时,则12位数据为无符号整型数据,而且数据的步进是线性变化的。
0to+5V:
0V→000000000000B……2.5V→011111111111B……5V→111111111111B
0to+10V:
0V→000000000000B……5.0V→011111111111B……10V→111111111111B
当电压测量为有极性(-5to+5V-10to+10V)时,则12位数据是12位有符号二进制补码数据,而且数据的步进是线性变化的。
第12位为符号位,所以实质上量程为有极性时的ADC转换精度是12位
-5to+5V:
-5V→100000000000B……0V→000000000000B……5V→011111111111B
-10to+10V:
-10V→100000000000B……0V→000000000000B……10V→011111111111B
演示程序清单
/*-----------------------------------------------------------------------------
文件:
MAX1270.h
描述:
MAX127012位8通道ADC驱动程序头文件
功能:
三种转换模式:
活跃模式、待机模式、掉电模式
三种模式下功耗依次降低,不过速度越慢
注意:
由于MAX1270有4中不同的量程,需要依照不同的量程进行电压格式转换
版权:
copyrightforchenliangliang
编写:
2013.6.19调试成功
-----------------------------------------------------------------------------*/
#ifndef_MAX1270_H_
#define_MAX1270_H_
#defineDDR_SCLKDDRA|=_BV(0)
#defineSCLK_1270_LPORTA&=~_BV(0)//SPI时钟输出口
#defineSCLK_1270_HPORTA|=_BV(0)
#defineDDR_CSDDRA|=_BV
(1)
#defineCS_1270_LPORTA&=~_BV
(1)//片选信号,低电平有效
#defineCS_1270_HPORTA|=_BV
(1)
#defineDDR_DINDDRA|=_BV
(2)
#defineDIN_1270_LPORTA&=~_BV
(2)//1270串行数据输入端
#defineDIN_1270_HPORTA|=_BV
(2)
#defineDDR_DOUTDDRA&=~_BV(3);PORTA|=_BV(3)//上拉
#defineDOUT_1270(PINA&_BV(3))//1270串行数据输出端
#defineDDR_SSTRBDDRA&=~_BV(4);PORTA|=_BV(4)//上拉
#defineSSTRB_1270(PINA&_BV(4))//忙检测端,低电平转换完成
//宏定义测量电压范围
#defineV0_50//0-+5V
#defineV0_102//0-+10V
#defineV5_51//-5-+5V
#defineV10_103//-10-+10V
/*************功能函数**************/
voidMAX1270_init();//初始化MAX1270
voidwrite_1270_data(uint8_tdat);//写配置指令
uint16_tread_12bit();//读取MAX1270的12位ADC
uint16_tActive_ADC(uint8_tCH,uint8_tmode);//活跃模式
uint16_tStandby_ADC(uint8_tCH,uint8_tmode);//待机模式
uint16_tPowerdown_ADC(uint8_tCH,uint8_tmode);//掉电模式
/*************功能函数**************/
//函数:
MAX1270_init()
//描述:
初始化MAX1270
//参数:
void
voidMAX1270_init()
{
DDR_SCLK;
DDR_CS;
DDR_DIN;
DDR_DOUT;
DDR_SSTRB;
CS_1270_H;
SCLK_1270_L;
DIN_1270_L;
_delay_us(10);
}
//函数:
write_1270_data()
//描述:
写一个字节到MAX1270,用于配置1270的转换模式
//参数:
uint8_tdat:
转换指令
voidwrite_1270_data(uint8_tdat)
{
uint8_tk;
for(k=0;k<8;k++)
{
if(dat&0x80)
{
DIN_1270_H;
}
elseDIN_1270_L;
dat<<=1;
SCLK_1270_L;
_delay_us(10);
SCLK_1270_H;//时钟上升沿写入数据
_delay_us(10);
}
SCLK_1270_L;//将时钟置低,等待接收数据
}
//函数:
read_12bit()
//描述:
读MAX1270的12位ADC数据
//参数:
void
//返回值:
12位转换的ADC数据
uint16_tread_12bit()
{
_delay_us(20);//这个延时非常重要!
!
!
!
uint16_tdat=0;
uint8_tk;
for(k=0;k<12;k++)
{
dat<<=1;
if(DOUT_1270)
{
dat|=0x0001;//或上0x0001
}
SCLK_1270_H;//下降沿读出数据
_delay_us
(1);
SCLK_1270_L;
_delay_us
(1);
}
SCLK_1270_H;//将时钟置高,准备下次写
return(dat);
}
//函数:
Active_ADC()
//描述:
活跃模式下ADC转换
//参数:
uint8_tCH:
ADC通道uint8_tmode:
转换量程
//返回值:
12位转换的ADC数据
uint16_tActive_ADC(uint8_tCH,uint8_tmode)//活跃模式
{
//这个temp变量用得好,既可以配置,又可以返回接收ADC的数据
uint16_ttemp=0x80;//活跃模式下,PD1PD0为00
temp|=(CH<<4);//通道位于4,5,6位,则CH(0-7)左移4位
temp|=(mode<<2);//RNGBIP为极性和电压范围位
CS_1270_L;
write_1270_data(temp);//写配置指令
while(SSTRB_1270);//等待转换完成
temp=read_12bit();
CS_1270_H;
returntemp;
}
//函数:
Standby_ADC()
//描述:
待机模式下ADC转换
//参数:
uint8_tCH:
ADC通道uint8_tmode:
转换量程
//返回值:
12位转换的ADC数据
uint16_tStandby_ADC(uint8_tCH,uint8_tmode)//待机模式,比活跃模式偏大10左右
{
//这个temp变量用得好,既可以配置,又可以返回接收ADC的数据
uint16_ttemp=0x82;//待机模式下,PD1PD0为10
temp|=(CH<<4);//通道位于4,5,6位,则CH(0-7)左移4位
temp|=(mode<<2);//RNGBIP为极性和电压范围位
CS_1270_L;
write_1270_data(temp);//写配置指令
while(SSTRB_1270);//等待转换完成
temp=read_12bit();
CS_1270_H;
_delay_us(20);//由于待机模式下ADC转换速率较慢,故在此加了一个延时使其数据更稳定
returntemp;
}
//函数:
Powerdown_ADC()
//描述:
掉电模式下ADC转换
//参数:
uint8_tCH:
ADC通道uint8_tmode:
转换量程
//返回值:
12位转换的ADC数据
uint16_tPowerdown_ADC(uint8_tCH,uint8_tmode)//掉电模式
{
//这个temp变量用得好,既可以配置,又可以返回接收ADC的数据
uint16_ttemp=0x83;//待机模式下,PD1PD0为11
temp|=(CH<<4);//通道位于4,5,6位,则CH(0-7)左移4位
temp|=(mode<<2);//RNGBIP为极性和电压范围位
CS_1270_L;
write_1270_data(temp);//写配置指令
while(SSTRB_1270);//等待转换完成
temp=read_12bit();
CS_1270_H;
_delay_us(20);//由于待机模式下ADC转换速率较慢,故在此加了一个延时使其数据更稳定
returntemp;
}
#endif
/*-----------------------------------------------------------------------------
文件:
lcd1602.h
描述:
lcd1602驱动文件
功能:
显示字符和字符串
注意:
版权:
copyrightforchenliangliang
编写:
2012.1.1调试成功
-----------------------------------------------------------------------------*/#ifndef_LCD1602_h_
#define_LCD1602_h_
#include
#include
#define_1602E_LPORTD&=~_BV(7);//液晶能使端
#define_1602E_HPORTD|=_BV(7);
#define_1602RS_LPORTA&=~_BV(6);//液晶数据命令选择端
#define_1602RS_HPORTA|=_BV(6);
#define_1602RW_LPORTA&=~_BV(7);//液晶读写端
#define_1602RW_HPORTA|=_BV(7);
/**************功能函数***************/
voidwrite_com(int8_tcom);//写指令函数
voidwrite_data(int8_tdate);//写数据
voidwrite_str(int8_tcoordinate,char*str);//显示字符串(坐标+字符串)
voiddisplay();//设置显示状态
/**************功能函数***************/
voidwrite_com(int8_tcom)//写指令函数
{
_1602RS_L;
PORTC=com;
_delay_ms
(1);
_1602E_H;
_delay_ms
(1);
_1602E_L;
}
voidwrite_data(int8_tdate)//写数据
{
_1602RS_H;
PORTC=date;
_delay_ms
(1);
_1602E_H;
_delay_ms
(1);
_1602E_L;
}
voidwrite_str(int8_tcoordinate,char*str)//显示字符串(坐标+字符串)
{
write_com(coordinate);//写指令函数
while(*str!
='\0')
{
write_data(*str);//显示字符串
str++;
}
str=0;
}
voiddisplay()//设置显示状态
{
DDRA|=0xc0;//********************//
DDRD|=0x80;//设置对应IO口为输出模式
DDRC|=0xff;//********************//
_1602E_L;
_1602RW_L;
write_com(0x38);//显示模式,16X2显示,5X7点阵,八位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x01);//显示清零,数据指针清零
}
#endif
/*-----------------------------------------------------------------------------
文件:
main.c
描述:
MAX1270演示主函数
功能:
三种转换模式:
活跃模式、待机模式、掉电模式
三种模式下功耗依次降低,不过速度越慢
注意:
由于MAX1270有4中不同的量程,需要依照不同的量程进行电压格式转换
版权:
copyrightforchenliangliang
编写:
2013.6.19调试成功
-----------------------------------------------------------------------------*/
#include
#include
#include"MAX1270.h"
#include"lcd1602.h"
uint16_tAD[3];
intmain()
{
display();//设置显示状态
MAX1270_init();
_delay_ms(20);
write_str(0x80,"MAX1270_ADC:
");//显示字符串(坐标+字符串)
while
(1)
{
AD[0]=Active_ADC(0,V0_5);//活跃模式,通道0,量程为0-5V
AD[0]=(AD[0]*5.0)/4096*1000;
AD[1]=Standby_ADC(1,V0_10);//待机模式,通道1,量程为0-10V
AD[1]=(AD[1]*10.0)/4096*1000;
AD[2]=Powerdown_ADC(2,V10_10);//掉电模式,通道2,量程为-10-+10V
if((AD[2]<=2047)||AD[2]>=4093)//为正电压,正常情况下为2047
//AD[2]>=4093是由于器件的误差,接地不为0造成的
{
if(AD[2]>=4093)AD[2]=0;//对地造成误差的特殊处理
AD[2]=(AD[2]*10.0)/2048*1000;
}
else
{
AD[2]&=0x07ff;//去掉符号标志位
AD[2]=((2047-AD[2])*10.0)/2048*1000;
}
//显示
write_com(0x80+0x40);//写指令函数
write_data(AD[0]/1000+48);
write_data('.');
write_data(AD[0]%1000/100+48);
write_data(AD[0]%1000%100/10+48);
write_data(AD[0]%1000%100%10+48);
write_data('');
write_data(AD[1]/1000+48);
write_data('.');
write_data(AD[1]%1000/100+48);
write_data(AD[1]%1000%100/10+48);
write_data(AD[1]%1000%100%10+48);
write_data('');
write_data(AD[2]/1000+48);
write_data(AD[2]%1000/100+48);
write_data(AD[2]%1000%100/10+48);
write_data(AD[2]%1000%100%10+48);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MAX1270 学习 笔记