3 Eingänge - Ausgang "1" wenn genau 1 Eingang aktiv ist

Moderator Persönliche Seite #4029751
Lesenswert?

Ingo schrieb:
> W wie Wurst schrieb:
>> 3-fach XOR

Auf den ersten Blick: Ein 3-fach XOR gibt es nicht. Bei einem EXOR ist 
der Ausgang 1, wenn alle Eingänge verschieden sind. Da es nur zwei 
Bitzustände gibt, geht das auch nur mit zwei Eingängen.

Interessante Diskussion, ob es ein N-fach XOR für N > 2 überhaupt geben 
kann, findet man hier:

   Beitrag "XOR-Gate mit 8 Eingängen"

Denn es gibt noch eine andere Definition: Der Ausgang ist dann 1, wenn 
die Anzahl der 1en ungerade ist. Also eine Art Paritätsprüfung.

Viel Spaß beim Lesen ;-)

P.S.
Da weder Definition 1 noch 2 auf die Problemstellung in diesem Thread 
hier passen, würde ich es eben nicht "3-fach XOR" nennen.

Wikipedia sagt dazu in:

   http://de.wikipedia.org/wiki/XOR-Gatter

"Die Funktion eines XOR-Gatters mit mehr als zwei Eingängen ergibt sich, 
indem man zunächst zwei der Eingänge XOR-verknüpft, dann deren Ergebnis 
mit dem nächsten Eingang XOR-verknüpft, solange bis alle Eingänge 
berücksichtigt sind."

Wenn ich das mache, kann ich sofort ein Gegenbeispiel nennen, welches 
nicht der Forderung des TOs genügt. Daher ist die Formulierung 
"3-fach-XOR" einfach falsch.
Moderator Persönliche Seite #4029833
Lesenswert?

Stephan schrieb:
> am besten mal eine Logiktabelle posten

Die ist ja leicht gemacht:
A B C   Ergebnis
0 0 0     0
0 0 1     1
0 1 0     1
0 1 1     0
1 0 0     1
1 0 1     0
1 1 0     0
1 1 1     0

Unter der Voraussetzung, dass die Aussage des TOs "Ausgang aktiv" mit 1 
gleichzusetzen ist.

Ich kenne für diese Logikoperation keinen Namen. Man kann jedenfalls 
folgende Aussage machen, wenn man die Aufgabenstellung auf N Eingänge 
verallgemeinert:

Die Anzahl der Möglichkeiten steigt mit 2^N, die Anzahl der Ergebnisse = 
1 ist aber nur gleich N.
Gast #4029844
Lesenswert?

Frank M. schrieb:
> Stephan schrieb:
>> am besten mal eine Logiktabelle posten
>
> Die ist ja leicht gemacht:

das weiß ich, ich wollte nur Missverständnisse verhindern.
Ein ODER würde auch bei genau einem Eingang ansprechen. Erfüllt dann 
aber eben nicht die von Dir vermutete Funktion. weil es auf den /die 
anderen Eingang/ Eingänge auch reagiert.
Zumal nicht klar ist ob H oder L aktiv.
Moderator Persönliche Seite #4029859
Lesenswert?

spess53 schrieb:
>>Ich kenne für diese Logikoperation keinen Namen.
> Hier
>
> Beitrag "Re: XOR-Gate mit 8 Eingängen"
>
> gibt es doch schon einen Link zu einem fast passenden Bauelement. Noch
> zwei Gatter und das ganze passt.

Ja, Schaltung war mir klar. Ich bezog mich hier nur auf die zweite Frage 
des TOs, nämlich nach einer Bezeichnung für diese Logikoperation.
Gast #4029903
Lesenswert?

...igendeinen µC schnappen

Code ohne spezielle syntax:

int hallo;

void funktionfuerdich(){
hallo=0;
if (eingang1==1){
hallo=hallo+1;
}
if (eingang2==1){
hallo=hallo+1;
}
if (eingang3==1){
hallo=hallo+1;
}
if (hallo==1){
ausgang=1;
}
else{
ausgang=0;
}
}//Ende der Funktion
Gast #4029961
Lesenswert?

Stephan schrieb:
> Ein ODER würde auch bei genau einem Eingang ansprechen.

Nein, ein ODER spricht nicht bei GENAU einem Eingang an. Ein ODER 
spricht bei einem, bei zwei und auch bei drei gesetzten Eingängen an 
(wenn wie hier drei Eingänge vorhanden sind).
GENAU ein Eingang heißt auch wirklich nur bei einem.
Gast #4030008
Lesenswert?

Hallo Leute,

der Vollständigkeit halber noch die "klassische" Lösung, nach der 
Wahrheitstabelle von Frank M.

A B C   Ergebnis
0 0 0     0
0 0 1     1
0 1 0     1
0 1 1     0
1 0 0     1
1 0 1     0
1 1 0     0
1 1 1     0

Ergebnis X = (C & /B & /A) ODER (/C & B & /A) ODER (/C & /B & A)

Kürzen mit KV noch nicht inbegriffen. Also zwei Logikbausteine, ein 
3fach AND mit je 3 Eingängen und ein OR mit 3 Eingängen.

Die Lösung von Peter Dannegger ist aber wesentlich kreativer und gefällt 
mir besser.

Gruß. Tom
Moderator Persönliche Seite #4030043
Lesenswert?

genervter schrieb:
> und was soll sowas, wenns mit nem dip8 tiny geht???

Woher weisst Du, dass Du mit einem "dip8 tiny" die Anforderungen des TOs 
überhaupt einhalten kannst?

Logikgatter sind im allgemeinen wesentlich schneller als ein µC. Soll 
das Ergebnis innerhalb von einigen ns bereitstehen, sieht Dein ATTiny 
ganz schön alt aus.

Peters Lösung ist einfach genial.
Gast #4030184
Lesenswert?

genervter schrieb:
> tiny hat man da, programmiert ihn fix, und kann machen.

Frag doch mal den TO, ob er Tinys da hat und sie auch programmieren 
kann.
Wenn du das kannst, heißt das nicht, daß alle anderen das auch können.
Dazu kommt dann noch die Tatsache, daß du mit Software nicht mal in die 
Größenordnungen kommst (bezüglich der Gatterlaufzeiten) wie in einem 
reinen Digital-IC.
Gast #4030438
Lesenswert?

R. Max schrieb:
> TomA schrieb:
>
>> Ergebnis X = (C & /B & /A) ODER (/C & B & /A) ODER (/C & /B & A)
>>
>> Kürzen mit KV noch nicht inbegriffen.
>
> Macht nix, der Ausdruck läßt sich eh nicht weiter kürzen.

Das ist richtig und TomA's Loesung bestaetigt auch das Ergebnis des 
Programs "LogicMinimizer"
#4032039
Lesenswert?

TomA schrieb:
> A B C   Ergebnis
> 0 0 0     0
> 0 0 1     1
> 0 1 0     1
> 0 1 1     0
> 1 0 0     1
> 1 0 1     0
> 1 1 0     0
> 1 1 1     0
>
> Ergebnis X = (C & /B & /A) ODER (/C & B & /A) ODER (/C & /B & A)

Warum so kompliziert?
A, B, C sind ja Bits. Gehen wir davon aus sie sind im selben 
Eingangsbyte e
1
bool y = ( e & (e-1) ) != 0
oder in meinen Augen leserlicher und von allen mir bekannten Compilern 
gleichbedeutend:
1
bool y = e & (e-1)

für reines C darf das bool natürlich auch ein char oder int oder 
sonstwas sein...
#4032080
Lesenswert?

Leo B. schrieb:
> Warum so kompliziert?
> A, B, C sind ja Bits. Gehen wir davon aus sie sind im selben
> Eingangsbyte e
>
1
> bool y = ( e & (e-1) ) != 0
2
>
> oder in meinen Augen leserlicher und von allen mir bekannten Compilern
> gleichbedeutend:
>
1
> bool y = e & (e-1)
2
>

Äh. Nö?

1
#include <stdbool.h>
2
#include <stdint.h>
3
#include <stdio.h>
4

5
int main()
6
{
7
    bool    output;
8
    uint8_t input;
9

10
    // Bit combinations from 0000 0000 to 0000 0111
11
    for (input = 0; input < 8; input++) 
12
    {
13
        output = input & (input-1);
14
        printf("Resulting output for input = %d: %d\n", input, output);
15
    }
16
    
17
    return 0;
18
}

ergibt:
1
Resulting output for input = 0: 0
2
Resulting output for input = 1: 0
3
Resulting output for input = 2: 0
4
Resulting output for input = 3: 1
5
Resulting output for input = 4: 0
6
Resulting output for input = 5: 1
7
Resulting output for input = 6: 1
8
Resulting output for input = 7: 1
#4032645
Lesenswert?

Ähm... ja. Tipfehler und dann gleich weiter gekürzt...
Und die '0' Übersehen... Korrigiert:
1
bool out = in && !(in & (in-1));

Test:
1
#include <stdbool.h>
2
#include <stdint.h>
3
#include <stdio.h>
4

5
char* c2bStr( uint8_t val )
6
{
7
  static char buf[9] = "00000000";
8
  int i = 8;
9
  for( ; i>=0 ; val>>=1)
10
    buf[--i] = '0'+(val&1);
11
  return buf;
12
}
13

14
int main()
15
{
16
    bool    out;
17

18
    for( uint8_t in = 0; in <= 33; in++) 
19
    {
20
        out = in && !(in & (in-1));
21
        printf( "%s => %d\n", c2bStr( in ), out );
22
    }
23
    
24
    return 0;
25
}
Ergebnis:
1
00000000 => 0
2
00000001 => 1
3
00000010 => 1
4
00000011 => 0
5
00000100 => 1
6
00000101 => 0
7
00000110 => 0
8
00000111 => 0
9
00001000 => 1
10
00001001 => 0
11
00001010 => 0
12
00001011 => 0
13
00001100 => 0
14
00001101 => 0
15
00001110 => 0
16
00001111 => 0
17
00010000 => 1
18
00010001 => 0
19
00010010 => 0
20
00010011 => 0
21
00010100 => 0
22
00010101 => 0
23
00010110 => 0
24
00010111 => 0
25
00011000 => 0
26
00011001 => 0
27
00011010 => 0
28
00011011 => 0
29
00011100 => 0
30
00011101 => 0
31
00011110 => 0
32
00011111 => 0
33
00100000 => 1
34
00100001 => 0
Gast #4033017
Lesenswert?

W wie Wurst schrieb:
> steht schon alles im Betreff, ich suche solch eine Schaltung bzw. IC.

Es gäbe noch die analoge Lösung, wenn die Ausgangsspannung der Quellen 
definiert sind, z.B. 0V/5V aus einem HC-MOS IC.
1
             +5V +5V  +5V
2
              |   |    |
3
             20k  |    1k
4
              |   |    |
5
              +--|+\   |
6
              |  |  >--+-- out
7
a --10k--+----(--|-/   |
8
         |   10k  LM393| 
9
b --10k--+----(--|+\   |
10
         |    |  |  >--+
11
b --10k--+    +--|-/
12
              |   |
13
             10k  |
14
              |   |
15
             GND GND

Irgendwie weiss ich aber nie, wie bei open collector Komparatoren 
internierendeer und nicht-invertierender Eingang aufzufassen sind, ist + 
positiver als - geht der Ausgang nach + oder wird er aktiv, d.h. 
durchgeschaltet...

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