www.mikrocontroller.net

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


Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.