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 ;