UART-Informationen auswerten

Gast #388553
Lesenswert?
• ▲
▼
ich benütze einen UART, der mir einen Empfangenen Byte mit einem
Byte_Empfangen Signal signalisiert. Daraufhin kann ich dieses Byte
abholen und den UART neu initialisieren mit Init_UART. Wie kann man auf
praktische Weise jeweils 3 Byte hintereinander auslesen, diese zu 24-Bit
zusammensetzen nach größe auswerten und vier verschiedene
Ausgangssignale erstellen?

Ich versuche die 3 byte in ein Register zu schreiben, und diese dann
auszuwerten. D.h. wenn die Empfangenen Byte größer als Zahl1 sind soll
Ausgangssignal_1 auf High gehen. Wenn die Empfangenen Bytes größer als
Zahl2 sind soll Ausgangssignal_2 auf High gehen u.s.w.

Der UART wird ständig abgehört und das Register immer wieder mit 3
neuen bytes aufgefüllt.

Bei der praktischen Umsetzung habe ich Schwierigkeiten, nach jedem
dritten Byte, die ich auslese den Registerinhalt komplett zu löschen.

Anfängerproblem :(

Auf eure Ratschläge und Tips würde ich mich sehr freuen.
Gast #388557
Lesenswert?
• ▲
▼
kann mir hier vielleicht jemand weiterhelfen einen VHDL Code zu
schreiben, der einen Zähler realisieren soll.
Der Zähler soll angeregt von einem Eingangssignal von 1..3 zählen, bei
3 ein externes Signal ausgeben und wieder auf 1 zurückgehen. Gezählt
soll das Eingangssignal, wenn es sich ändert L-->H
Der Zähler soll sich selbst resetten, wenn es bis 3 hochgezählt hat.


Ich scheitere an den Versuchen, dies zu schreiben, so simpel dies auch
erscheinen mag :(
Gast #388558
Lesenswert?
• ▲
▼
Was stimmt in diesem Code nicht?


ENTITY zaehler IS
  PORT
  (
    Eingangssignal:  IN STD_LOGIC;
    Ausgangssignal:  OUT std_logic
  );
END zaehler;


ARCHITECTURE Verhalten OF zaehler IS
signal A: integer range 0 to 2;
BEGIN

  PROCESS (Eingangssignal)
  BEGIN
    IF (Eingangssignal'event AND Eingangssignal = '1') THEN

     case A is

        when 0 =>   Ausgangssignal  <=   '0';
                      A <= 1;

        when 1 =>   Ausgangssignal  <=   '0';
                    A <= 2;

        when 2 =>   Ausgangssignal  <=   '1';
                    A <= 0;

    end case;

    END IF;

  END PROCESS;

END Verhalten;
Gast #388559
Lesenswert?
• ▲
▼
>Was stimmt in diesem Code nicht?

VHDL-mäßig prinzipiell korrekt. Was genau funktioniert denn nicht?
Wenn "Eingangssignal" kombinatorisch generiert wird, kannst Du
Probleme bekommen, weil das Signal dann durch Gatterlaufzeiten erzeugte
Störimpulse ("Glitches") besitzen kann. Das heisst dann wieder das Du
Flanken hasst, wo Du vielleicht keine erwartest.
Wie wird "Eingangssignal" erzeugt?
Gast #388560
Lesenswert?
• ▲
▼
Das Eingangssignal kommt aus einem UART-Modul. DIeser geht auf High,
wenn der UART ein neu empfangenes Byte zur Verfügung hat.

Mit dem oberen Code möchte ich aus dem UART 3 Bytes hintereinander
abholen können um diese weiter auszuwerten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren