Forum: Mikrocontroller und Digitale Elektronik zählende Schaltung


von verzweifelter Gast (Gast)


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.

von Regentropfenfallgeschwindigkeitssteuerungsautomat (Gast)


Lesenswert?

> Ich würde ja einen uC benutzen, der kommt aber auf Grund eines Vetos
> nicht in Frage.

Von wem kam dieses Veto und warum? Von Deinem Lehrer?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich würde ja einen uC benutzen, der kommt aber auf Grund eines Vetos
> nicht in Frage.
Ein CPLD wäre der Baustein meiner Wahl.

von noips (Gast)


Lesenswert?

So auf die Schnelle kommt mir nur eine analoge Lösung in den Sinn, z.B. 
zwei OP's, einen als Addierer und den anderen als Komparator beschalten. 
Bin mal gespannt, was dir hier epfohlen wird!

von MaWin (Gast)


Lesenswert?

> Wie kann man dieses Problem mit diskreten oder TTL/CMOS Bausteinen
lösen?

Der Lehrer möchst sicherlich die stumpe Methode, Gleichungen 
aufstellungen, minimieren, Schaltung mit AND/OR/NOT aufbauen,

damit du zeiugen kannst, daß du Quine-McCluskey verstanden hast.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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
                      ---   ---

von uro (Gast)


Lesenswert?

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.

von ich_eban (Gast)


Lesenswert?

wie wäre es mit addierern?

von Ronald S. (mline)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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;

von Karl H. (kbuchegg)


Lesenswert?

5 Eingangtssignale macht 32 mögliche Zustande. Mit einem 32 aus 5 
Dekoder (notfalls aus kleineren Einheiten zusammensetzen), lässt du dir 
das in die 32 möglichen Ausgänge aufdröseln und führst alle gültigen 
Ausgangskombinationen mit ODER wieder zusammen.

von Matthias L. (Gast)


Lesenswert?

>5 Eingangtssignale macht 32 mögliche Zustande. Mit einem 32 aus 5
>Dekoder (notfalls aus kleineren Einheiten zusammensetzen), lässt du dir
>das in die 32 möglichen Ausgänge aufdröseln und führst alle gültigen
>Ausgangskombinationen mit ODER wieder zusammen.

Oder klassisch:

Karnaugh-Tafel.

von Michael W. (retikulum)


Lesenswert?

Das EPROM von früher wäre auch 'ne Möglichkeit. Da könnte dann auch 
festgelegt werden, wass passieren soll, wenn alle Eingänge 0 sind.

Michael

von karadur (Gast)


Lesenswert?

Hallo

was ist denn wenn nur 2 Eingänge H sind?

von Matthias L. (Gast)


Lesenswert?

>Da könnte dann auch
>festgelegt werden, wass passieren soll, wenn alle Eingänge 0 sind.

Das ist doch festgelegt:

>>Ich habe 5 Eingangssignale und benötige ein High Ausgangssignal, wenn
>>höchstens 3 dieser Signale High sind.

von Karl H. (kbuchegg)


Lesenswert?

karadur schrieb:
> Hallo
>
> was ist denn wenn nur 2 Eingänge H sind?

Anofrderung lesen

> benötige ein High Ausgangssignal, wenn höchstens 3 dieser
> Signale High sind

höchstens. 2 high -> Ausgang ebenfalls high.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

karadur schrieb:
> was ist denn wenn nur 2 Eingänge H sind?
Aus dem OP:
>>> ein High Ausgangssignal, wenn höchstens 3 dieser Signale High sind.
Hmmm...

EDIT:
Pech, Zweiter, dafür aber ohne Typo ;-)
> Anofrderung

von Matthias L. (Gast)


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

von karadur (Gast)


Lesenswert?

Hallo

3 mal H ist aber noch erlaubt. Erst ab 4 mal H soll der Ausgang low 
sein.

von LUT (Gast)


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?

von Peter B. (pbuenger)


Lesenswert?

Die unterste Zeile ist überflüssig.

Gruß,
Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Bünger schrieb:
> Die unterste Zeile ist überflüssig.
Aber nur, wenn die Gleichung umgestellt wird:
\(b*c*d*e + a*c*d*e + a*b*d*e + a*b*c*e + a*b*c*d)

EDIT:
Der war/ist doppelt:  a*b*c*\d*e

von Hc Z. (mizch)


Lesenswert?

4530 (MC14530) - Majority logic gate.  Schaltet bei 3 aus 5, müsste mit 
doch auf 4 aus 5 zu erweitern sein?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hazeh Zimmerer schrieb:
> 4530 (MC14530) - Majority logic gate.
> Schaltet bei 3 aus 5, müsste doch auf 4 aus 5 zu erweitern sein?
Inverter davor?

von Willi (Gast)


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

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

...oder mit 74ls04 und 74ls30 wenn es aufgebaut werden soll.

von verzweifelter Gast (Gast)


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!

von Peter (Gast)


Lesenswert?

>Ich werde es diskret anhand der Logiktabelle aufbauen,

Also bevor Du dir eine riesen Leiterplatte mit diskreter Logik 
vollstopfst würde ich die Lösung mit einem Komperator von Lothar Miller 
vorziehen.

Ansonsten wäre ein CPLD oder ein kleiner uC das vernünftigste, VETO hin 
oder her!!!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Ansonsten wäre ein CPLD ... das vernünftigste, VETO hin oder her!!!
ACK, denn in dieses CPLD könnte noch einiges an zusätzlicher Logik (die 
jetzt noch drumrum aufgebaut ist) hineingepackt werden...

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Peter schrieb:
> Also bevor Du dir eine riesen Leiterplatte mit diskreter Logik
> vollstopfst würde ich die Lösung mit einem Komperator von Lothar Miller
> vorziehen.

Übertreib mal nicht so.

Anbei die Schaltung mit nur 3 TTL-ICs.


Peter

von Gast (Gast)


Lesenswert?

>Anbei die Schaltung mit nur 3 TTL-ICs.

Das Ergebnis müsste noch mal invertiert werden, oder ?

von Peter D. (peda)


Lesenswert?

Gast schrieb:
> Das Ergebnis müsste noch mal invertiert werden, oder ?

Ja, ich hab den falschen IC gegriffen.

IC1 muß natürlich ein 74HC86 (EXOR) sein!


Peter

von Peter (Gast)


Lesenswert?

>>Anbei die Schaltung mit nur 3 TTL-ICs.

>Das Ergebnis müsste noch mal invertiert werden, oder ?

Das sehe ich auch so, da wären wir also doch wieder bei 4 TTL-ICs 
gegenüber einem Komperator im SO-8 Gehäse

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

So, jetzt die richtige Schaltung.

Der IC1B macht die Invertierung.
Hab ja schon ewig nichts mehr mit TTL gemacht, daher die Verwechslung 
74HC86 mit 74HC32.


Peter

von Rüger (Gast)


Lesenswert?

@Matthias Lipinsky
was ist da mit Y in der Tabelle los bei #7?

 > die Anzahl der aktiven Signale zählen können
Bei 5 mal L darf kein H gemeldet werden.

von Matthias L. (Gast)


Lesenswert?

>@Matthias Lipinsky
>was ist da mit Y in der Tabelle los bei #7?


Das war der eingebaute Fehler, ob aufgepasst wird.

Eins mit Bienchen. Setzen.

;-)

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.