zählende Schaltung

Gast #1412371
Lesenswert?

Hallo allseits,

Irgendwie stehe ich völlig auf dem Schlauch. Ich habe ein Problem und 
weiß nichtmal, wie ich es ansatzweise lösen könnte.

Ich habe 5 Eingangssignale und benötige ein High Ausgangssignal, wenn 
höchstens 3 dieser Signale High sind.
Bei 4 oder 5 Leitungen auf High soll der Ausgang also auf LOW liegen.

Die Schaltung müsste also die Anzahl der aktiven Signale zählen können.

Wie kann man dieses Problem mit diskreten oder TTL/CMOS Bausteinen 
lösen?
Ich würde ja einen uC benutzen, der kommt aber auf Grund eines Vetos 
nicht in Frage.
Moderator (Firma: Titel) Persönliche Seite #1412413
Lesenswert?

Oder nur 1 Komparator, und den Addierer als Dioden-Widerstands-Netzwerk.
1
                 ___
2
           ->|--|___|--.
3
                       |    Vcc
4
                 ___   |     |
5
           ->|--|___|--o    .-.
6
                       |    | |
7
                 ___   |    | |
8
           ->|--|___|--o    '-'
9
                       |     |
10
                 ___   |     |
11
           ->|--|___|--o     |   |\|
12
                       o-----)---|-\
13
                 ___   |     |   |  >-
14
           ->|--|___|--o     o---|+/
15
                       |     |   |/|
16
                       |     |
17
                      .-.   .-.
18
                      | |   | |
19
                      | |   | |
20
                      '-'   '-'
21
                       |     |
22
                      ---   ---
#1412419
Lesenswert?

uro schrieb:
> Warum zählen? Einfache Logik löst das Problem doch auch. Wertetabelle
> erstellen und Gleichung ableiten. Vereinfachen und dann lässt es sich
> sicher mit Grundgattern realisieren.

Daran dachte ich zuerst auch. Aber es könnten ja quasi alle Leitungen 
High werden. Aber immer nur max. 3 auf einmal.

edit
Hab mich sicher blöd ausgedrückt :D
Egal ich denke logisch geht da nix.
Moderator (Firma: Titel) Persönliche Seite #1412422
Lesenswert?

So sieht die Lösung in VHDL aus ;-)
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3

4
entity Comparator is
5
    Port ( inp  : in  STD_LOGIC_VECTOR (4 downto 0);
6
           outp : out STD_LOGIC);
7
end Comparator;
8

9
architecture Behavioral of Comparator is
10
begin
11
   process (inp) 
12
   variable cnt : integer;
13
   begin
14
      cnt := 0;
15
      for i in 0 to 4 loop
16
         if (inp(i)='1') then cnt := cnt+1; end if;
17
      end loop;
18
      if(cnt>3) then outp<='1';
19
      else           outp<='0';
20
      end if;
21
   end process;
22
end Behavioral;
Gast #1412484
Lesenswert?

...

 #   EDCBA |  Y             #   EDCBA |  Y
===============================================
 0   00000 |  1            16   10000 |  1
 1   00001 |  1            17   10001 |  1
 2   00010 |  1            18   10010 |  1
 3   00011 |  1            19   10011 |  1
-----------------------------------------------
 4   00100 |  1            20   10100 |  1
 5   00101 |  1            21   10101 |  1
 6   00110 |  1            22   10110 |  1
 7   00111 |  0            23   10111 |  0
-----------------------------------------------
 8   01000 |  1            24   11000 |  1
 9   01001 |  1            25   11001 |  1
10   01010 |  1            26   11010 |  1
11   01011 |  1            27   11011 |  0
-----------------------------------------------
12   01100 |  1            28   11100 |  1
13   01101 |  1            29   11101 |  0
14   01110 |  1            30   11110 |  0
15   01111 |  0            31   11111 |  0
Gast #1412499
Lesenswert?

Der Ausgang soll null werden wenn 4 oder 5 Signale '1' sind, richtig?
a b c d e | q
0 1 1 1 1 | 0
1 0 1 1 1 | 0
1 1 0 1 1 | 0
1 1 1 0 1 | 0
1 1 1 1 0 | 0
1 1 1 1 1 | 0

Sonst ist q immer '1'. Das ergibt als die Gleichung:
\(\a*b*c*d*e + a*\b*c*d*e + a*b*\c*d*e + a*b*c*\d*e + a*b*c*\d*e + 
a*b*c*d*\e + a*b*c*d*e)

\ = not
* = and
+ = or

Das wäre doch mit diskreten Gattern einfach aufzubauen.

Hab ich irgendwo einen denkfehler?
Moderator (Firma: Titel) Persönliche Seite #1412528
Lesenswert?

Einen VHDL-Code hätt ich noch  ;-)
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3

4
entity Comparator is
5
    Port ( inp  : in  STD_LOGIC_VECTOR (4 downto 0);
6
           outp : out STD_LOGIC);
7
end Comparator;
8

9
architecture Behavioral of Comparator is
10
begin
11
   outp <= '0' when inp = "1111-" or
12
                    inp = "111-1" or
13
                    inp = "11-11" or
14
                    inp = "1-111" or
15
                    inp = "-1111" 
16
                else '1';
17
                    
18
end Behavioral;
Gast #1412553
Lesenswert?

>High Ausgangssignal, wenn höchstens 3 dieser Signale High sind.

bedeutet doch auch:

High-Ausgang, wenn mindestens zwei Eingangs-Signale LOW sind.

Ein NOR-Gatter mit zwei Eingängen /(a+b) geht nur auf High
wenn beide Eingänge LOW sind.

also prüfen wir alle 10 Kombinationen
und verODERn die Ergebnisse der NORs:

/(a+b) + /(a+c) + /(a+d) + /(a+e)
       + /(b+c) + /(b+d) + /(b+e)
                + /(c+d) + /(c+e)
                         + /(d+e)

Dazu bräuchte man zehn NOR und
zehn Dioden für ein Wired-OR mit 10 Eingängen.

Mfg Willi

\ = not
* = and
+ = or
Gast #1413332
Lesenswert?

WOW!
Ich bin ja völlig erschlagen von eurer Kompetenz und Hilfsbereitschaft.

Ihr habt mit sehr weiter geholfen. Es ging nicht darum einen Lehrer zu 
befriedigen sondern in eine bestehende Applikation eine Zusatzfunktion 
einzufügen.
Ich werde es diskret anhand der Logiktabelle aufbauen, das passt am 
besten zu dem bisher Bestehenden. Ohne euch hätte ich da gar nicht 
ernsthaft drüber nachgedacht, da ich der Meinung war, dass ich dafür 
mindestens hundert Gatter brauchen würde.

Nochmal danke, dass ihr mir auf die Sprünge geholfen habt!!
Tolles Forum!

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