Sensirion SHT7x interface in VHDL?

S

stelik

Guest
Heeft iemand een code of weet iets over interfacing een Sensirion SHT71 (of SHT75) sensor in VHDL?In het bijzonder ben ik met behulp van een Xilinx Coolrunner-II CPLD.Ik heb verschillende steekproef codes online (zoals uit de Sensirion
de website),
alsook montage-codes en dergelijke, maar niets in VHDL.Ik heb geprobeerd voor de dagen, maar ik heb niet eens kunnen synthetiseren mijn code!

Als iemand heeft alle info, dat zou geweldig zijn.Thanks in advance!

Hieronder is mijn code:

Code:library IEEE;

gebruik IEEE.STD_LOGIC_1164.ALL;

gebruik IEEE.STD_LOGIC_ARITH.ALL;

gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;entiteit getdata is

Port (clk: in STD_LOGIC; - 500 KHz klok

TWI: inout STD_LOGIC; - P139

i2c: inout STD_LOGIC;

gegevens: uit std_logic_vector (19 downto 0);

clk_twi: Out STD_LOGIC; - P140

clk_i2c: Out STD_LOGIC);

einde getdata;Behavioral architectuur van getdata is

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

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

signaal timingclk: std_logic: ='1 '; - 1 Hz klok

signaal clk_comms: std_logic: ='1 '; - 100 KHz klok

signaal temp: std_logic_vector (7 downto 0): = "00000011"; - code voor maatregel temperatuur

signaal vochtigheid: std_logic_vector (7 downto 0): = "00000101"; - code voor de vochtigheid meting

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

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

signaal ack: std_logic: ='0 ';

signaal start: std_logic: ='0 ';

signaal maatregel: std_logic: ='0 ';

signaal tellen: std_logic_vector (1 downto 0): = "00";

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

signaal sturen: std_logic: ='0 ';

signaal ackq: std_logic: ='0 ';

signaal ontvangen: std_logic: ='0 ';

signaal ackt: std_logic: ='0 ';

beginnenslowclock: proces (clk)

beginnen

- indien rising_edge (clk) then

indien clk'Event en clk ='1 ', dan

counter_timing <= counter_timing 1;

counter_comms <= counter_comms 1;

indien counter_timing = "1111010000100011111" dan

timingclk <= niet timingclk;

counter_timing <= "0000000000000000000";

end if;

indien counter_comms = "100", dan

clk_comms <= niet clk_comms;

counter_comms <= "000";

end if;

end if;

einde proces;

ophalen: proces (clk, clk_comms, timingclk)

beginnen

- Tenzij de sensor is het nemen van een meting, de output van de 100 kHz klok te clk_twi en clk_i2c

als maatregel ='0 ', dan

clk_twi <= clk_comms;

- clk_i2c <= clk_comms;

anders

ack <= TWI;

indien ack ='0 ', dan

maatregel <='0 ';

ontvangen <='1 ';

end if;

end if;- indien rising_edge (timingclk) dan

indien timingclk'Event en timingclk ='1 ', dan

begin <='1 ';

TWI <='1 ';

- i2c <='1 ';

end if;- Stuur het begin sequentie

- als start ='1 'en falling_edge (clk) then

Als start ='1 'en clk'Event en clk ='1', dan

count <= count 1;

count2 <= count2 1;

als count = "10" en vervolgens

TWI <='0 ';

count <= "00";

end if;

indien count2 = "1100", dan

TWI <='1 ';

count <= "00";

count2 <= "0111"; - Opzetten teller te sturen temperatuur commando

begin <='0 ';

verzenden <='1 ';

end if;

end if;- indien sturen ='1 'en falling_edge (clk_comms) dan

indien sturen ='1 'en clk_comms'Event en clk_comms ='1', dan

indien count2 = "1111", dan

verzenden <='0 ';

TWI <='1 ';

ackq <='1 ';

ack <= TWI;

anders

TWI <= temp (conv_integer (count2));

count2 <= count2 - 1;

end if;

end if;- indien ackq ='1 'en ack ='0' en rising_edge (clk_comms) dan

indien ackq ='1 'en ack ='0' en clk_comms'Event en clk_comms ='1 ', dan

maatregel <='1 ';

ackq <='0 ';

- elsif ackq ='1 'en ack ='1' en rising_edge (clk_comms) dan

elsif ackq ='1 'en ack ='1' en clk_comms'Event en clk_comms ='1 ', dan

maatregel <='0 ';

ackq <='0 ';

end if;- indien ontvangen ='1 'en rising_edge (clk_comms) dan

indien ontvangen ='1 'en clk_comms'Event en clk_comms ='1', dan

indien count2 = "0111" en count = "01" en vervolgens

count <= count - 1;

anders

data_temp (conv_integer (count2)) <= TWI;

count2 <= count2 - 1;

indien count2 = "0111", dan

ackt <='1 ';

ontvangen <='0 ';

elsif count2 = "1111", dan

ontvangen <='0 ';

end if;

end if;

end if;- indien ackt ='1 'en falling_edge (clk_comms) dan

indien ackt ='1 'en clk_comms'Event en clk_comms ='1', dan

TWI <='0 ';

ackt <='0 ';

ontvangen <='1 ';

count <= "01";

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

- de gegevens (11 downto 0) <= data_humidity (11 downto 0);

einde proces;

einde Behavioral;
 

Welcome to EDABoard.com

Sponsor

Back
Top