This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DAC問題(DAC161P997)

Other Parts Discussed in Thread: DAC161P997

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
       }
}