|
|
|
Anfang
zurück
weiter
Ende
|
Autor |
Beitrag |
Daniel
Gast
|
Erstellt: 31.10.05, 11:10 Betreff: Frequenzmessung mit VHDL
drucken
Thema drucken weiterempfehlen
|
|
|
Hallo Leute,
da ich in VHDL noch kein wirklicher Profi bin, bräuchte ich mal eure Hilfe. Ich arbeite mit Spartan 3 von Xilinx (50 MHz Quarz). Ich möchte einen Frequenzeingang an meinem FPGA reservieren, der ein offsetbehaftetes Rechtecksignal mit einer Periodendauer von 50% misst. Genauer, dessen Frequenz misst. Der Frequenzbereich des Rechtecksignal liegt zw. 28,9kHz und ca. 45kHz. Das Ergebnis würde ich gerne als std_logic_vector weiterverarbeiten und am Ausgang als frequenzsynchrones Pulssignal wieder ausgeben. Dabei soll die Pulsbreite über eine Konstante im Quellcode eingestellt werden können.
Habe leider noch wenig Erfahrung mit VHDL und freue mich deshalb über jede Hilfe die ich kriegen kann.
Vielleicht könnt Ihr mir ja weiterhelfen oder habt ein ähnliches Problem schon mal gehabt.
Vielen Dank im Voraus
Gruß Daniel
|
|
nach oben |
|
|
xGCFx
Stammgast
Beiträge: 33 Ort: Dresden
|
Erstellt: 31.10.05, 16:28 Betreff: Re: Frequenzmessung mit VHDL
drucken
weiterempfehlen
|
|
|
Also, die Frequenz an einem Eingang würd grob gesagt ich so messen:
- Eingang mit sehr viel grösserer Frequenz abtasten
- pro Abtasten einen Zähler erhöhen, wenn high am Eingang
- 2*Zählerstand is dann im Verhältnis zur Abtastfrequenz deine Eingangsfrequenz
|
|
nach oben |
|
|
silvan
Gast
|
Erstellt: 29.01.08, 21:49 Betreff: Re: Frequenzmessung mit VHDL
drucken
weiterempfehlen
|
|
|
Hallo Leute
Ich habe das mit der Frequenzmessung mal umgesetzt... allerdings funktioniert es irgendwie nicht so ganz und weiss nicht, ob meine Umsetzung fehlerhaft ist oder ob mein Xilinx-Board den Geist aufgegeben hat...
Der Code kommt aus dem folgenden Kontext heraus. Eine Hardware (Stimmgerät mit Mikrophon) liefert ein Rechtecksignal mit der Frequenz der am Mikrofon eingespielten Tonhöhe. Diese Frequenz soll ermittelt werden und die Differenz von der Grundwelle (a, 440hz) aufm Display ausgegeben werden.
et voilà... vielleicht sieht jemand was aufn ersten Blick, wäre cool!
************************
library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_ARITH.all;
entity FreqFind is generic ( CLK_rate :integer := 50_000_000 ); Port( rst: in std_logic; clk: in std_logic; FreqIn: in std_logic; FreqOut: out std_logic_VECTOR(15 downto 0); CountOut: out std_logic_VECTOR(15 downto 0) ); end FreqFind; architecture A1 of FreqFind is
begin
process(rst,clk)
variable abtastzaehler :integer :=0; variable temp :integer; variable FreqInV :std_logic; variable FreqInV_1 :std_logic; variable Tcount :integer; begin if rst = '1' then -- im Resetfall abtastzaehler :=0; Tcount := 11; elsif rising_edge(clk) then -- im Normalfall FreqInV := FreqIn; -- Zuweisung des Eingangssignals abtastzaehler := abtastzaehler+1; -- Abtastcounter
if FreqInV_1 ='0' and FreqInV='1' then Tcount := Tcount-1; FreqInV_1 := FreqInV; end if; if (Tcount = 0) then CountOut <=conv_std_logic_vector(abtastzaehler,16); FreqOut <= conv_std_logic_vector(11*50_000_000,16); - Tcount := 11; abtastzaehler :=0; end if; end if; end process; end A1;
|
|
nach oben |
|
|
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|