mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zählende Schaltung


Autor: verzweifelter Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Regentropfenfallgeschwindigkeitssteuerungsautomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder nur 1 Komparator, und den Addierer als Dioden-Widerstands-Netzwerk.
                 ___
           ->|--|___|--.
                       |    Vcc
                 ___   |     |
           ->|--|___|--o    .-.
                       |    | |
                 ___   |    | |
           ->|--|___|--o    '-'
                       |     |
                 ___   |     |
           ->|--|___|--o     |   |\|
                       o-----)---|-\
                 ___   |     |   |  >-
           ->|--|___|--o     o---|+/
                       |     |   |/|
                       |     |
                      .-.   .-.
                      | |   | |
                      | |   | |
                      '-'   '-'
                       |     |
                      ---   ---

Autor: uro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich_eban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wäre es mit addierern?

Autor: Ronald S. (mline)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sieht die Lösung in VHDL aus ;-)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

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

architecture Behavioral of Comparator is
begin
   process (inp) 
   variable cnt : integer;
   begin
      cnt := 0;
      for i in 0 to 4 loop
         if (inp(i)='1') then cnt := cnt+1; end if;
      end loop;
      if(cnt>3) then outp<='1';
      else           outp<='0';
      end if;
   end process;
end Behavioral;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael W. (retikulum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Autor: LUT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Bünger (pbuenger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die unterste Zeile ist überflüssig.

Gruß,
Peter

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen VHDL-Code hätt ich noch  ;-)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

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

architecture Behavioral of Comparator is
begin
   outp <= '0' when inp = "1111-" or
                    inp = "111-1" or
                    inp = "11-11" or
                    inp = "1-111" or
                    inp = "-1111" 
                else '1';
                    
end Behavioral;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hp-freund (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...oder mit 74ls04 und 74ls30 wenn es aufgebaut werden soll.

Autor: verzweifelter Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Anbei die Schaltung mit nur 3 TTL-ICs.

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Rüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.