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 1220 20 BIT ONE TIME RUN DIR ISSUE.

I AM USING DAC 1220.

i am giving Vref 2.5 volts, Avdd of 5 volts

I am getting few problems like

1. when i am sending the data in DIR one time . DAC sdio pin shows a continuous data of all insr,cmr, and dir.

2. either i give 0000h, 8000h, FFFFh in the dir i am getting same voltage on the VOUT pin(peak to peak voltage of 8 volts).

i am sending the code with this mail. please reply us soon.

thank you.



library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
                use IEEE.STD_LOGIC_ARITH.ALL;
                use IEEE.STD_LOGIC_UNSIGNED.ALL;
                use IEEE.numeric_std.ALL;



entity dac_vr1 is
    Port ( CLK_CRY : in  STD_LOGIC;
           DAC_SCLK,DAC_CLK : out  STD_LOGIC;
             DAC_CS : OUT STD_LOGIC := '0';
             GPIO_OUT : OUT STD_LOGIC_VECTOR(23 DOWNTO 0) ;
--              adc_reg : inout  std_logic_vector(23 downto 0);
              DAC_SDIO : inout std_logic
              );
end dac_vr1;

architecture Behavioral of dac_vr1 is
signal dac_count:  std_logic_vector(24 downto 0) := "0000000000000000000000000";
signal dac_cnt,dac_cot : integer range  0 to 95 := 0;
signal dac_delay : integer range 0 to 10000 := 0;
signal pn,pn1,pin : std_logic := '0';
signal dac_sclk_cntr : std_logic := '0';
SIGNAL adc_reg : STD_LOGIC_VECTOR(23 DOWNTO 0) := "000000000000000000000000";

signal dac_cmr1 :std_logic_vector(7 downto 0) := "10111100" ;
signal dac_cmr2 :std_logic_vector(7 downto 0) := "11100000" ;

signal dac_insr1: std_logic_vector(7 downto 0) := "00100101" ;
--signal dac_insr1: std_logic_vector(7 downto 0) := "00100100" ;
signal dac_insr2 : std_logic_vector(7 downto 0) := "01000010" ;
signal dac_dir : std_logic_vector(23 downto 0) := "000000000000000000000000";

begin

process(CLK_CRY)
begin
        if rising_edge(CLK_CRY) then
            dac_count<= dac_count+ 1;
            dac_delay <= dac_delay + 1;
        end if;
                 DAC_CLK <= dac_count(1);
                 DAC_SCLK <= dac_count(4);
                 dac_sclk_cntr <= dac_count(4);
                
        if dac_delay <= 1000 then
            DAC_SCLK <= '0';
            DAC_CLK <= '0';
        elsif dac_delay > 1000 then
        pn <= '1';
        end if;
        
end process;


process(dac_sclk_cntr)
begin
        if pn = '1' then
        dac_dir <= "000000000000000000000000";
 
                    if falling_edge(dac_sclk_cntr) then
                                    dac_cnt <= dac_cnt + 1;
                    end if;
                        
                        if dac_cnt = 1 then
                        DAC_SDIO <= dac_insr1(0);
                                                GPIO_OUT(12) <= dac_insr1(0);

                        elsif dac_cnt = 2 then
                        DAC_SDIO <= dac_insr1(1);
                                                GPIO_OUT(12) <= dac_insr1(1);

                        elsif dac_cnt = 3 then
                        DAC_SDIO <= dac_insr1(2);

                                                GPIO_OUT(12) <= dac_insr1(2);
                        elsif dac_cnt = 4 then
                        DAC_SDIO <= dac_insr1(3);
                                                GPIO_OUT(12) <= dac_insr1(3);

                        elsif dac_cnt = 5 then
                        DAC_SDIO <= dac_insr1(4);
                                                GPIO_OUT(12) <= dac_insr1(4);

                        elsif dac_cnt = 6 then
                        DAC_SDIO <= dac_insr1(5);
                                                GPIO_OUT(12) <= dac_insr1(5);

                        elsif dac_cnt = 7 then
                        DAC_SDIO <= dac_insr1(6);
                                                GPIO_OUT(12) <= dac_insr1(6);

                        elsif dac_cnt = 8 then
                        DAC_SDIO <= dac_insr1(7);
                                                GPIO_OUT(12) <= dac_insr1(7);

                        elsif dac_cnt = 9 then
                        DAC_SDIO <= dac_cmr1(0);
                                                GPIO_OUT(12) <= dac_cmr1(0);

                        elsif dac_cnt = 10 then
                        DAC_SDIO <= dac_cmr1(1);
                                                GPIO_OUT(12) <= dac_cmr1(1);

                        elsif dac_cnt = 11 then
                        DAC_SDIO <= dac_cmr1(2);
                                                GPIO_OUT(12) <= dac_cmr1(2);

                        elsif dac_cnt = 12 then
                        DAC_SDIO <= dac_cmr1(3);
                                                GPIO_OUT(12) <= dac_cmr1(3);

                        elsif dac_cnt = 13 then
                        DAC_SDIO <= dac_cmr1(4);
                                                GPIO_OUT(12) <= dac_cmr1(4);

                        elsif dac_cnt = 14 then
                        DAC_SDIO <= dac_cmr1(5);
                                                GPIO_OUT(12) <= dac_cmr1(5);

                        elsif dac_cnt = 15 then
                        DAC_SDIO <= dac_cmr1(6);
                                                GPIO_OUT(12) <= dac_cmr1(6);

                        elsif dac_cnt = 16 then
                        DAC_SDIO <= dac_cmr1(7);
                                                GPIO_OUT(12) <= dac_cmr1(7);

                        elsif dac_cnt = 17 then
                        DAC_SDIO <= dac_cmr2(0);
                                                GPIO_OUT(12) <= dac_cmr2(0);

                        elsif dac_cnt = 18 then
                        DAC_SDIO <= dac_cmr2(1);
                                                GPIO_OUT(12) <= dac_cmr2(1);

                        elsif dac_cnt = 19 then
                        DAC_SDIO <= dac_cmr2(2);
                                                GPIO_OUT(12) <= dac_cmr2(2);

                        elsif dac_cnt = 20 then
                        DAC_SDIO <= dac_cmr2(3);
                                                GPIO_OUT(12) <= dac_cmr2(3);

                        elsif dac_cnt = 21 then
                        DAC_SDIO <= dac_cmr2(4);
                                                GPIO_OUT(12) <= dac_cmr2(4);

                        elsif dac_cnt = 22 then
                        DAC_SDIO <= dac_cmr2(5);
                                                GPIO_OUT(12) <= dac_cmr2(5);

                        elsif dac_cnt = 23 then
                        DAC_SDIO <= dac_cmr2(6);
                                                GPIO_OUT(12) <= dac_cmr2(6);

                        elsif dac_cnt = 24 then
                        DAC_SDIO <= dac_cmr2(7);
                                                GPIO_OUT(12) <= dac_cmr2(7);


----------************insr for dir************---------------
                        elsif dac_cnt = 25 then
                        DAC_SDIO <= dac_insr2(0);
                                                GPIO_OUT(12) <= dac_insr2(0);

                        elsif dac_cnt = 26 then                        
                        DAC_SDIO <= dac_insr2(1);
                                                GPIO_OUT(12) <= dac_insr2(1);

                        elsif dac_cnt = 27 then
                        DAC_SDIO <= dac_insr2(2);
                                                GPIO_OUT(12) <= dac_insr2(2);

                        elsif dac_cnt = 28 then
                        DAC_SDIO <= dac_insr2(3);
                                                GPIO_OUT(12) <= dac_insr2(3);

                        elsif dac_cnt = 29 then
                        DAC_SDIO <= dac_insr2(4);
                                                GPIO_OUT(12) <= dac_insr2(4);

                        elsif dac_cnt = 30 then
                        DAC_SDIO <= dac_insr2(5);
                                                GPIO_OUT(12) <= dac_insr2(5);

                        elsif dac_cnt = 31 then
                        DAC_SDIO <= dac_insr2(6);
                                                GPIO_OUT(12) <= dac_insr2(6);

                        elsif dac_cnt = 32 then
                        DAC_SDIO <= dac_insr2(7);
                                                GPIO_OUT(12) <= dac_insr2(7);



                        elsif dac_cnt = 33 then
                        DAC_SDIO <= dac_dir(0);
                                                GPIO_OUT(12) <= dac_dir(0);

                        elsif dac_cnt = 34 then
                        DAC_SDIO <= dac_dir(1);
                                                GPIO_OUT(12) <= dac_dir(1);

                        elsif dac_cnt = 35 then
                        DAC_SDIO <= dac_dir(2);
                                                GPIO_OUT(12) <= dac_dir(2);

                        elsif dac_cnt = 36 then
                        DAC_SDIO <= dac_dir(3);
                                                GPIO_OUT(12) <= dac_dir(3);

                        elsif dac_cnt = 37 then
                        DAC_SDIO <= dac_dir(4);
                                                GPIO_OUT(12) <= dac_dir(4);

                        elsif dac_cnt = 38 then
                        DAC_SDIO <= dac_dir(5);
                                                GPIO_OUT(12) <= dac_dir(5);

                        elsif dac_cnt = 39 then
                        DAC_SDIO <= dac_dir(6);
                                                GPIO_OUT(12) <= dac_dir(6);

                        elsif dac_cnt = 40 then
                        DAC_SDIO <= dac_dir(7);
                                                GPIO_OUT(12) <= dac_dir(7);

                        
                        elsif dac_cnt = 41 then
                        DAC_SDIO <=  dac_dir(8);
                                                GPIO_OUT(12) <=  dac_dir(8);

                        elsif dac_cnt = 42 then
                        DAC_SDIO <=  dac_dir(9);
                                                GPIO_OUT(12) <=  dac_dir(9);

                        elsif dac_cnt = 43 then
                        DAC_SDIO <=  dac_dir(10);
                                                GPIO_OUT(12) <=  dac_dir(10);

                        elsif dac_cnt = 44 then
                        DAC_SDIO <=  dac_dir(11);
                                                GPIO_OUT(12) <=  dac_dir(11);

                        elsif dac_cnt = 45 then
                        DAC_SDIO <=  dac_dir(12);
                                                GPIO_OUT(12) <=  dac_dir(12);

                        elsif dac_cnt = 46 then
                        DAC_SDIO <=  dac_dir(13);
                                                GPIO_OUT(12) <=  dac_dir(13);

                        elsif dac_cnt = 47 then
                        DAC_SDIO <=  dac_dir(14);
                                                GPIO_OUT(12) <=  dac_dir(14);

                        elsif dac_cnt = 48 then
                        DAC_SDIO <=  dac_dir(15);
                                                GPIO_OUT(12) <=  dac_dir(15);
                        
                        elsif dac_cnt = 49 then
                        DAC_SDIO <=  dac_dir(16);
                                                GPIO_OUT(12) <=  dac_dir(16);

                        elsif dac_cnt = 50 then
                        DAC_SDIO <=  dac_dir(17);
                                                GPIO_OUT(12) <=  dac_dir(17);

                        elsif dac_cnt = 51 then
                        DAC_SDIO <=  dac_dir(18);
                                                GPIO_OUT(12) <=  dac_dir(18);

                        elsif dac_cnt = 52 then
                        DAC_SDIO <=  dac_dir(19);
                                                GPIO_OUT(12) <=  dac_dir(19);

                        elsif dac_cnt = 53 then
                        DAC_SDIO <=  dac_dir(20);
                                                GPIO_OUT(12) <=  dac_dir(20);

                        elsif dac_cnt = 54 then
                        DAC_SDIO <=  dac_dir(21);
                                                GPIO_OUT(12) <=  dac_dir(21);

                        elsif dac_cnt = 55 then
                        DAC_SDIO <=  dac_dir(22);
                                                GPIO_OUT(12) <=  dac_dir(22);

                        elsif dac_cnt = 56 then
                        DAC_SDIO <=  dac_dir(23);
                                                GPIO_OUT(12) <=  dac_dir(23);

                        else
                        DAC_SDIO <= '0';
                        GPIO_OUT(12) <=  '0';
                        end if;                

end if;
end process;



end Behavioral ;

 



  • Neha,


    Since you've posted twice about this question, I've deleted the duplicate post. If you feel there is something that isn't covered in the previous post that isn't in this post, you can post back.

    First, it's too hard to look for a problem in code when something is wrong like this. The best way to start looking at the problem is to get an oscilloscope or a logic analyzer to look at the signals coming out of the controller. Grab shots of the SCLK, SDIO, /CS and compare them with the figures covering the digital interface shown on pages 8-10. With screen shots, you can find quick problems like /CS not staying low through the entire communication transaction, or the code is written such that the DIN data is trying to write the data on a rising edge of the SCLK instead of the falling edge. You can also check timing information and verify that it meets the specs listed in the tables in the same section.

    Grab a communication transaction, post it here, and we can look at it. Be sure to explain what transaction that you are trying to write in the screen shot and try to get a complete transaction.

    Beyond that, you could post a schematic here and see if there is something hooked up wrong. Incidentally, how do you have a peak-to-peak voltage of 8V? Your supplies should be nominally 5V. More than 6V would risk permanent damage.


    Joseph Wu