LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; ENTITY Microphone IS PORT ( aufnahme_switch : in std_ulogic; --Switch der die Aufnahme über das Microphon ermöglicht clk_12MHz : in std_ulogic; clk_49kHz : in std_ulogic; --DA_CLR, 49k Samples/sec reset :in std_ulogic; AUD_ADCDAT :in std_ulogic; --ADC signal aus dem Audio Codec audio_peak : out std_ulogic ); END Microphone; ARCHITECTURE structure OF Microphone IS SIGNAL sample_flag: STD_ULOGIC := '0'; SIGNAL data_index: NATURAL RANGE 0 TO 15 := 0; signal aud_adcdata_in: std_ulogic_vector (15 downto 0); SIGNAL done_sample: std_ulogic :='0'; begin process (clk_12MHz, reset, clk_49kHz, sample_flag, AUD_ADCDAT, done_sample) begin if reset = '0' then audio_peak <= '0'; sample_flag <= '0'; done_sample <= '0'; data_index <= 15; elsif clk_12MHz'event and clk_12MHz = '1' then IF aufnahme_switch = '1' THEN IF clk_49kHz = '1' THEN sample_flag <= '1'; data_index <= 15; END IF; IF (sample_flag = '1') THEN IF (data_index > 0) THEN aud_adcdata_in(data_index) <= AUD_ADCDAT; data_index <= data_index - 1; ELSIF (data_index = 0) THEN aud_adcdata_in(data_index) <= AUD_ADCDAT; sample_flag <= '0'; done_sample <= '1'; END IF; END IF; --------------------Datenschwellwert--------------------------- --Am microphon liegt ohne eigabe eines Tones immer ein Wert um die x"7D48" an --Ein Schwellwert bei x"3EA4" (ungefähr die Hälfte) detektiret Töne in einem Frequenzbereich von ca. 400 bis 800Hz sicher IF done_sample = '1' and clk_49kHz = '1' THEN if aud_adcdata_in < x"3EA4" then --Mittelwert von Höchstwert ca. 7D48 (Wert wenn nichts ins Microgesprochen wird) audio_peak <= '1'; else audio_peak <='0'; --audio_peak ist ohne Ton auf '0', mit Ton zappelt der Wert mit 49kHz. end if; done_sample <= '0'; END IF; END IF; end if; end process; end architecture;