huwuzhao 发表于 2009-5-22 17:29:56

用过AD7715进来看看

#include <iom48v.h>
#include <macros.h>
#defineuchar unsigned char
#defineuintunsigned int
#definePD    PORTD
#definePC    PORTC
#definePB    PORTB

//控制端口定义
//端口操作定义
#define CS_7715          PB7                     //AD7715的片选接在PA4
#define SET_CS_7715    PORTB |= 1<<CS_7715
#define CLR_CS_7715 PORTB &= ~(1<<CS_7715)

#define RET            PB6                     //AD7715的复位接在PA5
#define SET_RET      PORTB |= 1<<RET
#define CLR_RET      PORTB &= ~(1<<RET)

#define DRRY          PB2                     //AD7715的数据有效接在PB3
#define DRRY_7715    (PINB & (1<<DRRY))
const uchar led[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
const uchar ledrl[]={0XFE,0XFD,0XFB,0XF7,0XEF};
void delay_ms(void)//1ms延时函数
{
unsigned int i;
asm("nop");
for (i=0;i<1139;i++)
{
;
}
}

void delay_nms(unsigned int n)//延时n毫秒
{
unsigned int i;
for (i=0;i<n;i++)//执行n次1毫秒延时
{ delay_ms(); }
}

void delay_nus(unsigned int n)//延时N微秒,N>=5晶振:8MHz
{
unsigned int i;
for (i=5;i<n;i++)
          {
          asm("nop");
          asm("nop");       
          }
}
void port_init(void)
{
PD=0XFF;
DDRC=0XFF;
PC=0XFF;
DDRD=0XFF;
DDRB=0Xff;
PB=0XFF;
}
//SPI initialize
// clock rate: 62500hz
void spi_init(void)
{
DDRB |= (1<<PB5)|(1<<PB4);      //设置MOSI 和SCK 为输出
DDRB &= ~(1<<PB3);
SPCR = 0x53; //setup SPI
SPSR = 0x00; //setup SPI
}
//写入AD7705一字节函数
//入口:data 需写入的字节数据
uint wr_byte(unsigned char data)
{

SPDR = data;
while(!(SPSR &(1 << SPIF)));

return SPDR;
}

//读出AD7705数据函数
//出口:读出的2字节数据
unsigned int rd_7705(void)
   {
   unsigned int temp;                  //定义临时变量
   wr_byte(0x38);                      //选择读数据寄存器,1通道
   SPDR = 0;                           //启动数据传输
   while(!(SPSR &(1 << SPIF)));      //等待传输结束
   temp = SPDR<<8;                     //读取高字节
   delay_nms(20);
   SPDR = 0;                            //启动数据传输
   while(!(SPSR &(1 << SPIF)));         //等待传输结束
   temp |= SPDR;                        //读取低字节
   return(temp);
   }

//判断有无数据函数
//出口:读出的2字节数据

unsigned int ad7715(void)
   {
   if(DRRY_7715==0)
       {
       return(rd_7705());
       }
   else
       {
       return(10);
       }
   
   }
//AD7705初始化函数
void init_7715(void)
   {
   spi_init();
   DDRB |= (1<<CS_7715)|(1<<RET);    //定义端口方向
   DDRB &= ~(1<<DRRY);
   PORTB|= 1<<DRRY;
   CLR_CS_7715;                        //片选有效
   CLR_RET;                        //复位端低有效
   delay_nms(100);                  //保持500MS低电平
   SET_RET;                        //复位端回复高
   delay_nms(1);
   
    wr_byte(0x10);                  //选择时通信存器
    wr_byte(0x44);                  //50HZ的转换频率
    wr_byte(0x00);                  //选择设置寄存器
    wr_byte(0x38);                  //自校准模式,增益为1,单极性
   
   }
void main(void)
{unsigned int ladc=0;

port_init();

spi_init();
init_7715();
while(1)
{
    ladc=ad7715();
    PD=led;
    PC =ledrl;
    delay_nms(1);
    PD=led[(ladc%10000)/1000];
    PC =ledrl;
    delay_nms(1);
    PD=led[(ladc%1000)/100];
    PC =ledrl;
    delay_nms(1);
    PD =led[(ladc%100)/10];
    PC =ledrl;
    delay_nms(1);
    PD =led;
    PC =ledrl;
    delay_nms(1);
    PC=0XFF;
}
}

数码管不显示,请高手指点。

huwuzhao 发表于 2009-5-23 10:55:16

别沉了,自己顶了。

waterx3 发表于 2009-5-23 13:33:47

wr_byte(0x00);                  //选择设置寄存器
    wr_byte(0x38);                  //自校准模式,增益为1,单极性

这2句不要了

huwuzhao 发表于 2009-5-26 17:56:30

试了还是不行,把电路图也贴上,请高手指点迷津。先谢了!
点击此处下载 ourdev_448067.pdf(文件大小:34K) (原文件名:AD7715连接图.pdf)

rambler 发表于 2009-8-19 08:52:46

期待中

rambler 发表于 2009-8-19 08:53:20

我也在调试,没什么反应,输出是0

czhaii 发表于 2013-6-24 11:40:32

现在怎么样?
页: [1]
查看完整版本: 用过AD7715进来看看