Sensirion SHT7x sąsajos VHDL?

S

stelik

Guest
Ar kas nors kodas ar kas dėl sąveikos su Sensirion SHT71 (arba SHT75) jutiklio į VHDL?Visų pirma, aš naudojant Xilinx Coolrunner II CPLD.Radau įvairių imties kodai internete (pavyzdžiui, iš Sensirion tinklalapyje), taip pat surinkimo kodais ir toks, bet nieko VHDL.Aš bandė dienas, tačiau jų dar nėra pajėgi sintetinti savo kodą!

Jei kas neturi informacijos, kad būtų didelis.Thanks in advance!

Žemiau yra mano kodas:

Kodas:biblioteka IEEE;

naudoti IEEE.STD_LOGIC_1164.ALL;

naudoti IEEE.STD_LOGIC_ARITH.ALL;

naudoti IEEE.STD_LOGIC_UNSIGNED.ALL;subjektas getdata yra

Uostas (CLK: į STD_LOGIC; - 500 kHz laikrodis

TWI: Inout STD_LOGIC; - P139

i2c: Inout STD_LOGIC;

duomenis: iš std_logic_vector (19 downto 0);

clk_twi: iš STD_LOGIC; - P140

clk_i2c: iš STD_LOGIC);

pabaigos getdata;Architektūra Elgesys su getdata yra

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

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

signalo timingclk: std_logic: ='1 '; - 1 Hz, laikrodis

signalo clk_comms: std_logic: ='1 '; - 100 kHz laikrodis

signalo temperatūra: std_logic_vector (7 downto 0): = "00000011"; - kodas priemonė temperatūra

signalo drėgmė: std_logic_vector (7 downto 0): = "00000101"; - kodas drėgmės matavimas

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

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

signalo ack: std_logic: ='0 ';

signalas pradėti: std_logic: ='0 ';

signalo priemonė: std_logic: ='0 ';

signalų skaičius: std_logic_vector (1 downto 0): = "00";

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

signalą siųsti: std_logic: ='0 ';

signalo ackq: std_logic: ='0 ';

signalas yra: std_logic: ='0 ';

signalo ackt: std_logic: ='0 ';

pradėtislowclock: procesas (CLK)

pradėti

- jei rising_edge (CLK), tada

jei clk'Event ir CLK = "1", tada

counter_timing <= counter_timing 1;

counter_comms <= counter_comms 1;

jei counter_timing = "1111010000100011111", tada

timingclk <= ne timingclk;

counter_timing <= "0000000000000000000";

end if;

jei counter_comms = "100", tada

clk_comms <= ne clk_comms;

counter_comms <= "000";

end if;

end if;

galutinio proceso;

priimti: procesas (CLK, clk_comms, timingclk)

pradėti

- Jeigu jutiklis atsižvelgiant matavimo, išvesties 100 KHz laikrodis su clk_twi ir clk_i2c

jei priemonė ='0 ', tada

clk_twi <= clk_comms;

- clk_i2c <= clk_comms;

kitas

ack <= TWI;

jei ack ='0 ', tada

priemonę <='0 ';

gauti <='1 ';

end if;

end if;- jei rising_edge (timingclk), tada

jei timingclk'Event ir timingclk = "1", tada

Start <='1 ';

TWI <='1 ';

- i2c <='1 ';

end if;- Siųsti pradžioje seka

- jei start ='1 'ir falling_edge (CLK), tada

Jei start ='1 'ir clk'Event ir CLK = "1", tada

count <= count 1;

count2 <= count2 1;

jei count = "10", tada

TWI <='0 ';

count <= "00";

end if;

jei count2 = "1100", tada

TWI <='1 ';

count <= "00";

count2 <= "0111"; - Sukurti kovos siųsti temperatūra komandą

Start <='0 ';

siųsti <='1 ';

end if;

end if;- jei siunčia ='1 'ir falling_edge (clk_comms), tada

jei siųsti = "1" ir clk_comms'Event ir clk_comms = "1", tada

jei count2 = "1111", tada

siųsti <='0 ';

TWI <='1 ';

ackq <='1 ';

ack <= TWI;

kitas

TWI <= temperatūra (conv_integer (count2));

count2 <= count2 - 1;

end if;

end if;- jei ackq ='1 'ir ack ='0' ir rising_edge (clk_comms), tada

jei ackq ='1 'ir ack ='0' ir clk_comms'Event ir clk_comms = "1", tada

priemonę <='1 ';

ackq <='0 ';

- elsif ackq ='1 'ir ack ='1' ir rising_edge (clk_comms), tada

elsif ackq ='1 'ir ack ='1' ir clk_comms'Event ir clk_comms = "1", tada

priemonę <='0 ';

ackq <='0 ';

end if;- jei gaunate ='1 'ir rising_edge (clk_comms), tada

jei gaunate ='1 'ir clk_comms'Event ir clk_comms = "1", tada

jei count2 = "0111" ir count = "01", tada

count <= count - 1;

kitas

data_temp (conv_integer (count2)) <= TWI;

count2 <= count2 - 1;

jei count2 = "0111", tada

ackt <='1 ';

gauti <='0 ';

elsif count2 = "1111", tada

gauti <='0 ';

end if;

end if;

end if;- jei ackt ='1 'ir falling_edge (clk_comms), tada

jei ackt ='1 'ir clk_comms'Event ir clk_comms = "1", tada

TWI <='0 ';

ackt <='0 ';

gauti <='1 ';

count <= "01";

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

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

galutinio proceso;

pabaigos elgesio;
 

Welcome to EDABoard.com

Sponsor

Back
Top