Hi,
目前還是無法控制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
}
} |