mega16使用spi接口读取AD7705
Atmega162串行外设接口SPI
Atmega162串行外设接口SPI一、Atmega162 的SPI 接口基本概念与工作原理SPI 接口的全称是”Serial Peripheral Interface”,意为串行外围接口。
SPI 主要使用4 个信号:MOSI(master in slave out)、MISO(master out slave in)、SCK(串行时钟)、CS(片选)。
其中SCK 由主机产生,作为传输的同步时钟,控制所有的数据传输。
主机和外设都包含一个串行移位寄存器。
主机通过向自己的SPI 串行寄存器写入一个字节来发起一次传输,然后通过MOSI 信号线将数据传给外围设备,同时外设将自己移位寄存器中的内容通过MISO 信号线返给主机。
这样两个移位寄存器中的内容完成交换。
也就是说,外设的写操作和读操作是同步完成的。
在实际应用中,如果只进行写操作,则主机只需忽略收到的字节即可;如果主机要读外设的数据,必须发送一个自己来引发从机的传输,发送的这个字节可以是任意数据。
二、SN74HC166 与TPIC6A595SN74HC166 是8-BIT 并行加载移位寄存器。
A~H 为并行输入管脚,SER 串行输入管脚,QH 为输出管脚,SH/LD 管脚用于设置并行加载和移位模式,CLK 为同步时钟,控制数据传输。
TPIC6A595 是8-BIT 移位寄存器。
SER IN 管脚串行输入数据, SER OUT 管脚并行输出数据, SRCK 为串行移位的脉冲, RCK 的上升沿将使数据并行输出到DRAIN0~DRAIN7。
在电路中使用了4 片74HC166 的级联,采集32 个IO 点,使用3 片595 控制24 个输出端口。
电路如下图所示74H166 数据采集595 数据并行输出电路中SCK,OEN,IEN 分别接Atmega162 的SPI 接口。
三、SPI 接口和外设之间的数据传输使用Atemga162 的SPI 接口传输数据,只。
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 */}。
ATMEGA16端口SPI扩展例子及源代码(HC595,驱动四位数码管)
A TMEGA16端口扩展例子及源代码青岛科技大学树立学院王泽华说明:1、数码管为共阳极。
2、HC595两片,第一片锁存段码,第二片锁存位码。
3、外部晶振8MHz该图可放大观看,例如拷贝到剪切板,然后复制到画图软件中。
这样比较清楚4、PROTEUL下溶思位的选择如下图所示。
源代码如下:可直接拷贝编译运行。
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */#define F_CPU 8000000UL/* 定义SPI端口数据方向寄存器*/#define DD_SS 4#define DD_MOSI 5#define DD_MISO 6#define DD_SCK 7/* 定义SPI端口数据寄存器*/#define DR_SS 4#include <avr/io.h>#include <util/delay.h>/* 共阳极段码*/const unsigned char SEG_CODE[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}; /* 位码*/const unsigned char BIT_CODE[]={0x80,0x40,0x20,0x10};/* SPI端口初始化*/void SPI_master_init(){/* 定义SPI主机,SS线,MOSI线,SCK线为输出*/DDRB = (1<<DD_SS) | (1<<DD_MOSI) | (1<<DD_SCK);/* 打开SPI端口,设本机为SPI主机,SCK=FOSC/16 */SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);/* SPI工作于MODE4 */SPCR |= (1<<CPOL) | (1<<CPHA);}/* 传输,特别用于只发不收,例如2片HC595控制数码管显示,每次传输两字节,第一字节为位码,第二字节为段码*/void SPI_master_send(char *pData, int iDataLen){int i;char temp;/* 拉低SS引脚,告之从机,开始数据传输*/PORTB &= ~( 1<<DR_SS );/* 发送数据*/for( i=0; i<iDataLen; i++){SPDR = pData[i];/* 等待发送完成*/while( !( SPSR & (1<<SPIF) ) );/* 清标志寄存器SPIF WCOL */temp = SPSR;temp = SPDR;}/* 拉高SS引脚,完成一次通讯,对HC595,拉高后595将移位寄存器数据锁存入数据寄存器*/PORTB |= ( 1<<DR_SS );}int main(){unsigned char i;char cData[2];/* SPI端口初始化*/SPI_master_init();while(1){for(i=0; i<4; i++){/* 先关闭数码管,消隐*/cData[0] = BIT_CODE[i];cData[1] = 0xFF;SPI_master_send(cData,2);/* 发送显示的数据*/cData[0] = BIT_CODE[i];cData[1] = SEG_CODE[i];SPI_master_send(cData,2);_delay_ms(4);}}}。
SPI接口技术
其他控制寄存器
设置寄存器:是一个8位读写寄存器。用于设置工作模式、校准方式、 增益等等。其中MD1、MD0为工作模式选择器,当MD1MD0=00时, 设置寄存器进入正常工作模式,转换器开始进行正常的AD转换。 时钟寄存器:是一个8位读写寄存器,其中CLK为时钟位。用于设置 有关AD7705运行频率参数和A/D转换输出更新速率。 数据寄存器:是一个16位只读寄存器,用来存放AD7705的最新转换 结果。 其他的寄存器分别是测试寄存器、零标度校准寄存器、 满标度校准寄 存器等,用于测试和存放校准数据,可用来分析噪声和转换误差。
TMS320F2812串行外设接口 TMS320F2812串行外设接口 Serial Peripheral Interface
(SPI)
16位AD转换芯片AD7705 16位AD转换芯片AD7705
AD7705是十六位分辨率的A/D转换器,2 通了Σ- △转换技术实现了16 位无G失代码性能,三线数字 接口,可以通过串行输入接口由软件配置芯片的增益值、 输入信号极性和数据更新速率,非常灵活方便。具有自校 准和系统校准功能,能够消除器件本身和系统的增益以及 偏移误差,是用于开发智能系统、微控制器系统和基于 DSP 系统的理想产品。
void main(void) { AD_RST=0; delay1(); AD_RST=1; writeword(0x20);//发送写命令序列 clock register writeword(0x0f);//设置更新频率 writeword(0x10);//set up register writeword(0x40);// while(1) { data = readdata(); data_out = (int)1000*3.0*(data-32768.0)/32768.0; } }
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(); }}。
关于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与PIC16F73的接口配置
BCF TR ISC, 3
配置 SP I时钟空闲状态:
BSF STATU S, RP0 CLRF SSPCON BSF SSPCON, CKP
配置 SP I时钟下降沿发数据:
BSF STATU S, RP0 CLRF SSPSTAT BSF SSPSTAT, CK E
配置 SP I为 64分频 [ 1-2]
ZHU Tao ( T a izhou Co llege, T aizhou 317000, Ch ina)
Abstract: T he AD7705 /AD7706 are com plete ana log front ends for low frequency m easurem ent applicat ions w ith tw o- / three-channels. T hey em ploy a sigm a-de lta conversion techn ique to rea lize 16 b its of codes conversion. The gain, signa l po lar ity and update rate can be programm ed in softw are. W ith a SP I serial interface, they are idea l for use in sm ar,t m icro- controller or DSP-based system s. The structure and princ ip le o f AD7705 /7706 are introduced and the interface c ircu it and program betw een AD and P IC16F73 are preson ted.
模拟SPI通信ad7705单片机源代码
MSP430_WriteSPI0(0x10); // 写0x11通信寄存器,测温channel 01 ,下一个写时钟寄存器
MSP430_WriteSPI0(0x40); // 写0x46设置寄存器,设置成单极性、无缓冲、增益为1、滤波器工作、自校准
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)
TempData = (TempData << 1) | TempBit;
}
spiDIR_OUT;
SpiDi_1;
return TempData;
}
int get_ad7705(char channel) //读温度channel=0x01或差压数据 channel=0x00
else
{
SpiDo_0;
}
SpiCL_1;
temp = temp>>1;
}
d)
{
unsigned char i;
unsigned char TempBit = 0;
int TempData = 0;
}
while (DRDY==1);//DRDY为高不能进行读操作
kb[30] = Read7705();//RXBUF0
AD7705应用经验总结
AD7705应用经验总结这些经验同样适用于AD7799、AD7706等AD公司的拥有校准功能的AD芯片。
1.时序注意要点:数字接口迷失的时候可以通过ADIN输入持续32个脉冲周期(DCLK)以上的高电平将复位AD7705的数字接口,复位之后要等待500us以上才能访问AD7705芯片,这种复位方式不会影响AD7705内部的任何寄存器,所有的寄存器将保持复位之前的内容,但所有的寄存器在数字接口迷失的状态下内容是不确定的,因此强烈建议在复位之后重新设置AD7705内部所有的寄存器,防止错误。
而芯片管脚RESET的复位将使片内所有的寄存器恢复到上电的默认值。
时钟输入信号DCLK 是一种施密特出发信号,能够适应光耦合器的慢速边沿,其他数字输入信号的上升和下降时间不应超过1us。
2.AD7705时钟大于2M时,时钟设置寄存器的CLK位应置1,小于2M时应置0。
DCLK 的脉冲宽度要满足最小的脉宽要求。
在时钟DCLK下降之后的低电平期间读取数据ADOUT。
在时钟DCLK的低电平期间设置要写入数据ADIN,然后在DCLK的上升沿写入到7705。
写入数据以及读取数据的时钟DCLK的数目要与(被写入或被读取的寄存器)的位数长度一致,多于或少于(寄存器位长度)的时钟DCLK数目都将导致操作错误。
在两次写操作之间,ADIN应最好保持在高电平:因为任何(读或写)操作都必须从写通信寄存器开始,而且写入通信寄存器的8个位中的第1位必须为0,后续的位才能被写入到通信寄存器。
所以当ADIN为0的时候,万一时钟DCLK受到干扰导致0写入通信寄存器,AD7705会误认为是写通信寄存器的操作开始而等待后续的7位位串,发生这种干扰之后会导致AD7705的数字接口迷失,从而导致内部寄存器的内容也许会变得未知状态。
此外,时钟信号DCLK在两次操作AD7705之间要保持高电平。
即:在不访问AD7705的空闲时刻,或者两次操作之间的空闲时刻,ADIN、DCLK都最好保持高电平为最可靠。
AD7705/AD7706与PIC16F73的接口配置
关 键词 : AA D转换 器 ;I 片机 ; 口 ∑一 / PC单 接
AI ( N2- ) R - EFi ) n(
R EFI + N()
件编程直接测量传感器输出的各种微小信号 , 具有分 辨率高 、 动态范围广 、 白校准等特点 , 非常适 合工业控 制、 仪表测量领域。A 7 0 D 75具有两个差分输入通道 , A 7 0 有 3个准 差 分 输 入 通 道 。随 着 数 据 采 集精 D 7 6具 的应用设计很少见 , 尤其是其在嵌人式系统设计 中得
于输出反 相 时钟 信 号, 时钟 输 出 可编 程 来关 闭 ; 该 SL C K为串行时钟输入端 , 与串行数据输入端/ 出端 输 (I D U ) D N/ O T 一起完成 内部 寄存器配置输入 和转换 结 果输 出 。
收穗 耳期 : 0 5 1-9 修 回 日期 : 05 1-6 2 0 -00 ; 2 0 -22 。
・
51 ・
维普资讯
・
计算机与 自动化技术 ・
B ' C. CF 1l S 5 B F T I C. S RS 4 B ' C. CF 1 S 3 l
电 子 工 皇 矗
B I CF P R1. S I S PF
放大电路。当电源 电压为 5V 参考 电压为 2 5V时, , . A 70 D 75可接 受 0~+2 V和 0~ + . 0m 2 5V范 围 内的 单极性信号及 0~± 0m 2 V和 0~± . 2 5V双极性信
Atmega16的SPI双机通信例程
之前做双机通信的时候,可是把我给弄惨了,怎么做都不行,从机接到的数据一至是零。
在网上搜例程,然后copy到自己的程序里,居然运行结果还是一样。
可谓一个纠结啊。
结果还是自己给弄出来了。
下面就是我的程序和电路接口。
、电路接口(Protues仿真)Pb4-pb7全部对接即可,那一个断码管是接在pc口上,如图。
PS:在PC端口和断码管之间需接200Ω电阻,为了简便,这里不接。
其中左边的为主机,右边的为从机。
本程序采用AVR Studio 4编写;主机程序:#include <avr/io.h>#define DD_SS 4 //SS引脚#define DD_MOSI 5 //MOSI引脚#define DD_SCK 7 //SCK引脚void SPI_MasterInit( ) //主机初始化{DDRB=(1<<DD_SS)|(1<<DD_MOSI)|(1<<DD_SCK); //设置SS、MOSI、SCK引//脚为输出SPCR=(1<<SPE)|(1<<SPR0)|(1<<MSTR); //使能SPI、频率为fosc/16、设置为//主机}unsigned char SPI_MasterTransmit(char data) //数据发送{SPDR=data;while(!(SPSR&(1<<SPIF))); //等待发送完成return SPDR;}main(){unsigned char data;unsigned char i=0x99; //需要发送的数据。
自己任意修改SPI_MasterInit( );data=SPI_MasterTransmit(i);}从机程序:#include <avr/io.h>#define DD_MISO 6void SPI_SlaveInit(void) //从机初始化{DDRB=(1<<DD_MISO); //设置MISO为输出SPCR=(1<<SPE); //使能SPI}char SPI_SlaveReceive(void) //从机接收数据{while(!(SPSR&(1<<SPIF))); //等待接收完成return SPDR; //返回接收的数据}main(){DDRC=0xff; //设置PC口为输出SPI_SlaveInit();PORTC=SPI_SlaveReceive(); //点亮断码管}仿真结果:测试完成。
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 位, 用户一般不用。
mega16使用spi接口读取AD7705
mega16使用spi接口读取AD7705mega16使用spi接口读取AD7705,两个通道轮流读取标签:mega16 spi接口 AD7705 2007-03-28 10:05 阅读(597)评论(3)编辑删除两个通道依次读取,注意写通讯寄存器的数值,#include#include#define uchar unsigned char#define uint unsigned int#define Add_key PINC#define CS_1 (PORTB|= (1<<4 ))#define CS_0 (PORTB&= ~(1<<4 ))#define LED_1 (PORTB|= (1<<0 ))#define LED_0 (PORTB&= ~(1<<0 ))#define LED1_1 (PORTB|= (1<<1 ))#define LED1_0 (PORTB&= ~(1<<1 ))#define DRDY (PINB& 0x08)#define ADDR (PINC& 0x01)#define SPE_1 (SPCR|= (1<<6 ))uint value,value1,value2;uchar ch_flag=0;//**********************短延时程序50us**************************//void delay50us(uint t){uint j;for(;t>0;t--)for(j=0;j<70;j++);}//**********************短延时程序5us**************************//void delay5us(uint t){uint j;for(;t>0;t--)for(j=0;j<7;j++);}//**********************长延时程序50ms**************************//void delay50ms(uint t){uint i;for(;t>0;t--)for(i=0;i<52642;i++);}//**************************端口初始化*************************//void IO_Init(void){DDRC=0x00;PORTC=0x00;DDRB=0b10110111; //PB3\PB6输入PORTB=0b11110111; //MISO输入加上拉电阻}void spi_init(void){SPCR = 0b01011111; //使能SPI,MSB先发送,主机,SCK空闲高,模式三,128分频SPSR = 0x00; //setup SPI,主机倍频//CS_0; //使能SPI器件}//******************SPI写寄存器函数8BIT*******************************//void WriteToReg_ADC(uchar byteword){CS_0; //使能SPI器件//SPE_1;SPDR=byteword; //发送数据while(!(SPSR & (1<CS_1; //禁止SPI器件// delay5us(10);}//******************SPI读函数8BIT*******************************//unsigned char Read_Byte_SPI(void){SPDR = 0xff; //发送数据,给AD7705提供脉冲while (!(SPSR &(1<return SPDR;}//******************SPI读数据寄存器函数16BIT****************************//uint Read_ADC16BitValue(void){uchar temp1=0;uint temp=0;CS_0; //使能SPI器件temp=Read_Byte_SPI();temp=temp<<8;temp1=Read_Byte_SPI();temp=temp|temp1;CS_1; //禁止SPI器件return temp;}//******************绿灯闪烁******************************// void greenled(void){LED_0;delay50us(50);LED_1;delay50us(50);LED_0;delay50us(50);LED_1;delay50us(50);}//******************绿灯闪烁******************************// void yellowled(void){LED1_0;delay50us(50);LED1_1;delay50us(50);LED1_0;delay50us(50);LED1_1;delay50us(50);}//**************************AD初始化*************************//void ADC_Init(void){uchar i;for(i=10;i>0;i--){WriteT oReg_ADC(0xff);} //持续DIN高电平写操作,恢复AD7705接口WriteToReg_ADC(0x20); //通道1,下一个写时钟寄存器WriteToReg_ADC(0x0a); //写时钟寄存器设置更新速率为200hz WriteToReg_ADC(0x10); //通道1,下一个写设置寄存器WriteToReg_ADC(0x40); //自校准,增益1,双极,缓冲delay50us(100); //延时WriteToReg_ADC(0x21); //通道2,下一个写时钟寄存器WriteToReg_ADC(0x0a); //写时钟寄存器设置更新速率为200hz WriteToReg_ADC(0x11); //通道2,下一个写设置寄存器WriteToReg_ADC(0x40); //自校准,增益1,双极,缓冲delay50us(100);}//***************************按照通道1读取****************************//void Read_ch1(void){uint temp1=0;{temp1=Read_ADC16BitValue();//读取LED_1; //进入AD,指示等灭yellowled(); //黄灯闪烁}greenled(); //绿灯闪烁value1=temp1;WriteToReg_ADC(0x39);// 下一操作为读数据寄存器2}//***************************按照通道2读取****************************//void Read_ch2(void){uint temp2=0;if(DRDY==0) //数据准备好{temp2=Read_ADC16BitValue();//读取LED_1; //进入AD,指示等灭yellowled(); //黄灯闪烁}greenled(); //绿灯闪烁value2=temp2;WriteToReg_ADC(0x38); //下一操作为读数据寄存器1}//********************获取两个通道模拟量数值***************// void get_ad(void){{ch_flag++;if(ch_flag==0x03){ch_flag=0x00;}if(ch_flag==0x01){ Read_ch1();}if(ch_flag==0x02){ Read_ch2();}}}//***********************主程序*********************************//void main(void){delay50us(100); //延时等待外围器件稳定IO_Init();spi_init();ADC_Init();while(1){get_ad();greenled(); greenled(); greenled(); //绿灯闪烁}}。
AD7705中文资料
参数 静态特性 无丢失代码 输出噪声 积分非线性 2 单极性偏移误差 单极性失调漂移 4 双极性零误差 双极性零漂移 4
正满标度误差 5 满标度漂移 4.6 增益误差 7 增益漂移 4,8 双极性负满标度误差 2 双极负满标度漂移 4
模拟输入/基准输入 输入共模抑制(CMR)2 VDD=5V
增益 1 增益=21 增益=41 增益=8→128 VDD=3V 增益=11 增益=21 增益=41 增益=8→128 Normal-Mode50Hz 抑制 2 Normal-Mode60Hz 抑制 2 共模 50Hz 抑制 2 共模 60Hz 抑制 2 绝对/共模 REFIN 电压 2 绝对/共模 AIN 电压 2,9
绝对/共模 AIN 电压 2,9
AIN DC 输入电流 2 AIN 采样电容 2 AIN 差分电压范围 10
AIN 输入采样率,fs
基准电压输入范围 REFIN(+)-REFIN(-)电压
B级1
单位
16 见表 I 和 III ±0.003 见注 3 0.5 见注 3 0.5 0.1 见注 3 0.5 见注 3 0.5 ±0.003 1 0.6
封装选项 N-16 R-16 RU-16
PlasticDIP SOIC TSSOP
N-16 R-16 RU-16
2.1 极限参数
(TA=+25℃,除非另有说明) VDD 对 GND 模拟输入电压对 GND 基准输入电压对 GND 数字输入电压对 GND 数字输出电压对 GND 工作温度范围(商业级,B) 储存温度范围 结温 功耗(塑料 DIP 封装) θJA 热阻 引脚温度(焊接,10 秒) 功耗(塑料 SOIC 封装) θJA 热阻 引脚温度(焊接) 汽相(60 秒) 红外线(15 秒) 功耗(SSOP 封装) θJA 热阻 引脚温度(焊接) 汽相(60 秒) 红外线(15 秒) 抗 ESD
AD7705和AD7706
AD7705和AD7706AD7705和AD7706均为完整16位、低成本、Σ-Δ型ADC,适合直流和低频交流测量应⽤。
其具有低功耗(3 V时最⼤值为1 mW)特性,因⽽可⽤于环路供电、电池供电或本地供电的应⽤中。
⽚内可编程增益放⼤器提供从1⾄128的增益设置,⽆需使⽤外部信号调理硬件便可接受低电平和⾼电平模拟输⼊。
AD7705拥有两个差分通道,⽽AD7706则拥有⼀个差分通道和两个伪差分通道。
在定制⽐率应⽤器件时,差分基准电压输⼊还能提供极⼤的灵活性。
最近浏览过ADI公司的产品特点和优势两个全差分输⼊通道ADC可编程增益前端增益范围从1⾄128三线串⾏接⼝SPI?, QSPI?, MICROWIRE?, DSP 兼容SCLK上可接受施密特触发器输⼊提供模拟输⼊缓冲⼯作电压:2.7 V⾄3.3 V或4.75 V⾄5.25 V功耗:最⼤1 mW(3 V)待机电流:最⼤8 µA16引脚DIP、16引脚SOIC和TSSOP封装AD7706特点和优势3个伪差分输⼊通道ADC- 16位⽆失码- 0.003%⾮线性度可编程增益前端- 增益范围:1⾄128提供模拟输⼊缓冲⼯作电压:2.7 V⾄3.3 V或4.75 V⾄5.25 V三线式串⾏接⼝- SPI?, QSPI?, MICROWIRE?, DSP 兼容- SCLK上可接受施密特触发器输⼊功耗:1 mW(最⼤值、3 V)待机电流:最⼤8 µA16引脚DIP、16引脚SOIC和TSSOP封装AD7705 功能框图典型的应⽤程序及其他框图AD7705 型号选项产品型号封装报价*(100-499)报价* 1000 pcsAD7705BN产品状态: 量产16 ld PDIP $ 5.85 $ 4.96 AD7705BNZ产品状态: 量产16 ld PDIP $ 5.06 $ 4.29 AD7705BR产品状态: 量产16 ld SOIC - Wide $ 5.67 $ 4.81 AD7705BR-REEL产品状态: 量产16 ld SOIC - Wide $ 0.00 $ 4.81 AD7705BRU产品状态: 量产16 ld TSSOP $ 5.67 $ 4.81 AD7705BRU-REEL产品状态: 量产16 ld TSSOP $ 0.00 $ 4.81AD7705BRU-REEL7产品状态: 量产16 ld TSSOP $ 0.00 $ 4.81AD7705BRUZ产品状态: 量产16 ld TSSOP $ 4.91 $ 4.17AD7705BRUZ-REEL产品状态: 量产16 ld TSSOP - $ 4.17AD7705BRUZ-REEL7产品状态: 量产16 ld TSSOP - $ 4.17AD7705BRZ产品状态: 量产16 ld SOIC - Wide $ 4.91 $ 4.17AD7705BRZ-REEL产品状态: 量产16 ld SOIC - Wide - $ 4.17AD7705BRZ-REEL7产品状态: 量产16 ld SOIC - Wide $ 4.91 $ 4.17AD7792/AD7793均为适合⾼精度测量应⽤的低功耗、低噪声、完整模拟前端,内置⼀个低噪声16位/24位Σ-Δ型ADC,其中含有3个差分模拟输⼊,还集成了⽚内低噪声仪表放⼤器,因⽽可直接输⼊⼩信号。
AD7705在智能数字仪表中的应用
控制字节:这个命令选择输入通道,选择寄存器下一个操作是读操作
还是写操作。第二步是读或写选择的寄存器:数据传输周期结束后,
AD7705 又回到默认状态,等待一次写通信寄存器操作。对 AD7705 的
操作流程如图 5 所示。
图 3 写操作时序
写函数(8 bit):
void tx_byte(unsigned char content)
图 2 AD7705 接口电路
5 V。3 V 电压时,最大功耗为 1 mW,等待模式下电源电流仅为 8 μA。
AD7705 与微处理器连接,没有使用单片机的串行口,而是采用普
引脚如图:
通的 I/O 口来模拟串行口。AD7705 的 DRDY 与单片机的 P1.0 相连,
以备单片机来查询 AD7705 的状态。AD7705 的 RST 与单片机的 P1.4
田瑞鑫冬季施工应注意问题的探讨山东建工集团山东济南250014要当室外日平均气温连续5天稳定低于5即进入冬期施工在工程建设施工过程中受自然气候的影响加之工程建设的进度需要有时不可避免的要进行冬期施工本文就冬期施工过程中注意的问题进行探讨
科技信息
○机械与电子○
SCIENCE & TECHNOLOGY INFORMATION
换函数的增益斜率,元件内部通过 33 位分辨率决定 16 位的转换结
果。每当环境温度和工作电压发生变化时,或者器件的工作状态改变,
如输入通道切换、增益或数字滤波器第一凹口频率变动、信号输入范
围变化等任何一项发生时,必须进行一次校准。对于自校准方式,校准
过程在器件内部一次完成。AD7705 内部设置 AIN(+)端和 AIN(- )端为
除引线电阻及干扰所引起的误差,提高测量精度。各种接线方式中,三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;
}
//**********************长延时程序50ms**************************//
void delay50ms(uint t)
{
uint i;
}
//******************绿灯闪烁******************************//
void greenled(void)
{
LED_0;
delay50us(50);
LED_1;
delay50us(50);
#define uchar unsigned char
#define uint unsigned int
#define Add_key PINC
#define CS_1 (PORTB|= (1<<4 ))
#define CS_0 (PORTB&= ~(1<<4 ))
greenled(); //绿灯闪烁
value1=temp1;
WriteToReg_ADC(0x39);// 下一操作为读数据寄存器2
}
//***************************按照通道2读取****************************//
void main(void)
{
delay50us(100); //延时等待外围器件稳定
IO_Init();
spi_init();
ADC_Init();
while(1)
{
get_ad();
greenled(); greenled(); greenled(); //绿灯闪烁
return SPDR;
}
//******************SPI读数据寄存器函数 16BIT****************************//
uint Read_ADC16BitValue(void)
{
uchar temp1=0;
uint temp=0;
{
CS_0; //使能SPI器件
//SPE_1;
SPDR=byteword; //发送数据
while(!(SPSR & (1<<SPIF)));//等待发送完毕
CS_1; //禁止SPI器件
// delay5us(10);
delay50us(100);
}
//***************************按照通道1读取****************************//
void Read_ch1(void)
{
uint temp1=0;
if(DRDY==0) //数据准备好
mega16使用spi接口读取AD7705,两个通道轮流读取 标签: mega16 spi接口 AD7705 2007-03-28 10:05 阅读(597)评论(3)编辑删除 两个通道依次读取,注意写通讯寄存器的数值,
#include <iom16v.h>
#include <macros.h>
}
}
SPSR = 0x00; //setup SPI,主机倍频
//CS_0; //使能SPI器件
}
//******************SPI写寄存器函数 8BIT*******************************//
void WriteToReg_ADC(uchar byteword)
{
temp1=Read_ADC16BitValue();//读取
LED_1; //进入AD,指示等灭
yellowled(); //黄灯闪烁
}
{
LED1_0;
delay50us(50);
LED1_1;
delay50us(50);
LED1_0;
delay50us(50);
LED1_1;
delay50us(50);
}
//**************************AD初始化*************************//
#define LED_1 (PORTB|= (1<<0 ))
#define LED_0 (PORTB&= ~(1<<0 ))
#define LED1_1 (PORTB|= (1<<1 ))
#define LED1_0 (PORTB&= ~(1<<1 ))
#define DRDY (PINB& 0x08)
#define ADDR (PINC& 0x01)
#define SPE_1 (SPCR|= (1<<6 ))
uint value,value1,value2;
uchar ch_flag=0;
;
}
//**********************短延时程序5us**************************//
void delay5us(uint t)
{
uint j;
for(;t>0;t--)
//********************获取两个通道模拟量数值***************//
void get_ad(void)
{
if(DRDY==0) //数据准备好
{
ch_flag++;
if(ch_flag==0x03)
{ch_flag=0x00;}
if(ch_flag==0x01)
{ Read_ch1();}
if(ch_flag==0x02)
{ Read_ch2();}
}
}
//***********************主程序*********************************//
void ADC_Init(void)
{
uchar i;
for(i=10;i>0;i--)
{WriteToReg_ADC(0xff);} //持续DIN高电平写操作,恢复AD7705接口
WriteToReg_ADC(0x20); //通道1,下一个写时钟寄存器
WriteToReg_ADC(0x0a); //写时钟寄存器设置更新速率为200hz
WriteToReg_ADC(0x10); //通道1,下一个写设置寄存器
WriteToReg_ADC(0x40); //自校准,增益1,双极,缓冲
delay50us(100); //延时
}
//******************SPI读函数 8BIT*******************************//
unsigned char Read_Byte_SPI(void)
{
SPDR = 0xff; //发送数据,给AD7705提供脉冲
while (!(SPSR &(1<<SPIF)));
//**********************短延时程序50us**************************//
void delay50us(uint t)
{
uint j;
for(;t>0;t--)
for(j=0;j<70;j++)
{
DDRC=0x00;
PORTC=0x00;
DDRB=0b101101111; //MISO输入加上拉电阻
}
void spi_init(void)
{
SPCR = 0b01011111; //使能SPI,MSB先发送,主机,SCK空闲高,模式三,128分频
CS_0; //使能SPI器件
temp=Read_Byte_SPI();
temp=temp<<8;
temp1=Read_Byte_SPI();
temp=temp|temp1;
CS_1; //禁止SPI器件
return temp;
void Read_ch2(void)
{
uint temp2=0;
if(DRDY==0) //数据准备好
{
temp2=Read_ADC16BitValue();//读取
LED_1; //进入AD,指示等灭
WriteToReg_ADC(0x21); //通道2,下一个写时钟寄存器
WriteToReg_ADC(0x0a); //写时钟寄存器设置更新速率为200hz
WriteToReg_ADC(0x11); //通道2,下一个写设置寄存器
WriteToReg_ADC(0x40); //自校准,增益1,双极,缓冲
yellowled(); //黄灯闪烁
}
greenled(); //绿灯闪烁
value2=temp2;
WriteToReg_ADC(0x38); //下一操作为读数据寄存器1
}
LED_0;
delay50us(50);
LED_1;
delay50us(50);
}
//******************绿灯闪烁******************************//
void yellowled(void)