现在都用TM7705了,AD7705太贵了,程序一样的,Pin 对Pin 兼容的,直接替换即可,有需要样品资料可以联系QQ3247925842
下面是控制参考代码
设置TM7705的程序代码
表 16 给出了TM7705 和微控制器接口的用C 代码写成的一组读、写程序。
此程序的几个步骤是:
1. 向通信寄存器写数据,选择通道1作为有效通道,将下一个操作设为对时钟寄存器进行写操作。
2. 对时钟寄存器写操作,设臵 CLK DIV位,将外部时钟除二,假定外部时钟频率为4.9512MHz ,
更新率选为50Hz。
3. 向通信寄存器写数据。选择通道1作为有效通道。将下一个操作设为对设臵寄存器的写操作。
4. 向设臵寄存器写数据,将增益设为 1,设臵为双极性、非缓冲模式,清除滤波器同步,开始自校准。
5. 查询DRDY 输出。
6. 从数据寄存器上读数据。
7. 跳回第5、第6 步,直到从选定的通道中取出指定数量的采样。
表 16 TM7705与68HC11 微处理器接口的C 语言代码
/* This program has read and write routines for the 68HC11 to interface to the TM7705 and the sample program
sets the various registers and then reads1000 samples from one channel.*/
#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 herefrom the 68HC11 is the /CS and this is why the PC2 bit of PORTC is
made as an output */
char a;
DDRC = 0x04; /* PC2 is an output the restof the port bits are inputs */
PORTC | = 0x04; /* make the /CS line high */
Writetoreg(0x20); /* Active Channel is Ain1(+)/Ain1(-),next operation aswrite to the clock register*/
Writetoreg(0x0C); /* master clock enabled,4.9512MHz Clock, set output rate to 50Hz*/
Writetoreg(0x10); /* Active Channel is Ain1(+)/Ain1(-),next operation aswrite 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 setsthe WiredOR mode(DWOM=1), Master mode(MSTR=1), SCK idles high(CPOL=1),
/SS can be low always(CPHA=1), lowest clock speed(slowestspeedwhich is masterclock /32 */
DDRD= 0x18; /* SCK, MOSI outputs */
q = SPSR;
q = SPDR; /* the read of the stausregister and of the data register is needed to clear the interrupt which tells the
user that the data 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 output */
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 reading*/
*datapointer++=SPDR; /* read SPDR into store array via datapointer */
}
PORTC|=4; /* /CS is high */
} |