Hallo zusammen,
Ich bekommem einen 8Bit Wert geliefert der sich zu jeder Zeit ändern
kann.
Aufgrund dieses Wertes soll die Leistung z.B. einer Led eines Lüfters
oder was auch immer angepasst werden.
Ich hab das schon mal mit einem festen Wert gemacht:
1 | architecture Behavioral of blink is
|
2 |
|
3 | constant max_count : natural := 50000000; -- 50M um auf 50 Hz zu kommen
|
4 | signal count : natural range 0 to max_count; --der Zähler von 0 bis 50M
|
5 |
|
6 | begin
|
7 |
|
8 | blink : process (clk,a,b) --wird ausgeführt bei Änderung des Taktes, der beides Schalter
|
9 |
|
10 | begin
|
11 |
|
12 | if a = '1' and b = '0' then --wenn schalter a 1 ist und b 0, soll die LED mit 1Hz blinken
|
13 | if rising_edge (clk) then --rising_edge --> Bei Takt wird 1
|
14 | count <= count+1; --count +1
|
15 | if count < max_count/2 then --so lange count kleiner als 25M ist mach die LED an
|
16 |
|
17 | c <= '0';
|
18 | elsif count > max_count/2 then --sobald >25M aus
|
19 | c <= '1';
|
20 | elsif count > max_count then --wenn count 50M übersteigt dann wird der Zähler zurück gesetzt und es geht von vorn los
|
21 | count <= 0;
|
22 | end if;
|
23 | end if;
|
24 | end if;
|
25 | if a = '0' and b = '1' then --wenn b aktiviert ist wird die led um 50% gedimmt.
|
26 | c <= clk;
|
27 | end if;
|
28 | if (a = '1' and b='1') or (a='0' and b='0') then -- sont bleibt c aus
|
29 | c <= '1';
|
30 | end if;
|
31 |
|
32 | end process blink;
|
33 |
|
34 | end Behavioral;
|
jetzt hoffe ich dass ich das wieder so machen kann, es ändert sich ja
eigendlich nur der max_count Wert (der bisher fest eingestellt ist). Nur
binn ich momentan noch mit den gegebenen 8bit Wreten überfordert.
Mein Ansatz:
1 | constant max_count : std_logic_vector(7 downto 0) := PWM1FanInsideValue;
|
2 | signal count : std_logic_vector(7 downto 0) range "00000000" to max_count;
|
So gehts nicht.
geht das villeicht nur wenn ich den Binärwert zuvor in Dez umwandle?
Danke schon mal :-)