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
Re: Frequenzmessung mit VHDL
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
Re: Frequenzmessung mit VHDL
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) );