Sensirion SHT7x gränssnittet i VHDL?

S

stelik

Guest
Har någon kod eller vet något om gränsssnittsanslutning en Sensirion SHT71 (eller SHT75) sensor i VHDL?Framför allt, jag använder en Xilinx Coolrunner-II CPLD.Jag har hittat olika prov koder online (som från Sensirion webbplats) samt montering koder och sådant, men ingenting i VHDL.Jag har försökt i flera dagar, men jag har inte ens kunnat syntetisera mitt nummer!

Om någon har någon info, det vore toppen.Tack på förhand!

Här är min kod:

Kod:library IEEE;

använda IEEE.STD_LOGIC_1164.ALL;

använda IEEE.STD_LOGIC_ARITH.ALL;

använda IEEE.STD_LOGIC_UNSIGNED.ALL;enhet getdata är

Port (clk: i STD_LOGIC - 500 KHz klocka

Twi: inout STD_LOGIC - P139

i2c: inout STD_LOGIC;

data: ut std_logic_vector (19 downto 0);

clk_twi: ut STD_LOGIC - P140

clk_i2c: ut STD_LOGIC);

slutet getdata;architecture Behavioral av getdata är

signal counter_timing: std_logic_vector (18 downto 0): = "0000000000000000000";

signal counter_comms: std_logic_vector (2 downto 0): = "000";

signal timingclk: std_logic: ='1 '; - 1 Hz klocka

signal clk_comms: std_logic: ='1 '; - 100 KHz klocka

signal temp: std_logic_vector (7 downto 0): = "00000011" - kod för mäta temperaturen

signal luftfuktighet: std_logic_vector (7 downto 0): = "00000101" - kod för fukt mätning

signal data_temp: std_logic_vector (15 downto 0): = "0000000000000000";

signal data_humidity: std_logic_vector (15 downto 0): = "0000000000000000";

signal ack: std_logic: ='0 ';

signalen start: std_logic: ='0 ';

signal åtgärd: std_logic: ='0 ';

signal count: std_logic_vector (1 downto 0): = "00";

signal count2: std_logic_vector (3 downto 0): = "0000";

signal skickar: std_logic: ='0 ';

signal ackq: std_logic: ='0 ';

signal emot: std_logic: ='0 ';

signal ackt: std_logic: ='0 ';

startaslowclock: process (clk)

starta

- Om rising_edge (clk) then

om clk'Event och clk ='1 'då

counter_timing <= counter_timing 1;

counter_comms <= counter_comms 1;

om counter_timing = "1111010000100011111" sedan

timingclk <= inte timingclk;

counter_timing <= "0000000000000000000";

end if;

om counter_comms = "100" och sedan

clk_comms <= inte clk_comms;

counter_comms <= "000";

end if;

end if;

slutet process;

hämta: process (clk, clk_comms, timingclk)

starta

- Om sensorn tar en mätning, produktion på 100 KHz klocka till clk_twi och clk_i2c

om åtgärden ='0 'då

clk_twi <= clk_comms;

- clk_i2c <= clk_comms;

annan

ack <= Twi;

om ack ='0 'då

åtgärd <='0 ';

få <='1 ';

end if;

end if;- Om rising_edge (timingclk) sedan

om timingclk'Event och timingclk = "1" och sedan

start <='1 ';

Twi <='1 ';

- i2c <='1 ';

end if;- Skicka start sekvens

- Om start = "1" och falling_edge (clk) then

om start = "1" och clk'Event och clk ='1 'då

count <= count 1;

count2 <= count2 1;

om count = "10" och sedan

Twi <='0 ';

count <= "00";

end if;

om count2 = "1100" och sedan

Twi <='1 ';

count <= "00";

count2 <= "0111"; - Inrätta motverka att skicka temperatur kommandot

start <='0 ';

skicka <='1 ';

end if;

end if;- Om skicka = "1" och falling_edge (clk_comms) sedan

Om skicka = "1" och clk_comms'Event och clk_comms = "1" och sedan

om count2 = "1111" och sedan

skicka <='0 ';

Twi <='1 ';

ackq <='1 ';

ack <= Twi;

annan

Twi <= temp (conv_integer (count2));

count2 <= count2 - 1;

end if;

end if;- Om ackq = "1" och ack ='0 'och rising_edge (clk_comms) sedan

om ackq = "1" och ack ='0 'och clk_comms'Event och clk_comms = "1" och sedan

åtgärd <='1 ';

ackq <='0 ';

- elsif ackq = "1" och ack = "1" och rising_edge (clk_comms) sedan

elsif ackq = "1" och ack = "1" och clk_comms'Event och clk_comms = "1" och sedan

åtgärd <='0 ';

ackq <='0 ';

end if;- om få = "1" och rising_edge (clk_comms) sedan

om få = "1" och clk_comms'Event och clk_comms = "1" och sedan

om count2 = "0111" och räkna = "01" och sedan

count <= count - 1;

annan

data_temp (conv_integer (count2)) <= Twi;

count2 <= count2 - 1;

om count2 = "0111" och sedan

ackt <='1 ';

få <='0 ';

elsif count2 = "1111" och sedan

få <='0 ';

end if;

end if;

end if;- Om ackt = "1" och falling_edge (clk_comms) sedan

om ackt = "1" och clk_comms'Event och clk_comms = "1" och sedan

Twi <='0 ';

ackt <='0 ';

få <='1 ';

count <= "01";

end if;data (19 downto 12) <= data_temp (7 downto 0);

- uppgifter (11 downto 0) <= data_humidity (11 downto 0);

slutet process;

slutet Behavioral;
 

Welcome to EDABoard.com

Sponsor

Back
Top