Forum: Mikrocontroller und Digitale Elektronik Capture int-State mit Logikgattern und anderen einfachen Funktionen


von Log I. (Firma: Logic) (logicnor)


Lesenswert?

Hallo Leute,

ich habe eine begrenzte Anzahl von Funktionen zur Verfügung und möchte 
speichern (in Bool) wenn ein bestimmter State (1-15) durchlaufen wurde. 
Dieser bestimmte State wird als UINT bereitgestellt.
Mir steht nur der State Index als Infomation zur Verfügung. Nach der 
Erfassung eines States soll ein boolsches Signal solange anliegen bis
ich dieses mit einem weiteren boolschen Signal zurücksetze (Defaultwert 
des Reset Signals kann 1 oder 0 sein). Wichtig dabei ist: Wenn der 
gefragte State schon anliegt und dann ein Reset durchgeführt wird
soll dieser erst beim nächsten Eintreffen des States erfasst werden!

Ich kann Komparatoren, Multiplexer, AND,NAND,OR,NOR etc. (2 Eingänge, 1 
Ausgang) -Gatter und Bitshift-Funktionen in Kombination mit Bitmasken 
nutzen.

Das Mittel der Wahl waren bisher Komparatoren mit ein einer 
nachgeschalteten Logik. Allerdings habe ich dabei zwei Komparatoren und 
7 Gatter verbraucht.
Die Anzahl der Funktionen würde ich gerne reduzieren, allerdings habe 
ich noch keine Idee für die Optimierung.

Für gute Ideen bin ich Dankbar!

Gruß LogicNor

von Log I. (Firma: Logic) (logicnor)


Lesenswert?

Danke für den Ratschlag, aber das System ist fest. (Anwendung auf einem 
Servoumrichter). Wie gesagt, es funktioniert, aber ich suche nach einer 
optimierten Lösung.

von Bernd K. (prof7bit)


Lesenswert?

Walter schrieb im Beitrag #4164579:
> ich kann dir dazu raten ein FPGA zu verwenden.

Wäre das in dem Fall nicht ein bisschen Overkill und 42000 Nummern zu 
groß?


@Log Ic: Was meinst Du mit "Das System ist fest"?

von Falk B. (falk)


Lesenswert?

@Log Ic (Firma: Logic) (logicnor)

>Danke für den Ratschlag, aber das System ist fest. (Anwendung auf einem
>Servoumrichter). Wie gesagt, es funktioniert, aber ich suche nach einer
>optimierten Lösung.

Dazu bräuchte man wenigsten mal eine etwas verständliche 
Problembeschreibung. Aus deiner reichlich abstrakten Beschreibung würde 
ich herauslesen, dass du eine simple Statemachine hast, welche du 
mittels einfacher Logikgatter aufbauen willst. Kann man machen, und es 
gibt diverse Programme, die dabei die Minimirung/Optimierung der 
Logikgatter unterstützen. Aus technischer Sicht würde man sowas heute 
einfach in einen CPLD packen und fertig. Wenn die Statemachine nicht mit 
allzu hohem Takt läuft (kleiner 10kHz), reicht auch ein kleiner uC. FPGA 
ist eher Overkill.

von c-hater (Gast)


Lesenswert?

Log Ic schrieb:

> ich habe eine begrenzte Anzahl von Funktionen zur Verfügung und möchte
> speichern (in Bool) wenn ein bestimmter State (1-15) durchlaufen wurde.
> Dieser bestimmte State wird als UINT bereitgestellt.
> Mir steht nur der State Index als Infomation zur Verfügung. Nach der
> Erfassung eines States soll ein boolsches Signal solange anliegen bis
> ich dieses mit einem weiteren boolschen Signal zurücksetze (Defaultwert
> des Reset Signals kann 1 oder 0 sein). Wichtig dabei ist: Wenn der
> gefragte State schon anliegt und dann ein Reset durchgeführt wird
> soll dieser erst beim nächsten Eintreffen des States erfasst werden!
>
> Ich kann Komparatoren, Multiplexer, AND,NAND,OR,NOR etc. (2 Eingänge, 1
> Ausgang) -Gatter und Bitshift-Funktionen in Kombination mit Bitmasken
> nutzen.
>
> Das Mittel der Wahl waren bisher Komparatoren mit ein einer
> nachgeschalteten Logik. Allerdings habe ich dabei zwei Komparatoren und
> 7 Gatter verbraucht.
> Die Anzahl der Funktionen würde ich gerne reduzieren, allerdings habe
> ich noch keine Idee für die Optimierung.

Kompletter Labersülz vom Feinsten. Wenn du das Problem nicht 
verständlich aufbereiten kannst, hast du es mit sehr hoher 
Wahrscheinlichkeit selber nicht richtig verstanden.

Also gehe in dich und versuche es noch einmal zu durchdenken.

Und dann lieferst du eine Logiktabelle oder einen PAP oder irgendeine 
andere logisch konsistente Darstellung des Problems. Wenn dich das 
überfordert, bist du krass unfähig und mußt entweder dazulernen oder 
dumm sterben.

So einfach ist das in der Welt der formalen Logik.

von LogicNor (Gast)


Lesenswert?

Das System auf dem die Abarbeitung erfolgt kann ich nicht ändern.
Die Statemachine läuft auf dem System Es gibt nur eine begrenzte Anzahl 
von Logikbausteinen etc.. Ich komme auf Applikationsebene nur an den 
Index der Statemachine. Ich will nur eine Zahl vorgeben und wenn der 
Index gleich dieser Zahl ist soll dies gespeichert werden. Dieses Signal 
soll solange anstehen bis ich es zurücksetze.

Wenn nach einem Reset schon Index=Zahl vorliegt, soll dies noch nicht 
erfasst werden. Erst wenn vorher  einmal Index<>Zahl vorliegt. Sorry, 
hab gerade nur das Handy zum schreiben. Eine Pap kann ich später 
nachliefern.    Gruß und schönen Dank!

von Falk B. (falk)


Lesenswert?

@ LogicNor (Gast)

>Das System auf dem die Abarbeitung erfolgt kann ich nicht ändern.
>Die Statemachine läuft auf dem System Es gibt nur eine begrenzte Anzahl
>von Logikbausteinen etc..

Rde doch mal Klartext! Das klingt nach einer SPS oder ähnlichem.
Was für eine Hard- und Software hast du?

> Ich komme auf Applikationsebene nur an den
>Index der Statemachine. Ich will nur eine Zahl vorgeben und wenn der
>Index gleich dieser Zahl ist soll dies gespeichert werden. Dieses Signal
>soll solange anstehen bis ich es zurücksetze.

Klingt sehr nach Software. Also musst du eine weitere State machine 
schreiben, welche exakt diese tut.

von LogicNor (Gast)


Lesenswert?

Hallo,
ich schrieb oben, dass es sich um eine Anwendung auf einem 
Servoumrichter handelt. (B&R Acopos). Dort kann man diese Bausteine 
tabellarisch mit Pointern verknüpfen. Die kommunikation zur sps findet 
über read/write funktionen statt. (status und reset).

von Falk B. (falk)


Lesenswert?

@ LogicNor (Gast)

>ich schrieb oben, dass es sich um eine Anwendung auf einem
>Servoumrichter handelt. (B&R Acopos). Dort kann man diese Bausteine
>tabellarisch mit Pointern verknüpfen. Die kommunikation zur sps findet
>über read/write funktionen statt. (status und reset).

Schön, aber weder können noch müssen wir hellsehen! Lies mal was zum 
Thema Netiquette! Danke.

von Peter D. (peda)


Lesenswert?

Ich verstehe immer nur Bahnhof.

Versuche mal die Aufgabe Deiner Frau zu erklären und dann schreibt das 
hier genauso hin.

von LogicNor (Gast)


Lesenswert?

Ich würde ihr sagen. Ich zeige dir nun fortlaufen Zahlen. Ich suche die 
Zahl z.B. 8. Wenn du einen Wechsel auf genau diese erkennst, dann hebe 
die Hand . Die Hand darfst du erst senken, wenn ich sage "senken".  :). 
Ich denke ich mache morgen mal ne Zeichnung.

von Falk B. (falk)


Lesenswert?

Wo liegt denn das Problem? Ein Prozess in deiner Software hat eine 
Variable, welche den Zustand einer Statemachine darstellt. Du willst 
diesen Zustand überwachen, ob irgendwann mal Zustand X erreicht wird. 
Nach eigenen Angaben kannst du in der Software an anderer Stelle diesen 
Zustand auslesen. Und genau DORT kannst du die gewünschte Funktion 
umsetzen. Das geht auch in Digitallogik, sogar in unechter, welche in 
Software realisiert wird. Man braucht nichts weiter als einen N-Bit 
Komparator und ein RS-FlipFlop. Der Komparator vergleicht den State mit 
dem gesuchten State und setzt bei Gleicheit das RS-FlipFlop. Mit dem 
Reset-Eingang des RS FlipFlops kann man es dann bei Bedarf zurücksetzen.

von Log I. (Firma: Logic) (logicnor)


Lesenswert?

Ich stimme dir zu, allerdings gab es noch eine weitere Bedingung.
Nach einem Reset muss zunächst ein Zustandswechsel erfolgen bis die 
Erfassung greift. Das heisst z.B..

1. Ich suche den State 8.
2. State 8 liegt gerade an.
3. Ich führe einen Reset durch
4. State 8 liegt immer noch an.
=> Es darf noch keine Erfassung erfolgen (kein Zustandswechsel)
5. Es folgen andere States...
6. Dann kommst wieder State 8
7. State 8 soll erfasst werden.

Weiterhin würde ich halt mit möglichst wenigen Logikelementen auskommen.

Gruß LogicNor

von Falk B. (falk)


Lesenswert?

@ Log Ic (Firma: Logic) (logicnor)

>Nach einem Reset muss zunächst ein Zustandswechsel erfolgen bis die
>Erfassung greift. Das heisst z.B..

>Weiterhin würde ich halt mit möglichst wenigen Logikelementen auskommen.

Dann muss den Wechsel von "nicht erfasst" zu "erfasst" dekodieren 
(synchrone Flankenerkennung). Das macht man ganz einfach durch die 
Verzögerung des SET-Signals mit einem normalen D-FlipFlop. Nur wenn das 
Signal vor dem FlipFlop aktiv ist und nach dem FlipFlop inaktiv 
(steigende Flanke), dann wird das RS-FlipFlop gesetzt.

von LogicNor (Gast)


Angehängte Dateien:

Lesenswert?

Ja das stimmmt. Meine bisherige Lösung war folgende (siehe Anhang).
Komparatoren habe ich genug aber Logic-Gatter nur wenige....klingt 
komisch, ist aber so.

Somit habe ich in dieser Variante 5 Gatter verbraucht...
Ist es möglich mit weniger auszukommen?

Gruß LogicNor

von LogicNor (Gast)


Lesenswert?

Ups Fehlerteufel.

(1>2) ist falsch...

(1!=2) ist richtig

von c-hater (Gast)


Lesenswert?

Falk Brunner schrieb:

> Wo liegt denn das Problem?

Hast du das wirklich nicht erkennen können?

Ich beneide dich für deine grenzenlose Langmut. Du mußt gelernter Lehrer 
oder irgend was in der Art sein, normale Menschen können mit dieser 
geballten Idiotie, wie sie der TO geliefert hat, einfach nicht derart 
ruhig umgehen.

Aber bedenke: Es gibt nicht wenige Lehrer, die genau deswegen irgendwann 
in der Klapse landen. Opfer ihres Berufes...

von LogicNor (Gast)


Lesenswert?

@C-hater: Wenn ich mir deine gesammelten Werke hier im Forum anschaue, 
musst du ein sehr zufriedener Mensch sein. :)

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.