Forum: Mikrocontroller und Digitale Elektronik Wahrheitstabelle zu logic konvertieren.


von Anfänger (Gast)


Lesenswert?

Hallo,

wie kann ich eine Wahrheitstabelle zu einer Logikverknüpfung 
konvertieren/ausrechnen, vielleicht gibt es ein Programm wo ich die 
Tabelle manuell eingeben kann, und daraus eine logische Verknüpfung 
generiert.

A,B,Z,U,V,W sind Eingänge
C ist Ausgang

Oder wie gehe ich vor, kann mir es einer sagen?
1
  IN IN IN IN IN IN Out  
2
  A  B  Z  U  V  W  C
3
  
4
  0  1  1  0  1  1  1  
5
  1  1  1  0  1  1  1  
6
  1  0  1  0  1  1  1  
7
  0  0  1  0  1  1  0  
8
                
9
  0  1  0  0  1  1  1  
10
  1  1  0  0  1  1  0  
11
  1  0  0  0  1  1  1  
12
  0  0  0  0  1  1  0  
13
                
14
  0  0  0  0  1  0  0  
15
  0  1  0  0  1  0  0  
16
  1  1  0  0  1  0  0  
17
  1  0  0  0  1  0  1  
18
                
19
  1  0  0  1  1  0  1  
20
  0  0  0  1  1  0  1  
21
  0  1  0  1  1  0  0  
22
  1  1  0  1  1  0  0  
23
                
24
  0  1  0  1  0  0  0  
25
  1  1  0  1  0  0  0  
26
  1  0  0  1  0  0  0  
27
  0  0  0  1  0  0  1  
28
                
29
  0  1  0  1  0  1  1  
30
  1  1  0  1  0  1  0  
31
  1  0  0  1  0  1  0  
32
  0  0  0  1  0  1  1  
33
                
34
  1  0  0  0  0  1  0  
35
  0  0  0  0  0  1  0  
36
  0  1  0  0  0  1  1  
37
  1  1  0  0  0  1  0

Gruß
Anfänger

von Karl H. (kbuchegg)


Lesenswert?

> Oder wie gehe ich vor, kann mir es einer sagen?

Dein Stichwort lautet: Quine-McCluskey
http://de.wikipedia.org/wiki/Verfahren_nach_Quine_und_McCluskey

http://logik.phl.univie.ac.at/~chris/gateway/qmo.html

von Peter II (Gast)


Lesenswert?

was ist mit den andere kombinationen - was soll das rauskommen?

von Volker Z. (vza)


Lesenswert?

Oder das Karnaugh-Diagramm.
http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm

Volker

von Anfänger (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> http://logik.phl.univie.ac.at/~chris/gateway/qmo.html

Danke, wenn ich aber das hier bei eingebe
http://logik.phl.univie.ac.at/~chris/cgi-bin/cgi-form?schluessel=0000bdb2

011011
111011
101011
001011
010011
110011
100011
000011
000010
010010
110010
100010
100110
000110
010110
110110
010100
110100
100100
000100
010101
110101
100101
000101
100001
000001
010001
110001

bekomme ich das hier raus:
~c & e & ~f v ~c & d & ~f v ~c & ~e & f v ~d & e & f

Kann es stimmen?!

von Karl H. (kbuchegg)


Lesenswert?

Anfänger schrieb:

> bekomme ich das hier raus:
> ~c & e & ~f v ~c & d & ~f v ~c & ~e & f v ~d & e & f
>
> Kann es stimmen?!


Probiers aus!
nimm eine Zeile nach der anderen aus deiner Tabelle, setze die Werte 
ein, werte den Ausdruck aus und vergleiche mit dem was rauskommen 
müsste.

Schliesslich ist das deine Aufgabe und nicht unsere.

von Jens B. (jensboe)


Lesenswert?

Kann nicht Stimmen, C ist doch dein Ausgang, der kann dann dann nicht 
Plötzlich Eingang werden ;) du musst die Buchstaben des Programms noch 
den echten Buchstaben zuweisen.
Und dann herausfinden welche Operation höherwertig ist.

Wenn du absolut nicht weiter weist, nimmst du dir am besten ein Blatt 
Papier malst dir das was du da raus hast, als Logik Gatter auf. Dann 
machst du alle Eingänge 0 und guckst was raus kommt, dann den Eingang W 
eins, wieder gucken was raus kommt, dann den eingang V, dann  W V usw 
(binär hochzählen).

Das wären insgesamt 64 Zustände zum durchprobieren.

Wieso hast du eigentlich gleich eine Aufgabe mit 64 möglichen Zuständen 
bekommen, wir sind damals ganz harmlos mit mit 2 angefangen und haben 
uns tapfer hochgearbeitet.

Das ist wie das 1x1 das muss man einmal verstehen, dann zig mal anwenden 
und dann kann man es nahezu auswendig.

von Anfänger (Gast)


Lesenswert?

jetzt sollte es stimmen.
Alle Null bei "C" Out entfernt:
http://logik.phl.univie.ac.at/~chris/cgi-bin/cgi-form?schluessel=0000bdb2
1
011011
2
111011
3
101011
4
010011
5
100011
6
100010
7
100110
8
000110
9
000100
10
010101
11
000101
12
010001

und es komm das raus, jetzt passt es, oder:
1
~a & ~b & ~c & d & ~e v a & ~b & ~c & ~d & e v ~b & ~c & d & e & ~f v ~a & b & ~c & ~e & f v ~a & b & ~d & e & f v a & c & ~d & e & f

Das muss ich mit logik-Bausteien oder cpld aufbauen :-)

Zuweisung:
a=A, b=B, c=Z, d=U, e=V, f=W

von Oliver J. (skriptkiddy)


Lesenswert?

Anfänger schrieb:
> Das muss ich mit logik-Bausteien oder cpld aufbauen :-)

Ein EEPROM als LUT müsste auch gehen.

Gruß Oliver

von ge-nka (Gast)


Angehängte Dateien:

Lesenswert?

Logikkonverter im "Multisim" kann dir deine Wahrheitstabelle in 
booleschen Ausdruck umwandeln oder in Logikbausteine und wieder zurück.

von Anfänger (Gast)


Lesenswert?

ge-nka schrieb:
> Logikkonverter im "Multisim" kann dir deine Wahrheitstabelle in
> booleschen Ausdruck umwandeln oder in Logikbausteine und wieder zurück.

Danke, ab welcher version steht die Funktion zur Verfügung?

Oliver J. schrieb:
> Ein EEPROM als LUT müsste auch gehen.
> cpld aufbauen :-)

Von denn beiden Teilen habe ich ehrlich gesagt keine Ahnung,
es muss aber ziemlich klein sein am besten in einem 20pin ssop oder soic 
Gehäuse.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Anfänger schrieb:
> es muss aber ziemlich klein sein am besten in einem 20pin ssop oder soic
> Gehäuse.

Was hast du eigentlich vor? Warum nimmst du nicht die Tabelle wie sie 
ist und lässt den Ausgang dann direkt nach dieser Tabelle schalten? Das 
wäre garantiert die einfachste und vom Programmablauf her schnellste 
Variante.

Aber vielleicht ist dein Ziel etwas ganz anderes?

von Anfänger (Gast)


Lesenswert?

Markus W. schrieb:
> Was hast du eigentlich vor?

die Daten stammen von Original opt. Encoder, ich will aber ein anderen 
Encoder (anderer Hersteller) in System einbinden, daher bräuchte ich 
dieses "C" Out, ohne diese Sygnal geht das ganze System nicht.

Markus W. schrieb:
> Tabelle wie sie
> ist und lässt den Ausgang dann direkt nach dieser Tabelle schalten? Das
> wäre garantiert die einfachste und vom Programmablauf her schnellste

Das habe ich mir auch schon überlegt, A oder B an Eingang von µC mit 
changen Interrupt, im Interrupt die Eingange A,B,Z,U,V,W auswerten 
(Tabelle), und Ausgang C direkt schalten.
Die Frequenz ist ziemlich hoch von A oder B Signalen:
(15bit / 4) * 1500U/min = 12,288Mhz

von Peter D. (peda)


Lesenswert?

Anfänger schrieb:
> (15bit / 4) * 1500U/min = 12,288Mhz

Also mein Rechner sagt: 204,8kHz.
Das ist mit nem AVR zu schaffen.


Peter

von Yalu X. (yalu) (Moderator)


Lesenswert?

Sind alle im ersten Beitrag nicht aufgeführten Eingangskombinationen
don't-care? Wenn ja, dann löst ein halber 74HC153 das Problem.

von Anfänger (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Also mein Rechner sagt: 204,8kHz.
> Das ist mit nem AVR zu schaffen.
(15bit / 4) * 1500U/min = 15bit ist die Auflösung pro Encoder/Umdrehung

(32758 / 4) * 1500 = 8192 * 1500 = 12288000 Hz (max Frequenz)

von Anfänger (Gast)


Lesenswert?

Yalu X. schrieb:
> Sind alle im ersten Beitrag nicht aufgeführten Eingangskombinationen
> don't-care? Wenn ja, dann löst ein halber 74HC153 das Problem.

Nein, es sind noch einmal genau soviel in eine andere Richtung.

Ist es mit zwei halben 74HC153 zu lösen, und wie?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Anfänger schrieb:
> Nein, es sind noch einmal genau soviel in eine andere Richtung.

Ich verstehe zar nicht ganz, was du damit meinst, kann aber mir gut
vorstellen, dass die restlichen Kombinationen der gleichen Regel
gehorchen.

So funktioniert es jedenfalls mit den von dir aufgelisteten
Kombinationen:
1
  A — S0
2
  B — S1
3
  U — 1I0
4
  V — 1I1
5
  W — 1I2
6
  Z — 1I3
7
  C — 1Y
8
 5V — VCC
9
GND — GND
10
GND — 1/E — 2/E 0 — 2I0 — 2I1 — 2I2 — 2I3

Mit A und B wird selektiert, welches der Signale U,V, W und Z zum
Ausgang C geschaltet wird. Die letzte Zeile dient nur dazu, die
unbenutzten Eingänge des zweiten Multiplexers auf definierte Pegel zu
legen.

> Ist es mit zwei halben 74HC153 zu lösen, und wie?

Probier mal aus, ob die obige Logik auch für die restlichen Kombinatio-
nen funktioniert. Wenn nicht, dann poste mal alle Kombinationen.

von Oli P. (atomicjunkie)


Lesenswert?

Anfänger schrieb:
> (15bit / 4) * 1500U/min = 15bit ist die Auflösung pro Encoder/Umdrehung
>
> (32758 / 4) * 1500 = 8192 * 1500 = 12288000 Hz (max Frequenz)

1 U/min = 1 U/60s -> 1500 U/min = 1500 U/60s = 25 U/s

-> (32758 / 4) * 25 U/s = 8192 * 25/s= = 204800/s = 204,8kHz
(Umdrehungen ist keine Einheit)

von Anfänger (Gast)


Lesenswert?

Oliver K. schrieb:
> 1 U/min = 1 U/60s -> 1500 U/min = 1500 U/60s = 25 U/s
>
> -> (32758 / 4) * 25 U/s = 8192 * 25/s= = 204800/s = 204,8kHz
> (Umdrehungen ist keine Einheit)

Ja, stimmt ich hab vergessen durch 60 zuteilen..
Rechenfehler, dann ist natürlich kein Problem, das packt locker der µC..

Yalu X. schrieb:
> Mit A und B wird selektiert, welches der Signale U,V, W und Z zum
> Ausgang C geschaltet wird. Die letzte Zeile dient nur dazu, die
> unbenutzten Eingänge des zweiten Multiplexers auf definierte Pegel zu
> legen.

Ja vielen Dank, versuche ich morgen zu simulieren,

Bei original encoder ist, ein 16pin IC, Hersteller hat eigene 
Bezeichnung, daher unbekannt, aber am PIN 9 und 10 hängt ein 12Mhz 
Quarz, ich dachte ist vielleicht eine programmierte Logik, µC oder 
ähnliches.

von Bernhard S. (b_spitzer)


Angehängte Dateien:

Lesenswert?

Wenn das ganze sowieso in einen Logikchip rein muss, dann lass' die 
händische Minimierung sein. Die Tabelle sieht in ABEL so aus:
1
Truth_Table
2
//IN IN IN IN IN IN   Out  
3
([A, B, Z, U, V, W] -> C)
4
  
5
 [0, 1, 1, 0, 1, 1] -> 1;  
6
 [1, 1, 1, 0, 1, 1] -> 1;
und so weiter... Mit der gesetzten Option @DCSET (Lattice 
ispLever/Synario) nutzt der Compiler die freien Zeilen für Don't care. 
Die erzeugten Gleichungen kann man sich anschauen, aber wozu auch...

Ansonsten gibt Deine Tabelle ein ziemlich großes KV-Symmetriediagramm 
(gegenüber KV-Tafeln geht das auch mit 5,6, 7.. Variablen).
Ich habe mal ein Diagramm für 6 Variablen angehängt. Die Feldindizes 
sind hierbei in hexadezimaler Schreibweise, so erkennt man die 
Symmetrien viel besser. Feld 18 ist z.B. Symmetrisch zum Feld 38, man 
kann aber auch die Felder 7, 17, 27 und 37 ale 4er-Block zusammenfassen. 
Wichtig ist, dass man seine Variabeln in der Tabelle und im Diagramm so 
anordnet, wie im Beispiel. Bei deiner Schaltung wäre dann a=W, b=V... 
A=f. Der Feldindex  für eine Zeile ist einfach die Hex-Zahl mit den 6 
Binärstellen f..a. Viel Spass beim Tüfteln!

von Erich (Gast)


Lesenswert?

C       =  A      & /B      &  V
           + /A      &  B      &  W
           + /A      & /B      &  U
           +  B      &  Z

von Erich (Gast)


Lesenswert?

$DEVICE
   PALCE16V8       ;
$PIN
    1 = A ;
    2 = B ;
    3 = Z ;
    4 = U ;
    5 = V ;
    6 = W ;
   12 = C ;
$END
*
D0000*
G0*
QP020*
QF02194*
F0*
L01792 10011111111101111111111111111111*
L01824 01101111111111110111111111111111*
L01856 10101111011111111111111111111111*
L01888 01110111111111111111111111111111*
L02048 00000001*
L02056 00000000000000000000000000000000*
L02088 00000000000000000000000000000000*
L02120 11111110*
L02128 00000000000000000000000000000000*
L02160 00000000000000000000000011110000*
L02192 10*
C10C3*
0000

von Anfänger (Gast)


Lesenswert?

Mein erstes Programm, passt es?
Programm WinCupl:
1
Name            ENCODER;
2
Partno          ;
3
Revision        01;
4
Date            8/10/99;
5
Designer        none;
6
Company         none;
7
Location        None;
8
Assembly        None;
9
Device          g16v8a;
10
11
/* *************** INPUT PINS *********************/
12
PIN 1 = A; 
13
PIN 2 = B; 
14
PIN 3 = Z; 
15
PIN 4 = U; 
16
PIN 5 = V; 
17
PIN 6 = W; 
18
19
/* *************** OUTPUT PINS *********************/
20
PIN 11 = Z_OUT; 
21
PIN 13 = C_OUT; 
22
PIN 14 = B_OUT; 
23
PIN 15 = A_OUT;  
24
25
26
27
28
C_OUT = A & !B & V 
29
     # !A & B & W 
30
     # !A & !B & U 
31
     # B & Z;

Und das ist der JEDEC-File:
1
CUPL(WM)        5.0a  Serial# 
2
Device          g16v8as  Library DLIB-h-40-2
3
Created         Thu Sep 06 11:00:02 2012
4
Name            ENCODER
5
Partno          
6
Revision        01
7
Date            8/10/99
8
Designer        none
9
Company         none
10
Assembly        None
11
Location        None
12
*QP20 
13
*QF2194 
14
*G0 
15
*F0 
16
*L01536 10011111111101111111111111111111
17
*L01568 01101111111111110111111111111111
18
*L01600 10101111011111111111111111111111
19
*L01632 01110111111111111111111111111111
20
*L02048 00000010000000000000000000000000
21
*L02112 00000000111111011111111111111111
22
*L02144 11111111111111111111111111111111
23
*L02176 111111111111111110
24
*C18AC
25
*89A7

von Anfänger (Gast)


Lesenswert?

Es funktioniert jetzt ganz gut mit ATF16V8, viel Dank für die Hilfe.

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.