ad7705函数
AD7705中文资料
ad7706,ad7705中文资料,工作原理,C语言接口程序,引脚图,管脚工作原理:AD7705/06以及AD7707是比较典型的一种16位A/D转换芯片。
AD7705/06芯片是带有自校正功能的Σ-Δ于A/D转换器。
其内部由多路模拟开关、缓冲器、可编程增益放大器(PGA)、Σ-Δ调制器、数字滤波器、基准电压输入、时钟电路及串行接口组成。
其中串行接口包括寄存器组,它由通讯寄存器、设置寄存器、时钟寄存器、数据输出寄存器、零点校正寄存器和满程校正寄存器等组成。
该芯片还包括2通道差分输入(AD7705)和3种伪差分通道输入(AD7706)。
AD7705/06的PGA可通过指令设定,对不同幅度的输入信号实现1、2、4、8、16、32、64和128倍的放大,因此AD7705/ 06芯片既可接受从传感器送来的低电平输入信号,亦可接受高电平(10V)信号,它运用Σ―Δ技术实现16位无误码性能;它的输出速度同样可由指令设定,范围由20Hz到500Hz;它能够通过指令设定对零点和满程进行校正;AD7705/06与微处理器的数据传送通过串行方式进行,采用了节省端口线的通讯方式,最少只占用控制机的两条端口线。
AD7705引脚图(管脚图):AD7706引脚图(管脚图):AD7705与68HC系列单片机的C语言接口程序:/* This program has read and write routines for the 68 HC11 to interface to the AD7705 and the sample progra m sets the variousregisters and then reads 1000 samples from one chann el. */#include <math.h>#include <io6811.h>#define NUM_SAMPLES 1000 /* change the number of data samples */#define MAX_REG_LENGTH 2 /* this says that the max length of a register is 2 bytes */Writetoreg (int);Read (int,char);char *datapointer = store;char store[NUM_SAMPLES*MAX_REG_LENGTH + 30]; void main(){/* the only pin that is programmed here from the 68HC 11 is the /CS and this is why the PC2 bit of PORTC is made asan output */char a;DDRC = 0x04; /* PC2 is an output the rest of the port bits are inputs */PORTC | = 0x04; /* make the /CS line high */ Writetoreg(0x20); /* Active Channel is Ain1(+)/Ain1(-), next operation as write to the clock register */Writetoreg(0x0C); /* master clock enabled, 4.9512MHzClock, set output rate to 50Hz*/Writetoreg(0x10); /* Active Channel is Ain1(+)/Ain1(-),next operation as write to the setup register */ Writetoreg(0x40); /* gain = 1, bipolar mode, buffer off, clear FSYNC and perform a Self Calibration*/while(PORTC & 0x10); /* wait for /DRDY to go low */for(a=0;a<NUM_SAMPLES;a++);{Writetoreg(0x38); /*set the next operation for 16 bit read from the data register */Read(NUM_SAMPES,2);}}Writetoreg(int byteword);{int q;SPCR = 0x3f;SPCR = 0X7f; /* this sets the WiredOR mode(DWOM= 1), Master mode(MSTR=1), SCK idles high(CPOL=1), /S S can be lowalways (CPHA=1), lowest clock speed(slowest speed which is master clock /32 */DDRD = 0x18; /* SCK, MOSI outputs */q = SPSR;q = SPDR; /* the read of the staus register and of thedata register is needed to clear the interrupt which tells the user that thedata transfer is complete */PORTC &= 0xfb; /* /CS is low */SPDR = byteword; /* put the byte into data register */while(!(SPSR & 0x80)); /* wait for /DRDY to go low */ PORTC |= 0x4; /* /CS high */}Read(int amount, int reglength){int q;SPCR = 0x3f;SPCR = 0x7f; /* clear the interupt */DDRD = 0x10; /* MOSI output, MISO input, SCK outpu t */while(PORTC & 0x10); /* wait for /DRDY to go low */ PORTC & 0xfb ; /* /CS is low */for(b=0;b<reglength;b++){SPDR = 0;while(!(SPSR & 0x80)); /* wait until port ready before r eading */*datapointer++=SPDR; /* read SPDR into store array vi a datapointer */}PORTC|=4; /* /CS is high */}。
AD7705770616位ΣΔAD转换器原理及其应用
AD7705 7706 16位Σ ΔA D转换器原理及其应用AD7705/7706 16位Σ-ΔA/D转换器原理及其应用AD7705/7706是 AD公司新推出的16位Σ-ΔA/D转换器。
器件包括由缓冲器和增益可编程放大器(PGA)组成的前端模拟调节电路,Σ-Δ调制器,可编程数字滤波器等部件。
能直接将传感器测量到的多路微小信号进行A/D转换。
这两种器件还具有高分辨率、宽动态范围、自校准、优良的抗噪声性能以及低电压低功耗等特点,非常适合应用在仪表测量、工业控制等领域。
一.主要特点1. AD7705:两个全差分输入通道的ADC2. AD7706:三个准差分输入通道的ADC3. 16位无丢失代码4. %非线性5. 可编程增益:1、2、4、8、16、32、64、1286. 可编程输出数据更新率7. 可选择输入模拟缓冲器8. 自校准和系统校准9. 三线串行接口,QSPITM,MICROWIRETM和DSP兼容或5V工作电压电压时,最大功耗为1mW13. 等待模式下电源电流为8μA二.功能框图和引脚排列引脚排列如图1所示,功能框图见图2,,AD7706部分引脚(6,7,8,11)与图1 AD7705的引脚AD7705不同,已标注在图中括号内。
图 2 AD7705/7706功能框图三.应用说明AD7705/7706是完整的16位A/D转换器。
外接晶体振荡器、精密基准源和少量去耦电容,即可连续进行A/D转换。
下面对器件的几个重要部分和特性作简要说明。
1.增益可编程放大器和采样频率AD7705包括两个全差分模拟输入通道,AD7706包括三个准差分模拟输入通道。
片内的增益可编程放大器PGA可选择1、2、4、8、16、32、64、128八种增益之一,能将不同摆幅范围的各类输入信号放大到接近A/D转换器的满标度电压再进行A/D转换,这样有利于提高转换质量。
当电源电压为5V,基准电压为时,器件可直接接受从0~+20mV至0~+摆幅范围的单极性信号和从0~±20mV至0~±范围的双极性信号。
AD7705的操作
AD7705的操作我现在使用外部TL431(2.5V基准电压),电源电压为5V,外接晶体振荡器2.4576MHz,电路如下:程序如下:--------------------------AD7705.H -----------------------------------#ifndef _AD7705_H_#define _AD7705_H_// 引脚定义sbit AD7705_SCLK = P2^4;sbit AD7705_DRDY = P2^5;sbit AD7705_DOUT = P2^6;sbit AD7705_DIN = P2^7;// 通讯寄存器地址定义#define WR_SETUP_REG 0x10 //选中设置寄存器,写#define RD_SETUP_REG 0x18 //选中设置寄存器,读#define WR_CLOCK_REG 0x20 //选中时钟寄存器,写#define RD_DATA_REG 0x38 //选中数据寄存器,读#define WR_OFFSET_REG 0x60 //选中offset寄存器,写#define RD_OFFSET_REG 0x68 //选中offset寄存器,读#define WR_FULL_REG 0x70 //选中full scale寄存器,写#define RD_FULL_REG 0x78 //选中full scale寄存器,读#define SYS_ZERO_CALI 0x80 //系统零校准模式#define SYS_FULL_CALI 0xC0 //系统满量程校准模式#define ZERO_CALIBRA TION 0x00 //系统零校准#define FULL_CALIBRA TION 0x01 //系统满量程校准#define CLOCK_REG_SET 0x04 //CLOCK寄存器设置,无分频,50HZ 输出更新速率#define DELAY() {_nop_();_nop_();_nop_();}// 函数声明void AD7705_Init(void);void AD7705_Reset(void);void AD7705_Start(void);uchar AD7705_ReadByte(void);void AD7705_WritByte(uchar d);float AD7705_ReadV ol(void);#endif--------------------------AD7705.C -----------------------------------//**************************************************************************** //功能:AD7705串行接口失步后将其复位。
[设计]AD转换芯片7705
[设计]AD转换芯片7705AD7705 性价比比较高的 16位 ad 使用比较简单用做单通道的时候基本不怎么需要设置做双通道的时候,发现的点问题,而这几点问题在网上的前辈那也没有特别说明这里提出来供用的着 AD7705 的参考下1. 关于时钟寄存器 AD7705 只有一个时钟寄存器而不是两个。
2.4576MHZ 是标准频率,如果用 4.9152MHZ的时候,要将 CLKDIV位置位也就是 2 分频到 2.4576 具体设置看手册2. 关于数据寄存器 AD7705 也只有一个数据寄存器,一段时间内只能对一路AD输入做数据转换。
数据转换范围单极性 0 -- Vref/Gain 对应 0 -- 0xffff(65535)双极性 -Vref/Gain -- 0 对应 0 -- 0x8000(32768) 0 - Vref/Gain 对应0x8000(32768) -- 0xffff(65535)3. 关于设置寄存器同样也只有一个,要用哪个通道就要先设置这个通道对应的寄存器值4. 校准寄存器虽然有 4对但只是对应外部校准的所以在用自校准,通道切换的时候也要重新自校准一下,校准的时候 DRDY 为高电平,校准完后为低电平校准完后第一次读的数据不怎么准应该读第二次转换出来的数据。
下边是我单通道切换转换的程序:#include <iom16v.h>//SPI 引脚定义 PB 口#define CS_DRDY 3#define CS_CS 4#define CS_MOSI 5#define CS_MISO 6#define CS_SCK 7extern void SpiInit(void); // SPI 初始化 M16extern void InitAD7705(void); // AD7705 初始化extern unsigned int ReadDataCH1(void); //读取转换数据extern unsigned int ReadDataCH2(void); //读取转换数据#include "AD7705.H"//定义位操作#define SET_BIT(x,y) ((x) |= (0x0001 << (y))) #define CLR_BIT(x,y) ((x) &= ~(0x0001 <<(y))) #define CPL_BIT(x,y) ((x) ^= (0x0001 << (y))) #define GET_BIT(x,y) (((x) & (1 << (y))) == 0? 0:1)#define LET_BIT(x,y,z) ((x) = (x) & (~(1 << (y))) | ((z) << (y))) //**********************短延时程序50us**************************// void delay50us(unsigned int t) {unsigned int j;for(;t>0;t--)for(j=0;j<70;j++);}// SPI 初始化 M16void SpiInit(void){//cs 置为输出方可不影响 SPI 总线DDRB|=(1<<CS_MOSI)|(1<<CS_SCK)|(1<<CS_CS);//使能 spi 设置为主机时钟极性为空闲时高平上升沿采样下降沿设置分频系数为128分频SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0);SPSR = 0x00; //setup SPISET_BIT(PORTB,CS_DRDY); //设置 REDY 信号输入端口上拉电阻使能SET_BIT(PORTB,CS_MISO); //设置 MISO 信号输入端口上拉电阻使能 }// SPI 发送接收数据unsigned char TransmitterSpi(unsigned char cData){SPDR = cData;while(!(SPSR&(1<<SPIF)));return SPDR;}//复位 AD7705void ResetAD(void){unsigned char i ;for(i = 10;i>0;i--) //持续DIN高电平写操作,恢复AD7705接口{TransmitterSpi(0xff);}}// AD7705 初始化void InitAD7705(void){CLR_BIT(PORTB,CS_CS); //CS置为输出低电平,使能 AD7705ResetAD() ;TransmitterSpi(0x20); //通讯寄存器 //通道 1,下一个写时钟寄存器自校准TransmitterSpi(0x00); //时钟寄存器 //写时钟寄存器设置 2.459Mhz更新速率为20hzTransmitterSpi(0x10); //通讯寄存器 //通道 1,下一个写设置寄存器TransmitterSpi(0x48); //设置寄存器 //自校准,增益 1,双极 ,缓冲delay50us(100); //延时TransmitterSpi(0x21); //通讯寄存器 //通道 2,下一个写时钟寄存器自校准TransmitterSpi(0x00); //时钟寄存器 //写时钟寄存器设置 2.459Mhz更新速率为20hzTransmitterSpi(0x11); //通讯寄存器 //通道 2,下一个写设置寄存器TransmitterSpi(0x48); //设置寄存器 //自校准,增益 1,双极,缓冲delay50us(100);}//*************************** 按照通道 1 读取****************************//unsigned int ReadDataCH1(void) {unsigned int getData = 0;unsigned char bufR[5];TransmitterSpi(0x10); //通讯寄存器 //通道 1,下一个写设置寄存器TransmitterSpi(0x48); //设置寄存器 //自校准,增益 1,双极 ,缓冲while(PINB&(1<<CS_DRDY)); //等待校准完成 READY 信号变为低电平TransmitterSpi(0x38); //发送 0x38 读取 CH1 数据寄存器while(PINB&(1<<CS_DRDY)); //等待 READY 信号变为低电平bufR[0]=TransmitterSpi(0xff); //转换结果高位bufR[1]=TransmitterSpi(0xff); //转换结果低位getData=(bufR[0]<<8)|bufR[1]; //获得数据 16 位return getData ; //返回数据}//***************************按照通道 2 读取****************************//unsigned int ReadDataCH2(void) {unsigned int getData = 0;unsigned char bufR[5];TransmitterSpi(0x11); //通讯寄存器 //通道 1,下一个写设置寄存器TransmitterSpi(0x48); //设置寄存器 //自校准,增益 1,双极 ,缓冲while(PINB&(1<<CS_DRDY)); //等待校准完成 READY 信号变为低电平TransmitterSpi(0x39); //发送 0x01 读取 AD7705 数据寄存器while(PINB&(1<<CS_DRDY)); //等待 READY 信号变为低电平bufR[0]=TransmitterSpi(0xff); //转换结果高位bufR[1]=TransmitterSpi(0xff); //转换结果低位getData=(bufR[0]<<8)|bufR[1]; //读取数据前 16 位return getData ;}void main(void){unsigned char adi ;unsigned int getData,getData2;SpiInit();InitAD7705();while(1){if(adi++ >=1) adi = 0;if(adi == 0) getData = ReadDataCH1(); if(adi == 1) getData2 = ReadDataCH2(); }}。
stm32 AD7705
#ifndef __SPI1_H#define __SPI1_H#include "stm32f10x.h"#define CS_ADC_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_4) /*Ƭѡ*/#define CS_ADC_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_4)u8 SPIx_ReadWriteByte(u8 TxData);void delay_ms(u16 time);void delay_us(u16 time);void SPIx_Init(void);void AD7705_WriteByte(u8 Dst_Addr);void Init_AD7705(u8 chnanel);u16 GetData7705_CH1(void);u16 GetData7705_CH2(void);#endif /* __SPI1_H *///AD7705.C#include "AD7705.h"#include "stm32f10x.h"/*SPI1_NSS PA4 CSSPI1_SCK PA5 CLKSPI1_MISO PA6 DOUTSPI1_MOSI PA7 DINPA8 DRDY*/void SPIx_Init(void){SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;// AdDrdyGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//PA8配置成上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//SPI CS DAC8554 AD7705GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);SPI_Cmd(SPI1, DISABLE); //失能SPI外设SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI设置为双线双向全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为主SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI发送接收8位帧结构SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//时钟悬空为高SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//内部NSS信号有SSI位控制SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //波特率预分频值256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输从MSB开始SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式SPI_Init(SPI1, &SPI_InitStructure); //SPI寄存器的初始化SPI_Cmd(SPI1, ENABLE); //使能SPI外设CS_ADC_LOW();SPIx_ReadWriteByte(0xff); //启动传输CS_ADC_HIGH();}//SPIx 读写一个字节//TxData:要写入的字节//返回值:读取到的字节u8 SPIx_ReadWriteByte(u8 TxData){u8 retry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位{retry++;if(retry>200)return 0;}SPI_I2S_SendData(SPI1, TxData); //发送数据retry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){retry++;if(retry>200)return 0;}return SPI_I2S_ReceiveData(SPI1); //返回接收到的数据}//写数据void AD7705_WriteByte(u8 Dst_Addr){CS_ADC_LOW(); //使能器件delay_us(20);SPIx_ReadWriteByte(Dst_Addr);delay_us(100);CS_ADC_HIGH();//失能}/********AD7705初始化函数***********/void Init_AD7705(u8 chnanel){u8 i;for(i=0;i<100;i++)/*多于连续32个DIN=1使串口复位*/{AD7705_WriteByte(0xff);//持续DIN高电平写操作,恢复AD7705接口}delay_ms(1);switch(chnanel){case 1:AD7705_WriteByte(0x20); /* 写通讯寄存器选中ch1*/AD7705_WriteByte(0x04);//0x04 /* 1MHz时钟,200Hz数据更新速率*/AD7705_WriteByte(0x10); /*选择设置寄存器,使用chnanel 1*/AD7705_WriteByte(0x44); //写设置寄存器,设置成单极性,无缓冲,增益为1,滤波器工作,自校准break;case 2:AD7705_WriteByte(0x21); /* 写通讯寄存器选中ch2 */AD7705_WriteByte(0x04); /* 1MHz时钟,200Hz数据更新速率*/AD7705_WriteByte(0x11); /*选择设置寄存器,使用chnane 2*/AD7705_WriteByte(0x44); //写设置寄存器,设置成单极性,无缓冲,增益为1,滤波器工作,自校准break;default:break;}}/* 读AD7705转换数据输入通道channel */u16 GetData7705_CH1(void){u16 temp1 = 0;u16 DataL = 0;u16 DataH = 0;Init_AD7705(1); //初始化通道1delay_ms(1);AD7705_WriteByte(0x38); //选中CH1数据寄存器读while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1) //等待数据准备好{}CS_ADC_LOW(); //使能器件delay_us(20);DataH = SPIx_ReadWriteByte(0xff);DataL = SPIx_ReadWriteByte(0xff);delay_us(200);CS_ADC_HIGH(); //片选取消DataH = DataH << 8;temp1 = DataH | DataL;return temp1;}/* 读AD7705转换数据输入通道channe2 */u16 GetData7705_CH2(void){u16 temp2 = 0;u16 DataL = 0;u16 DataH = 0;Init_AD7705(2); //初始化通道2delay_ms(1);AD7705_WriteByte(0x39); //选中CH2数据寄存器读while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1) //等待数据准备好{}CS_ADC_LOW(); //使能器件delay_us(20);DataH = SPIx_ReadWriteByte(0xff);DataL = SPIx_ReadWriteByte(0xff);delay_us(200);CS_ADC_HIGH(); //片选取消DataH = DataH << 8;temp2 = DataH | DataL;return temp2;}void delay_us(u16 time){u16 i=0;while(time--){i=10;while(i--);}}void delay_ms(u16 time){u16 i=0;while(time--){i=12000;while(i--);}}。
AD7705及其校准
AD7705及其校准16位∑-Δ模数转换器AD7705及其校准1、AD7705简介AD7705是AD公司推出的16位∑-Δ(电荷平衡式)A/D转换器。
他包括由缓冲器和增益可编程放大器(PGA)组成的前端模拟调节电路、∑-Δ调制器及可编程数字滤波器等,能直接对来自传感器的微弱信号进行A/D转换。
此外他还具有高分辨率、宽动态范围、自校准,低功耗及优良的抗噪声性能,因此非常适用于仪表测量和工业控制等领域。
1.1基本特性AD7705的基本特性为:16位无丢失代码;0.003%的非线性度;PGA可选择1,2,4,8,16,32,64,128;8种增益;输出数据更新速率可编程;具有自校准和系统校准功能,三线串行接口,可缓冲模拟输入;低功耗。
1.2引脚功能AD7705的引脚排列如图1所示,各引脚的功能说明如下:SCLK:串行时钟输入。
MCLK IN:主时钟输入。
时钟频率为500kHz-5MHz。
MCLK OUT:主时钟输出。
CS反:片选,低电平有效。
RESET反:复位。
该端口为低电平时,可以将控制逻辑、接口逻辑、校准系数以及数字滤波器等复位为上电状态;AIN2(+)、AIN2(-):分别为差分模拟输入通道2的正、负输入端。
AIN1(+)、AIN1(-):分别为差分输入通道1得正、负输入端。
REF IN(+)、REF IN(-):分别为参考电压的正、负端。
为了确保元件的正常工作,REF IN(+)端口的输入信号必须大于REF IN(-)端的输入。
DRDY反:逻辑输出。
低电平表示可以读取新的数据转换;高电平时不可读取数据。
IDN,DOUT:分别为串行数据输入和输出端。
1.3片内寄存器AD7705共有8个片内寄存器,他们是通信寄存器、设置寄存器、时钟寄存器、数据寄存器以及几个测试和校准寄存器。
这些寄存器的任何操作都必须先写通信寄存器,然后才能对其他寄存器进行操作。
(1)通信寄存器通信寄存器是一个8位读/写寄存器,写入通信寄存器的数据决定下一次读/写操作在哪一个寄存器上进行,完成对所选寄存器的读/写操作后,该端口等待下一次写操作,这也是通信寄存器的缺省状态,如果在DIN为高电平时,写操作持续的时间足够长(至少32个串行时钟周期),那么AD7705将返回该缺省状态。
AD7705中文资料_数据手册_参数
关于AD7705的技术文档
关于AD7705模块的技术文档一、模块描述1、简介:D7705/7706 是应用于低频测量的2/3 通道的模拟前端。
该器件可以接受直接来自传感器的低电平的输入信号,然后产生串行的数字输出。
利用Σ-∆转换技术实现了16 位无丢失代码性能。
选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。
片内数字滤波器处理调制器的输出信号。
通过片内控制寄存器可调节滤波器的截止点和输出更新速率,从而对数字滤波器的第一个陷波进行编程。
2、产品性能参数及特点:�AD7705:2 个全差分输入通道的ADC�AD7706:3 个伪差分输入通道的ADC16位无丢失代码0.003%非线性�可编程增益前端增益:1~128�三线串行接口SPITM、QSPITM、MICROWIRETM和DSP 兼容�有对模拟输入缓冲的能力�2.7~3.3V或4.75~5.25V工作电压� 3V电压时,最大功耗为1mW�等待电流的最大值为8μA�16脚DIP、SOIC和TSSOP封3、产品应用场合:AD7705/7706 是用于智能系统、微控制器系统和基于DSP 系统的理想产品。
其串行接口可配置为三线接口。
增益值、信号极性以及更新速率的选择可用串行输入口由软件来配置。
该器件还包括自校准和系统校准选项,以消除器件本身或系统的增益和偏移误差。
二、模块原理图三、引脚功能四、校准1、自校准过向设置寄存器的MD1和MD0写入相应值(0,1),器件开始自校准。
在单极性输入信号范围内,用来确定校准系数的零标度点是用差分输入对的输入端在器件内部短路(即,对于AD7705,AIN(+)=AIN(-)=内部偏置电压;对于AD7706,AIN=COMMON=内部偏置电压)。
增益可编程放大器(PGA)设置为用于零标度校准转换时选定的增益(由通信寄存器内的G1和G0位设置)。
满标度标准转换是在一个内部产生的VREF电压和选定增益的条件下完成的。
校准持续时间是6×1/输出速率。
AD7705的操作
AD7705的操作我现在使用外部TL431(2.5V基准电压),电源电压为5V,外接晶体振荡器2.4576MHz,电路如下:程序如下:--------------------------AD7705.H -----------------------------------#ifndef _AD7705_H_#define _AD7705_H_// 引脚定义sbit AD7705_SCLK = P2^4;sbit AD7705_DRDY = P2^5;sbit AD7705_DOUT = P2^6;sbit AD7705_DIN = P2^7;// 通讯寄存器地址定义#define WR_SETUP_REG 0x10 //选中设置寄存器,写#define RD_SETUP_REG 0x18 //选中设置寄存器,读#define WR_CLOCK_REG 0x20 //选中时钟寄存器,写#define RD_DATA_REG 0x38 //选中数据寄存器,读#define WR_OFFSET_REG 0x60 //选中offset寄存器,写#define RD_OFFSET_REG 0x68 //选中offset寄存器,读#define WR_FULL_REG 0x70 //选中full scale寄存器,写#define RD_FULL_REG 0x78 //选中full scale寄存器,读#define SYS_ZERO_CALI 0x80 //系统零校准模式#define SYS_FULL_CALI 0xC0 //系统满量程校准模式#define ZERO_CALIBRA TION 0x00 //系统零校准#define FULL_CALIBRA TION 0x01 //系统满量程校准#define CLOCK_REG_SET 0x04 //CLOCK寄存器设置,无分频,50HZ 输出更新速率#define DELAY() {_nop_();_nop_();_nop_();}// 函数声明void AD7705_Init(void);void AD7705_Reset(void);void AD7705_Start(void);uchar AD7705_ReadByte(void);void AD7705_WritByte(uchar d);float AD7705_ReadV ol(void);#endif--------------------------AD7705.C -----------------------------------//**************************************************************************** //功能:AD7705串行接口失步后将其复位。
AD7705_C程序
#define uchar unsigned char #define uint unsigned int#include"define.h"//热流管脚定义#define datap0P4OUT&=~BIT2//P4.2 #define datap1P4OUT|=BIT2#define datap_out P4DIR|=BIT2#define datap_in P4DIR&=~BIT2#define datap_get P4IN&BIT2#define drdy_out P4DIR|=BIT1//P4.1#define drdy_in P4DIR&=~BIT1#define drdy_get P4IN&BIT1#define sclk0P4OUT&=~BIT0//P4.0 #define sclk1P4OUT|=BIT0void delay_7705(uint num);void init_7705();uint read_7705(char channel);void write_7705(uchar cmd);#include"msp430x14x.h"#include"ad7705.h"void delay_7705(uint num){uint temp;for(temp=0;temp<num;temp++){}}//**********************************************////函数名称:void init_7705()//函数功能:初始化AD7705//传入参数:无//返回参数:无//编写时间:2010-06-02//**********************************************//void init_7705(){uchar i;sclk1;//串行时钟置一datap1;//串行数据置一for(i=0;i<40;i++)//40次串行时钟变换{sclk0;sclk1;}delay_7705(1200);datap1;//串行数据置一write_7705(0x20);//通道0,选择时间寄存器write_7705(0x0A);//转换速率50HZwrite_7705(0x10);//通道0,选择设置寄存器write_7705(0x68);//自校准32倍双极性drdy_in;//MCU相应IO口方向改为输入,以便检测drdy的状态_NOP();while(drdy_get){};//等待drdy变低,变低表明数据寄存器有新的有效数据drdy_out;//MCU相应IO口方向改为输出}//**********************************************////函数名称:uint read_7705(char channel)//函数功能:读取数值//传入参数:channel通道,0通道0,1通道1//返回参数:ad16bit读取到的十六位数据//编写时间:2010-06-02//**********************************************//uint read_7705(char channel){uint ad16bit;uchar i;write_7705(0x38+channel);//0x38通道00x39通道1drdy_in;while(drdy_get){};drdy_out;sclk1;ad16bit=0x0000;datap_in;//MCU相应IO口方向改为输入for(i=0;i<16;i++)//读取数据,单个位读取,共16位,高位开始{ad16bit=ad16bit<<1;sclk0;_NOP();if(datap_get)//输入为高,读取为1ad16bit=ad16bit|0x0001;sclk1;}datap_out;//方向改为输出sclk1;datap1;return ad16bit;}//**********************************************////函数名称:void write_7705(uchar cmd)//函数功能:写入指令//传入参数:cmd待写入的指令//返回参数:无//编写时间:2010-06-02//**********************************************//void write_7705(uchar cmd){uchar i;datap1;sclk1;for(i=8;i>0;i--)//写入指令循环,从高位开始{sclk0;_NOP();_NOP();_NOP();if(cmd&0x80)datap1;//将数据线拉高,写入1else datap0;//将数据线拉低,写入0sclk1;_NOP();_NOP();_NOP();cmd<<=1;}datap1;}。
AD7705在智能数字仪表中的应用
存器开始,它的内容决定下一次操作是对哪一个寄存器进行读操作还
是写操作,并控制对哪一个输入通道进行采样;如果 AD7705 使用晶
振的话,时钟寄存器的 clkdis 必须设置为 1,否则必导致读出数据不可
预知;始终信号线在平时不用时应该置为高电平;数据输出率通常设
为 50Hz,以消除工频噪声的干扰;写数据时在时钟的上升沿写入;读
{
பைடு நூலகம்
unsigned char i=8;
ADCLK=1;
while(i- - )
{
ADCLK=0;
_nop_();
content<<=1; //低电平时准备数据
DIN=CY;
_nop_();
ADCLK=1;
//在时钟的上升沿将数据写入
_nop_();
_nop_();
}
ADCLK=1;
}
图 4 读操作时序
图 2 AD7705 接口电路
5 V。3 V 电压时,最大功耗为 1 mW,等待模式下电源电流仅为 8 μA。
AD7705 与微处理器连接,没有使用单片机的串行口,而是采用普
引脚如图:
通的 I/O 口来模拟串行口。AD7705 的 DRDY 与单片机的 P1.0 相连,
以备单片机来查询 AD7705 的状态。AD7705 的 RST 与单片机的 P1.4
数据时在时钟的下降沿准备数据,在上升沿数据稳定;使用单片机的
串口时应注意数据格式的转化,因为 AD0075 传输数据时 MSB 在前,
而单片机传输数据时 LSB 在前。
(下转第 454 页)
414
科技信息
○建筑与工程○
SCIENCE & TECHNOLOGY INFORMATION
AD7705_最好的中文资料
CS
择,或在与 AD7705/7706 通信时,CS可用作帧同步信号 复位输入。低电平有效的输入,将器件的控制逻辑、接口逻辑、校准系 5 RESET 数、数字滤波器和模拟调制器复位至上电状态 对于 AD7705,差分模拟输入通道 2 的正输入端。对于 AD7706,模拟输入 6 AIN2(+)[AIN1] 通道 1 的输入端 对于 AD7705,差分模拟输入通道 1 的正输入端;对于 AD7706,模拟输入 7 AIN1(+)[AIN2] 通道 2 的输入端 对于 AD7705,差分模拟输入通道 1 的负输入端;对于 AD7706,COMMON 输 8 AIN1(-)[COMMON] 入端,模拟通道 1、2、3 的输入以此输入端为基准 基准输入端。AD7705/7706 差分基准输入的正输入端。基准输入是差分 9 REFIN(+) 的,并规定 REFIN(+)必须大于 REFIN(-)。REFIN(+)可以取 VDD 和 GND 之 间的任何值 基准输入端。AD7705/7706 差分基准输入的负输入端。REFIN(-)可以取 10 REFIN(-) VDD 和 GND 之间的任何值,且满足 REFIN(+)大于 REFIN(-) 对于 AD7705,差分模拟输入通道 2 的负输入端。对于 AD7706,模拟输入 11 AIN2(-)[AIN3] 通道 3 输入端 逻辑输出。这个输出端上的逻辑低电平表示可从 AD7705/7706 的数据寄存 器获取新的输出字。完成对一个完全的输出字的读操作后, DRDY引脚立即 回到高电平。如果在两次输出更新之间,不发生数据读出, DRDY将在下一 12
———— ————
————
13
DOUT
14 15 16
AD7705的操作
AD7705的操作
AD7705是由Analog Devices公司推出的一款基于模拟/数字混合技
术的通用称重接口单元,其将模拟信号转换成数字信号,便于数字系统进
行处理,可以将传感器集成到数字系统中,实现多功能的称重系统。
AD7705有两种型号:AD7705-1和AD7705-2,其中,AD7705-1具有单
路输入,4种模拟量输入类型(电阻、电容、电压、电流),可定义的模
式和参考电压,2倍长量程和可编程滤波器,而AD7705-2则具有双路输入,其他参数相同。
采用的控制和数据通信接口包括UART,SPI,I2C和PWM/INTEGER。
一、精度高:以电流输入(TARA补偿)为例,其满量程误差最小可
达0.08%(最大满量程100克),实测偏差不大于0.2%,所以可以用于
仪表和计量定量计量应用。
二、模式多样性:AD7705可定制4种模式,分别是SCALE,
SCALE&HOLD,CONTINUOUS,CONTINUOUS&HOLD,可根据仪器的不同应用来
设置合适的模式,以提高AD7705的灵活性。
三、可编程参数:AD7705可编程参数,包括量程、模式,参考电压,滤波器等参数,可以根据实际应用需要,编程满足应用需求。
四、安全功能:AD7705具有3种安全功能,可以有效保护被测设备
的安全,它们分别是超载保护,超电压保护和超电容保护。
十六位模数转换器AD7705及其应用
图3
气象探测仪电路图
2. 3
软件设计 使用 AD7705 之前, 首先要对所有寄存器进行设置 , 才能保证器件正常工作。在实际使用中, 首先选择模拟
输入模式 ( 单极性还是双极性 ) 、 是否需要缓冲、 时钟分频和输出更新速率 ; 根据外部输入信号的幅度来决定设置 器件的增益值, 本实例里通道 1 和通道 2 输入信号都是单极性, 但幅度不同, 所以循环选择通道 , 选择相应参数, 应用中选择输入通道单极性、 初始增益等于 8、 数据更新速率为 250Hz。根据实际确定所有参数以后, 对 AD7705 芯片进行设置, 参数设置方法比较独特 , 在设置参数之前, 首先对通信寄存器进行一次写操作 , 来决定下一个是什 么样的寄存器和什么样的操作内容 , 再进行下一步的参数写入, 读者可参考下面的 AD7705 初始化程序 InitADC( )。 模拟输入电路前端加入了一个简单的 R、 C 滤波器 , 会在输入电压中引起增益误差, 必须对器件进行校准 , 因 为每次系统校准可以对系统的增益、 偏移误差、 以及器件本身的内部误差进行补偿, 所以参数设置完毕以后, 应该 对器件进行一次系统校准 , 写入设置寄存器位 MD1 和 MD0 分别为 0 和 1 完成系统自校准 , 自校准后自动返回正 常模数转换工作模式。实际中各路输入信号幅度往往不完全相同 , 因此每转换一路就需要一次参数设置和系统 校准。还需注意的是 , 在非缓冲模式下使用时 , 系统校准还可以消除模拟输入端由电源阻抗引起的任何误差。 下面是用 C51 语言编写的初始化程序:
数据寄存器 : 这是一个十六位只读寄存器 , 它包含了最新的转换结果。 测试寄存器 : 用于测试期间器件, 用户一般不用。 零标度校准寄存器和满标度校准寄存器 : 都是 24 位, 用户一般不用。
AD7705驱动程序函数
AD7705驱动程序函数///////////////AD7705驱动函数////////////////////PC5--SCLK//PC6--DIN//PC7--DOUT//AN1+ AN1-单极性输入、增益1、带缓冲、滤波同步//外接晶振、2分频、标准时钟、频率20HZ//////////////////AD7705端口定义/////////////_Bool SCLK @PC_ODR:5; // 定义PC5为SCLK-对应AD7705 SCLK_Bool DOUT @PC_ODR:6; // 定义PC6为DOUT-对应AD7705 DIN_Bool DIN @PC_IDR:7; // 定义PC7为DIN-对应AD7705 DOUT _Bool LED @PB_ODR:5; // 定义PB5连接LED///////////////////延时程序///////////////////void delay(unsigned int ms){unsigned char i;while(ms!=0){for(i=0;i<250;i++);for(i=0;i<75;i++);ms--;}}//////////////////向AD7705写入一个字节///////////////// void WriteByte7705(unsigned char dat){unsigned char i;//SCLK = 1;for (i=0; i<8; i++){SCLK=0;DOUT =dat & 0x80;SCLK=1;dat <<=1;}DOUT =1;//必不可少的。
}//////////////////从AD7705读一个char/////////////// unsigned char Readchar7705(void){unsigned char i,regist=0;SCLK = 1 ;for (i=0; i<8; i++){SCLK=0;regist<<=1;if(DIN) regist|=0x01;SCLK=1;}return regist;}//////////////从AD7705读AD数据寄存器/////////////// unsigned int ReadWord7705(void){unsigned char i;unsigned int ad_data=0 ;while(Readchar7705()&0x80) WriteByte7705(0x08);//等待ad7705转换完毕WriteByte7705(0x38); //下次读数据寄存器//delay(5);SCLK = 1 ;for(i=0;i<16;i++){SCLK=0;if(DIN) ad_data|=0x01;ad_data<<=1;SCLK=1;}return ad_data;}////////////// AD7705通信端口复位///////////////////// void Reset7705(void){unsigned char i;for(i=0;i<35;i++) /* 多于连续32个 DIN=1 使串口复位 */ {SCLK =0;DOUT =1;SCLK =1;}DOUT =1;delay(2);}/////////////////////自校准/////////////////////void self_corr7705(void){WriteByte7705(0x10); //写设置寄存器WriteByte7705(0x46); // 自校准while(Readchar7705()&0x80) WriteByte7705(0x08);//等待自校准完毕}////////////////////AD7705初始//////////////////void init7705(void){Reset7705();//复位WriteByte7705(0x20); //写时钟寄存器WriteByte7705(0x08); //外接晶振、2分频、标准时钟、频率20HZWriteByte7705(0x10); //写设置寄存器//WriteByte7705(0x04); //正常模式、增益1、单极性、无缓冲、滤波同步WriteByte7705(0x06); //正常模式、增益1、单极性、带缓冲、滤波同步}/*WriteByte7705(0x18); // 读设置寄存器delay(2);uart1_sendchar(Readchar7705());WriteByte7705(0x28);//读时钟寄存器delay(2);uart1_sendchar(Readchar7705());//WriteByte7705(0x08); //读通信寄存器//delay(2);//uart1_sendchar(Readchar7705());//WriteByte7705(0x10); //写设置寄存器//WriteByte7705(0x86); // 零校准// delay(1000);//WriteByte7705(0x10); //写设置寄存器//WriteByte7705(0xc6); // 满度校准// delay(1000);*/。
AD7705程序
6.电压输入范围:对于非缓冲模式,模拟输入信号范围是【GND-30mV】至【VDD+30mV】之间。对于缓冲模式,模拟输入信号范围是【GND+50mV】至【VDD-1.5V】之间。
7.非缓冲模式、单极性、增益为GAIN:此时AD7705的反相输入端VIN-的范围是【GND-30mV】至【VDD+30mV-VREF/GAIN】之间,其中VREF为AD7705的参考电压。正相输入端VIN+的范围是【V-】至【V-+VREF/GAIN】。如右图,即V+和V-都必须大于GND小于VDD,同时还要考虑单极性的输入范围,即V-还必须小于VDD+30mV-VREF/GAIN,才不至于模拟输入为V+max=【V-+VREF/GAIN】时大于VDD+30mV。
//AD复位
// AD_POUT &= ~AD_RESET; //AD_RESET为低电平,AD开始复位
// AD_POUT |= AD_RESET; //AD_RESET为低电平,AD结束复位
//shiyanxia
for(i=0;i<35;i++)
{
AD_POUT&=~AD_SCLK;
Delay(2);
#define AD_POUT P2OUT //定义AD7705数据/控制口输出寄存器
模拟SPI通信ad7705单片机源代码
模拟SPI通信ad7705单片机源代码ad7705 数据采集处理源代码void Press_Init(void) //ad7705初始化测压channel 00{SpiCS_0;//使能AD7705,低有效Delay(50);rset_0;Delay(150);rset_1;MSP430_WriteSPI0(0x20); // 写0x21通信寄存器,测温channel 01 ,下一个写设置寄存器MSP430_WriteSPI0(0x04); // 写0xc0时钟寄存器内部频率50HZ MSP430_WriteSPI0(0x10); // 写0x11通信寄存器,测温channel 01 ,下一个写时钟寄存器MSP430_WriteSPI0(0x40); // 写0x46设置寄存器,设置成单极性、无缓冲、增益为1、滤波器工作、自校准}void MSP430_WriteSPI0(char a) //向AD7705写入一个字节的函数{char j,temp=0x80;for (j=0; j<8; j++){SpiCL_0;if (temp & a){SpiDo_1;}else{SpiDo_0;}SpiCL_1;temp = temp>>1;}}int Read7705(void){unsigned char i; unsigned char TempBit = 0; int TempData = 0;SpiCL_0;spiDIR_IN;for (i=0; i<16; i++){SpiCL_1;if (SpiDA_IN == 0x01 ) {TempBit = 1;}else{TempBit = 0;}SpiCL_0;TempData = (T empData << 1) | TempBit;}spiDIR_OUT;SpiDi_1;return TempData;}int get_ad7705(char channel) //读温度channel=0x01或差压数据 channel=0x00{if(channel==0x00){MSP430_WriteSPI0(0x38);//写通信寄存器设置读当前通道数据0x38|channel=0x00}else{MSP430_WriteSPI0(0x39);//0x38|channel=0x01//8785413}while (DRDY==1);//DRDY为高不能进行读操作kb[30] = Read7705();//RXBUF0if(kb[30]<0)kb[30]=kb[30]+32768;elsekb[30]=kb[30]-32767;return(kb[30]); //接收到的数据为AD16bit}int adave(char n,char channel) //求n次A/D转换的平均值{volatile char i,pit;for(ue=0;ue<n;ue++){ADC_temp[ue]=get_ad7705(channel); //读走温度数据}ADC_tem=0;for(pit=4;pit<n;pit++){ADC_tem+=ADC_temp[pit]; //求和}max=ADC_temp[4];min=ADC_temp[4];for(i=4;i<n;i++){if(ADC_temp[i]>max)max=ADC_temp[i];if(ADC_temp[i]<min)min=ADC_temp[i];}ADC_tem=(ADC_tem-max-min)/(n-6);//去掉最大最小值然后求平均值return ADC_tem;}</min)</n;i++) </n;pit++) </n;ue++)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void reset_tm7705(void);
void init_led()
{
DDRC = 0XFF; //1111 1111 1时输出,0时输入
PORTC = 0;
DDRB |= 0X07; //0000 0111
PORTB = 0;
#define LED_2 PORTB|=0X07,PORTB&=0XF9 //译码器的输入脚,001选择第二位数码管。
#define LED_3 PORTB|=0X07,PORTB&=0XFA //同上类推
#define LED_4 PORTB|=0X07,PORTB&=0XFB
// write_tm7705_byte( 0xc0 ); //满标度系统校准 1100 0100
_delay_ms(2);
}
int main(void)
{
init_led();
init_tm7705();
while(1)
{
read_tm7705_word();
ch2_dat[1] = data1 / 10000;
ch2_dat[2] = data1 % 10000 / 1000;
ch2_dat[3] = data1 % 10000 % 1000 / 100;
ch2_dat[4] = data1 % 10000 % 1000 % 100 / 10;
SCLK_H;asm("nop");asm("nop");asm("nop");
}
//CLOCK寄存器设置
while(DRDY);
write_tm7705_byte( 0x21 ); //下次设置时钟寄存器,通道2 0010 0001
write_tm7705_byte( 0x0b); //2分频,200Hz输出更新速率 0000 1011
{
if ( adc_dat[q]>adc_dat[q+1] ) //从大到小排列
{
temp = adc_dat[q];
adc_dat[q] = adc_dat[q+1];
adc_dat[q+1] = temp;
}
}
}
//写设置寄存器
while(DRDY);
write_tm7705_byte( 0x11 ); //通道2正常模式下次写入设置寄存器 0001 0001
write_tm7705_byte( 0x40 ); //增益1,双极性,不带缓冲,自校准 0100 0010
// while(DRDY);
{
SCLK_H;
for(unsigned char i=0; i<8; i++)
{
if(data & 0x80)
DIN_H;
else
DIN_L;
SCLK_L;_delay_us(100);
SCLK_H;_delay_us(10);
data <<= 1;
unsigned int adc_dat[5] = {0,0,0,0,0};
for(j=0;j<5;j++)
{
write_tm7705_byte( 0x21 );
write_tm7705_byte( 0x0b);
write_tm7705_byte( 0x11 );
//#define CS_H PORTA |= 0X20 //单片机输出数据信号 PA5 0010 0000
//#define CS_L PORTA &= 0XDF // PA5 1101 1111
#define DOUT PINA & 0X04 // PA2 0000 0100
DDRA &= 0XF9; //1111 1001
RESET_H;
RESET_L;
_delay_ms(2);
RESET_H;
unsigned char i;
for( i=0; i<36; i++ )
{
SCLK_L;asm("nop");asm("nop");asm("nop");
unsigned char ch2_dat[6] = {0,0,0,0,0,0};
void init_led();
void show_led(unsigned char wei,unsigned char dat);
void read_tm7705_byte(void);
void write_tm7705_byte(unsigned char data);
break;
case 4:
LED_4;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
break;
case 5:
LED_5;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
#define DIN_L PORTA &= 0XF7 // PA3 1111 0111
#define RESET_H PORTA |= 0X10 //单片机输出数据信号 PA4 0001 0000
#define RESET_L PORTA &= 0XEF // PA4 1110 1111
data0 = adc_dat[2];
temp1 = data0;
if(temp1 > 32768) { adc = 2.491 - 2.491*data0/65536;ch2_dat[0] = 1;}
else adc = 2.491*data0/65536;
data1 = (int)(adc * 10000);
#define DRDY !(PINA & 0X02) // PA1 0000 0010
const prog_uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40};//共阴数码管段值表 0-9,.,-
}
DIN_H;
}
void read_tm7705_word(void)
{
unsigned int data0 = 0 ,data1 = 0 ,temp = 0 ,temp1 = 0;
unsigned char i,j,p,q;
float adc = 0;
break;
case 6:
LED_6;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
break;
case 7:
LED_7;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
#define LED_5 PORTB|=0X07,PORTB&=0XFC
#define LED_6 PORTB|=0X07,PORTB&=0XFD
#define LED_7 PORTB|=0X07,PORTB&=0XFE
#define LED_8 PORTB|=0X07
//sclk PA0输出 drdy PA1输入 dout PA2输入 din PA3输出 reset PA4输出 cs PA5输出
//写设置寄存器
// write_tm7705_byte( 0x11 ); //通道2正常模式, 0000 0001
// write_tm7705_byte( 0x84 ); //零标度系统校准 1000 0100
// while(DRDY);
//写设置寄存器
// write_tm7705_byte( 0x11 ); //通道2正常模式, 0000 0011
break;
case 2:
LED_2;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
break;
case 3:
LED_3;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
show_led(7,ch2_dat[4]);
show_led(8,ch2_dat[5]);
break;
case 8:
LED_8;
PORTC = pgm_read_byte(table+dat);_delay_ms(i);
break;
default: PORTC = 0;
}
}
void write_tm7705_byte(unsigned char data)
SCLK_H; _delay_us(10);
if(DOUT) data0 ++;
data0 <<= 1;
}
DIN_H;
adc_dat[j+1] = data0;
}
for (p=0;p<4;p++)
{
for (q=0;q<4-p;q++)
#include <avr/io.h>
#include <avr/pgmspace.h>