原创 MAX1036 AD转换

2009-3-27 21:24 4326 8 9 分类: MCU/ 嵌入式

zipMAX1036 AD转换驱动(含器件手册)


077ccf37-7fb3-49d4-914b-d57ded3290c1.jpg


 


MAX1036是8位ADC,四通道单端输入,和差分输入


快速AD转换,而且功耗极低8μA at 10ksps,内置参考电压4.096V 可以选择


高速I2C接口,内部时钟和外部时钟选择,


8脚SOT23封装,体积超小!!!


推荐!!!


压缩包里面包含以下文件:


MAX1036+LED   二极管显示


MAX1036+MAX7221  8位数码管显示


MAX1036+LCD1602  液晶LCD1602显示


芯片可以到美信公司申请(完全免费!!!)


 


以下为头文件  I2C协议接口


/*--------------------------------------------------------------*/
//File:   MAX1036.H
//Data:   16:51 2009-3-25
//Amend: 20:30 2009-3-27
//Version:  Ver0.2


/*--------------------------------------------------------------*/
//防止被重复定义
#ifndef  __MAX1036_H__
#define     __MAX1036_H__



/*--------------------------------------------------------------*/
//包含头文件
#include <intrins.h>



/*--------------------------------------------------------------*/
//接口定义
sbit SCL = P1^6;    //时钟
sbit SDA = P1^7;    //数据
 


/*--------------------------------------------------------------*/
//器件地址读写控制
#define address_w  0xc8  //写控制  
#define address_r  0xc9  //读控制



/*--------------------------------------------------------------*/
#define setup_byte  0xc0  //设置


#define bipolar   0xc0  //单端输入方式
#define unipolar  0xc4  //差分输入方式


/*---Setup Byte Format---*/
/*-------------------------------------------------------------------
BIT7(MSB) BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0(LSB)
REG   SEL2 SEL1 SEL0 CLK  BIP/UNI RST  X
-------------------------------------------------------------------*/
//REG  Register bit. 1 = Setup Byte, 0 = Configuration Byte
//CLK  1 = External clock, 0 = Internal clock. Defaulted to zero at power-up
//BIP/UNI 1 = Bipolar, 0 = Unipolar. Defaulted to zero at power-up
//RST  1 = No action, 0 = Resets the configuration register to default. Setup register remains unchanged.
//X   Don’t care, can be set to 1 or 0.


/*---Reference Voltage and AIN_/REF Format---*/
/*-------------------------------------------------------------------
SEL2 SEL1 SEL0  REFERENCE VOLTAGE  AIN_/REF   INTERNAL REFERENCE STATE
0   0  X  VDD      Analog input  Always Off
0   1  X  External reference  Reference input  Always Off
1   0  0  Internal reference  Analog input  Auto Shutdown
1   0  1  Internal reference  Analog input  Always On
1   1  X  Internal reference  Reference output Always On
-------------------------------------------------------------------*/



/*--------------------------------------------------------------*/
#define config_byte  0x61  //配制


#define channel0_s  0x61  //选择通道0, 单端输入方式
#define channel1_s  0x63  //选择通道1, 单端输入方式
#define channel2_s  0x64  //选择通道2, 单端输入方式
#define channel3_s  0x67  //选择通道3, 单端输入方式


#define channel0_d  0x60  //选择通道0+/1-, 差分输入方式
#define channel1_d  0x62  //选择通道0-/1+, 差分输入方式
#define channel2_d  0x63  //选择通道2+/3-, 差分输入方式
#define channel3_d  0x66  //选择通道2-/3+, 差分输入方式



/*---Configuration Byte Format---*/
/*-------------------------------------------------------------------
BIT7(MSB) BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0(LSB)
REG   SCAN1 SCAN0 CS3  CS2  CS1  CS0  SGL/DIF
-------------------------------------------------------------------*/
//REG  Register bit. 1 = Setup Byte (Table 1), 0 = Configuration Byte.
//SGL/DIF 1 = single-ended, 0 = pseudo-differential. Default to 1 at power-up


/*---Channel Selection in Single-Ended Mode (SGL/DIF = 1)---*/
/*-------------------------------------------------------------------
CS3 CS2 CS1 CS0  AIN0 AIN1 AIN2 AIN3 GND
0 0 0 0  +     -
0 0 0 1    +    -
0 0 1 0      +   -
0 0 1 1        + -
-------------------------------------------------------------------*/


/*---Channel Selection in Pseudo-Differential Mode (SGL/DIF = 0)---*/
/*-------------------------------------------------------------------
CS3 CS2 CS1 CS0  AIN0 AIN1 AIN2 AIN3
0 0 0 0  +  -
0 0 0 1  -  +
0 0 1 0      +    -
0 0 1 1      -    +
-------------------------------------------------------------------*/


/*---Scanning Configuration---*/
/*-------------------------------------------------------------------
SCAN1 SCAN0  SCANNING CONFIGURATION
0  0  Scans up from AIN0 to the input selected by CS3–CS0 (default setting).
0  1  Converts the input selected by CS3–CS0 eight times.
1  0  Scans up from AIN2 to the input selected by CS1 and CS0.  When CS1 and CS0 are set for
    AIN0–AIN2, the scanning stops at AIN2.
1  1  Converts the channel selected by CS3–CS0.
-------------------------------------------------------------------*/



/*--------------------------------------------------------------*/
//函数声明
void delay_10us(void);    //延迟时间10us
void delay_1s(void);    //延迟时间100ms
void start(void);     //开始总线
void stop(void);     //结束总线
void ack(bit ack);     //发送确认位
bit  check_ack(void);    //检测确认位
void write_byte(unsigned char dat); //写入一个字节
unsigned char read_byte(void);  //读出一个字节
void write_cmd(unsigned char dat); //写入一个指令
unsigned char read_dat(void);  //读出数据
void init_MAX1036(void);   //初始化从设备MAX1036



/*--------------------------------------------------------------*/
//延迟时间10us
void delay_10us(void)
{
 _nop_(); _nop_(); _nop_();
 _nop_(); _nop_(); _nop_();
}



/*--------------------------------------------------------------*/
//延迟时间1s
//延时1000000+1us 函数定义
void delay_1s(void)
{
    unsigned char i,j,k;
    for(i=167;i>0;i--)
    for(j=171;j>0;j--)
    for(k=16;k>0;k--);
}



/*--------------------------------------------------------------*/
//开始总线
void start(void)
{
 SDA = 1;  //在SCL为高时SDA由1变为0开始总线
 SCL = 1;
 SDA = 0;
 SCL = 0;  //钳住I2C总线,准备发送或接收数据
}



/*--------------------------------------------------------------*/
//结束总线
void stop(void)
{
 SCL = 0;
 SDA = 0;  //在SCL为高时SDA由0变为1结束总线
 SCL = 1;
 SDA = 1;
}



/*--------------------------------------------------------------*/
//发送确认位
//ack = 1 不确认
//ack = 0 确认
void ack(bit ack)
{
 SDA = ack;
 SCL = 1;
 SCL = 0;
}



/*--------------------------------------------------------------*/
//检测确认位
//返回值为0时,表示确认
//返回值为1时,表示确认错误
bit  check_ack(void)
{
 bit error_ack;
 SDA = 1;   //8位发送完后释放数据线,准备接收应答位
 SCL = 1;
 error_ack = SDA;
 SCL = 0;
 return(error_ack);
}



/*--------------------------------------------------------------*/
//写入一个字节
void write_byte(unsigned char dat)
{
 unsigned char i;
 for(i = 8; i != 0; i--)
 {
  SDA = (bit)(dat & 0x80); //先发送最高位
  SCL = 1;
  SCL = 0;
  dat <<= 1;
 }
}



/*--------------------------------------------------------------*/
//读出一个字节
unsigned char read_byte(void)
{
 unsigned char i, dat;
 dat = 0;      //初始化变量
 for(i = 8; i != 0; i--)
 {
  SCL = 1;
  dat <<= 1;
  dat |= (unsigned char)(SDA);//先收到最高位
  SCL = 0;
 }
 return(dat);
}



/*--------------------------------------------------------------*/
//写入一个指令
void write_cmd(unsigned char dat)
{
 start();    //开始总线
 write_byte(address_w); //写入从设备地址,进行写入操作
 check_ack();   //检测确认位
 write_byte(dat);  //写入指令字
 check_ack();   //检测确认位
 stop();     //结束总线
}



/*--------------------------------------------------------------*/
//读出数据
unsigned char read_dat(void)
{
 unsigned char dat;
 start();    //开始总线
 write_byte(address_r); //写入从设备地址,进行读出操作
 check_ack();   //检测确认位
 delay_10us();   //延迟时间10us
 dat = read_byte();  //读出数据
 ack(1);     //发送确认位,不确认
 stop();     //结束总线
 return(dat);
}



/*--------------------------------------------------------------*/
//初始化从设备MAX1036
void init_MAX1036(void)
{
 write_cmd(setup_byte);
 write_cmd(config_byte);
}



/*--------------------------------------------------------------*/
#endif


 


 


 

文章评论1条评论)

登录后参与讨论

用户518079 2009-3-28 10:54

谢谢楼主共享!
相关推荐阅读
用户149863 2010-05-22 22:40
LCD简单菜单显示
LCD简单菜单显示显示器件为图形型LCD12864(主控芯片KS0108)什么都不带!包含以下文件:LCD菜单(测试)LCD菜单(简单)LCD菜单(界面)LCD菜单(遥控器)希望对大家有用^_^感兴趣...
用户149863 2010-05-22 14:33
LCD12864(KS0108)液晶演示程序
LCD12864(KS0108)液晶演示程序LCD12864(KS0108)液晶演示程序视频: LCD12864演示程序(什么都不带的液晶) 视频演示网址:http://v.youku.com/v_s...
用户149863 2009-10-22 18:27
AVR代码
AVR单片机程序代码集,给需要的朋友们参考呵呵,都是自己一边学一边写的,一个一个字符从键盘敲出来的^_^希望对大家有用:-)呵呵,编译软件为:  ICCAVR V6.31A版本一共七个压缩包,呵呵,分...
用户149863 2009-10-22 15:18
VGA相关资料
VGA相关资料呵呵^_^如果你想玩的就请下载,有很多东西,都是花了我好几个夜晚才搜到的都是网上的资料:-)有兴趣的可以做做哦 包含以下文件夹:├─VGA+2051│  │  共享-----国外优秀电子...
用户149863 2009-10-10 14:46
PS/2 键盘与单片机
程序打包PS/2 键盘与单片机接口用LCD1602显示调试成功所以拿出来给大家分享,希望对大家有用,呵呵^_^用PS/2键盘做系统输入部分蛮方便的哦!可以使用Backspace/Esc/Tab/Cap...
用户149863 2009-08-17 19:54
AVR端口操作宏定义,便于移植
AVR端口操作宏定义头文件(ICCAVRIO.H),便于移植(ICCAVR编译环境) 压缩包里面有网上的相关资料,把它看完,相信你会更加了解红宏定义的^_^还有头文件在ICCAVRIO.H在Inclu...
我要评论
1
8
关闭 站长推荐上一条 /2 下一条