单片机/MCUwilliam hill官网
直播中

luzi9144

12年用户 29经验值
擅长:可编程逻辑 EDA/IC设计
私信 关注
[问答]

哪位大神用过AD420这个芯片啊,求指导

自己用AD420做的4~20mA输出模块一直没有电流输出,自己感觉软硬件都有问题,硬件就没法放上来啦。这是我写的一个AD420的程序,求各位大神指正

/****************************************************
高精度数模转换器AD420C51程序
功能:输入0x0 ~ 0xffff,输出相对应的电流值
晶振频率:12MHz
****************************************************/
#include
#include

/*函数:延时1us*/
void delay1us(void)
{
        _nop_ ();
}

/*函数:延时若干微秒*/
void delaynus (unsigned char n)
{
        unsigned char i;
        
        for (i = 0; i < n; i ++)
                delay1us ();
}

/*函数:延时若干毫秒*/
void delaynms(unsigned char n)
{
        unsigned char i;
        
        while (n --)
        {
                for (i = 0; i < 115; i ++)
                        ;

        }
}


unsigned int ad420_output[] = {0xffff, 0xbfff, 0x7fff, 0x3fff, 0x0000}; //五个测试数据

***it AD420_LAT = P1^0;     //锁存
***it AD420_CLK = P1^1;     //时钟
***it AD420_DI = P1^2;      //数据输入

/*函数:把数据写入AD420*/
void write_AD420 (unsigned int ad420_data)
{
        unsigned char i;

        AD420_LAT = 1;      //锁存置1
        for (i = 0; i < 16; i ++)
        {
                AD420_CLK = 0;     //时钟置0,然后写入数据
                if (ad420_data & 0x8000)  //写入数据
                        AD420_DI = 1;
                else
                        AD420_DI = 0;
                delaynus (10);
                AD420_CLK = 1;     //时钟置1,上升沿写入数据
                delaynus (10);
                ad420_data <<= 1;  //数据移位

        }
        AD420_CLK = 0;
        delaynus (5);
        AD420_LAT = 0;
        delaynus (5);
        AD420_LAT = 1;    //把16位数据写完,再在锁存端的上升沿把数据写到DAC
        delaynus (5);


}

void main (void)
{
        unsigned char i;
        while (1)
        {
                for (i = 0; i < 5; i ++)
                {
                        write_AD420 (ad420_output[i]);  //分别把五个数据写到AD420
                        
                        delaynms (200);  //延时,便于观察测试
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        
                }
        delaynms (200);
        delaynms (200);
        }

}

另外,还有几个问题:
1.AD420AR-32和AD420AN-32有什么区别?
2.如何检测芯片的好坏?
谢谢各位!!

更多回帖

发帖
×
20
完善资料,
赚取积分