Forum: FPGA, VHDL & Co. Warum ist der Ausgang immer auf 1


von Kurz (Gast)


Lesenswert?

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity pwm1 is
    Port (
Oszilator       :   in     bit; Plus_Taster      :   in     std_ulogic;
Minus_Taster             :        in            std_ulogic;
Channel_1      :  out    std_ulogic;
Channel_2      :  out    std_ulogic;
Red_Frequenz_LED  :  out    std_ulogic);
end pwm1;

architecture behavior of pwm1 is

  constant   PWM_Frequenz  :  integer  :=   660;
  constant  PWM_Phase_MAX  :  integer  :=  330;

  signal     count_Red_Frequenz  :  unsigned(0 to 24) := 
"0000000000000000000000000";
  signal   count  : integer  range 0 to PWM_Frequenz;
  signal  PWM_Phase  :   integer range 0 to PWM_Phase_MAX := 0;
  signal  Signal_Channel_1  :  std_ulogic;
  signal  Signal_Channel_2  :  std_ulogic;
  signal  Red_Frequenz    :  std_ulogic;


begin


process (Oszilator)
  begin
    if Oszilator='1' and Oszilator'event
    then
        count_Red_Frequenz <= count_Red_Frequenz + 1;
    end if;
    Red_Frequenz_LED <= count_Red_Frequenz(0);
  end process;



process (PWM_Phase)
  begin
    if count_Red_Frequenz(0) = '1' and Plus_Taster = '1'
    then
      if PWM_Phase < PWM_Phase_MAX
      then
      PWM_Phase <= PWM_Phase + 1;
      end if;
    end if;

    if count_Red_Frequenz(0) = '1' and Minus_Taster = '1'
    then
      if PWM_Phase > 0
      then
      PWM_Phase <= PWM_Phase - 1;
      end if;
    end if;
  end process;


process (count)
  begin
    if count < PWM_Frequenz
    then
      count <= count + 1;
    else
      count <= 1;
    end if;
  end process;

process (Signal_Channel_1)
  begin
    if count < (PWM_Frequenz/2)
    then
    Signal_Channel_1 <= '1';
    else
    Signal_Channel_1 <= '0';
    end if;
  end process;


channel_1 <= signal_channel_1;

end behavior;

von Kurz (Gast)


Lesenswert?

Das Ganze soll ein Phase-Shift-PWM werden.

Und ist noch nicht fertig.

Ich wollte die Funktion von Channel_1 am Oszi testen und habe bemerkt 
dass der immer auf 1 ist.

Weiß jemand was ich falsch gemacht habe?

von Kurz (Gast)


Lesenswert?

Ich habe den Fehler nun dcoh noch gefunden:

Ich habe vergessen die schleifen an den Oszilator (Clock) zu koppeln,
deswegen konnte gar nichts gezählt werden.

Trotzdem Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.