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.
Ich habe so was ähnliches in einer Statemachine realisiert. Nach 3 empfangenen Bytes einfache ein DataReadyFlg setzen, die Daten abholen. Und Statemachine rücksetzen.... Sebastian
Hi Sebastian, könntest du vielleicht den Code deiner Statemachine posten? Würde mir bei Lösung meines Problems bestimmt helfen. Thanks!
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 :(
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;
>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?
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.
Hallo, Ich hätte eine Frage: Ist es so in Ordnung, dass man hier keinen Initialisierungswert für A benützen muss, d.h. zu Anfang des Programmes A:=0 setzen muss?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.