微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > DAC問題(DAC161P997)

DAC問題(DAC161P997)

时间:10-02 整理:3721RD 点击:

Hi,各位TI大大們,打擾了。

小弟有個DAC(DAC161P997)問題,想請教各位大大。

請問大大們,使用DAC161P997這個顆DAC,

是否有使用過以下接法,且可正常work呢?
小弟使用以下接法,送時序無法改變其電流輸出,電流一直皆維持在4mA。
請問是否有其它需注意的地方呢?
謝謝各位大大。


目前還是無法控制DAC的電流輸出
我是以Microchip 18F26K22 MCU 對 DAC161P997作控制
SWIF TIMING (0、1、D....) 有使用示波器量測,Duty cycle皆符合Datasheet 規範
Symbol rate:大約 760Hz (規範300Hz ~ 19.2KHz)

測試結果:
ACKB腳一直為高電位,沒回ack。 (Datasheet : Note that the pulse generated by ACKB is active LOW.)

煩請各位大大幫幫忙,謝謝您們了。

以下是我的程式:

void DAC161P997_delay()
{
        delay_ms(1);
}

void DAC161P997_pin_init()
{
    output_low(PIN_A3);                
    DAC161P997_delay();
}

void DAC161P997_D()
{
    output_high(PIN_A3);               
    delay_us(500);         
    output_low(PIN_A3);              
    delay_us(500);         
}

void DAC161P997_0()
{
    output_high(PIN_A3);              
    delay_us(250);        
    output_low(PIN_A3);              
    delay_us(750);         
}

void DAC161P997_1()
{
    output_high(PIN_A3);               
    delay_us(750);         
    output_low(PIN_A3);              
    delay_us(250);         
}

void DAC161P997_A()
{
    output_low(PIN_A3);              
    delay_us(2000);         
}

void DAC161P997_write_data1() //  12mA current out
{
    int iout_data1[19]={0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0};    //0X8000_10
    int8 w;

    DAC161P997_D();
    for(w=0;w<19;w++)
    {
                if(iout_data1[w]==0)
                {
                    DAC161P997_0();
                }
                else
                {
                    DAC161P997_1();
                }
        }
        DAC161P997_D();
        DAC161P997_A();
}

void DAC161P997_write_config_data1() //寫控制暫存器 0x0095_10  unlock
{
    int config_data1[19]={1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0}; //暫存器0,資料0X0095_10  unlock
        int8 w;
        
        DAC161P997_D();
        for(w=0;w<19;w++)
        {
                if(config_data1[w]==0)
                {
                    DAC161P997_0();
                }
                else
                {
                    DAC161P997_1();
                }
        }
        DAC161P997_D();
        DAC161P997_A();
}

void DAC161P997_write_config_data2() //控制暫存器 0X021D 
{                                   
    int config_data2[19]={1,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,1,0,0}; //暫存器2,資料0X021D_00   ACK_1 FRAME_1 PARITY_1 CHANNEL_0 LOOP_1
    int8 w;
    DAC161P997_D();
    for(w=0;w<19;w++)
    {
                if(config_data2[w]==0)
                {
                    DAC161P997_0();
                }
                else
                {
                    DAC161P997_1();
                }
        }
        DAC161P997_D();
        DAC161P997_A();
}

void DAC161P997_write_config_data3() //控制暫存器 0x00AA_lock
{
    int config_data3[19]={1,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0}; //暫存器0,資料0X00AA_10
        int8 w;

        DAC161P997_D();
        for(w=0;w<19;w++)
        {
                if(config_data3[w]==0)
                {
                    DAC161P997_0();
                }
                else
                {
                    DAC161P997_1();
                }
        }
        DAC161P997_D();
        DAC161P997_A();
}

main()
{
       DAC161P997_write_config_data1(); //控制暫存器unlock 資料0X0095_10  unlock    
       DAC161P997_write_config_data2(); // ACK_1 FRAME_1 PARITY_1 CHANNEL_0 LOOP_1
       DAC161P997_write_config_data3(); //控制暫存器 0x00AA_lock
       for(;;)
       {
              DAC161P997_write_data1();   //12mA current out
       }
}

        我是来看更新的.........马上也要用这个。

推荐用隔离接法,并把DAC部分的地浮起来。让DAC单独成一个小的电源系统工作。

        拜托,我们用的不是你说的这种方法.......

        代码我对着手册看过一遍,总结一下:

        发送:D_1_00000000_10010101_10_D_A  (D_写寄存器标志_寄存器地址_解锁命令_校验位_D_A)    解锁
        发送:D_1_00000010_00011101_00_D_A  (D_写寄存器标志_寄存器地址_配置命令_校验位_D_A)    配置
        发送:D_1_00000000_10101010_10_D_A  (D_写寄存器标志_寄存器地址_锁定命令_校验位_D_A)    锁定

        循环

        发送:D_0_10000000_00000000_10_D_A  (D_写数据标志_数据高位_数据低位_校验位_D_A)    

        这个与手册中的描述一致

        你的奇偶校验位算对了么?

        0x0095_01
        0x021D_11
        0x00AA_01

        0x8000_01

        嗨,嗨,你的奇偶校验码确实算错了,如上,输出11.9969mA。你自己也试试吧。

        测试程序完全依照你的例子进行编写的,单线直连,没有判断ACKB。不过A我用的是3000.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top