Go Down

Topic: 4 zu 16 Decoder in anderer Form (Read 3884 times) previous topic - next topic

R1der

Hallo Leute,

Ich suche seit Tagen ein IC, welches folgende Wahrheitstabelle erfüllt:

Code: [Select]
INPUT OUTPUT
D C B A Q15 Q14 Q13 Q12 Q11 Q10 Q9 Q8 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 0 0 0 L L L L L L L L L L L L L L L H
0 0 0 1 L L L L L L L L L L L L L L H H
0 0 1 0 L L L L L L L L L L L L L H H H
0 0 1 1 L L L L L L L L L L L L H H H H
0 1 0 0 L L L L L L L L L L L H H H H H
0 1 0 1 L L L L L L L L L L H H H H H H
0 1 1 0 L L L L L L L L L H H H H H H H
0 1 1 1 L L L L L L L L H H H H H H H H
1 0 0 0 L L L L L L L H H H H H H H H H
1 0 0 1 L L L L L L H H H H H H H H H H
1 0 1 0 L L L L L H H H H H H H H H H H
1 0 1 1 L L L L H H H H H H H H H H H H
1 1 0 0 L L L H H H H H H H H H H H H H
1 1 0 1 L L H H H H H H H H H H H H H H
1 1 1 0 L H H H H H H H H H H H H H H H
1 1 1 1 H H H H H H H H H H H H H H H H


Die normalen Decoder schalten ja immer nur einen Pin durch. Gibt es das in dieser abgewandelter Form bzw. wie kriege ich die Funktion am besten hin?

3 zu 8 wäre auch ok, sowie vertauschte Pegel 8)

Danke bereits!
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

michael_x

Kann man wohl mit Standard-Logik Bausteinen irgendwie hinkriegen, aber ...
... Wo sind wir denn hier ?

Wie wäre es mit einem atmega8 oder einem Arduino oder so? 
20 Digital Signale kommt doch genau hin.


Serenifly

Sowas ist eigentlich das Gebiet von GALs, PALs und CPLDs. Aber da braucht man wieder ein Programmiergerät...

R1der

Ich möchte möglichst wenige Pins am arduino "verschwenden" um möglichst viele Bit-Ausgänge zu haben.

Dachte jemand hätte so etwas in der Art vllt schon mal gelöst z.B. über einen seriellen I/O Baustein, wovon ich wiederum (noch) keine Ahnung habe.
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

uwefed

Dann nimm Schieberegister wie den 74HC595 oder Port Expander wie den MCP23009 / MCP23017 oder PCF8574 / PCF8575. Da kannst Du jeden einzelnen Ausgang setzen oder löschen. Die Port Expander können nach belieben Pin für Pin als Eingang oder Ausgang benutzt werden.
Beispiele zur Ansteuerung findest Du im Playground: zB http://playground.arduino.cc/Code/I2CPortExpander8574 http://learn.adafruit.com/adafruit-arduino-lesson-4-eight-leds/overview
Grüße Uwe

Serenifly

#5
Jul 06, 2013, 11:42 am Last Edit: Jul 06, 2013, 11:44 am by Serenifly Reason: 1
Wenn du eine separate Lösung wolltest (und ein entsprechendes Programmiergerät hast) ist für sowas der Vorschlag mit dem Atmega8 gut.

Ich habe sowas auch schon mal gemacht. Ironischerweise gerade um einen GAL zu ersetzen :)
Hatte mal ne Maschine zum reparieren bei der die Umsetzung der Schrittmotor-Ansteuersignale in die Schrittfolgen in einem GAL gemacht war. Programmiergerät war sogar da, aber der Baustein war soweit zerschossen dass ich ihn nicht mehr auslesen konnte. Da ich auch keine Erfahrung hatte sowas zu programmieren habe ich einen Atmel AT89C2051 genommen, etwa 30 Zeilen Assembler programmiert und schon liefs wieder :)


Schieberegister sind auch hier sehr schön erklärt:
http://arduino.cc/en/Tutorial/ShiftOut

Da brauchst du dann zwei davon und schiebst dir dann je nach dem Zustand von ABCD andere Werte raus. Ist sicher das einfachste hier.

R1der

Schieberegister hab ich ja völlig vernachlässigt :smiley-fat:

Arbeite mich jedoch erst mal bei dem Port-Expander ein. Die Lösung gefällt mir mehr als das Schieben.

Vielen Dank für die schnellen Antworten 8)
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

uwefed

Beim Port expander wird auch geschoben (zwar über I2C bzw SPI)
Der Vorteil der Port Expander liegt darin, daß die Pins einzeln als Eingänge oder Ausgänge programmiert werden können. Der Nachteil ist daß bei I2C nur 3 Adresspin vorhanden sind und darum nur 8 gleiche ICs am Bus hängen können. Bei SPI braucht jedes IC ein Enable-Pin vom Arduino. Darumist auch hier die Anzahl der Adressierbaren ICs begrenzt.

Vorteil der Schieberegister ist daß viele hintereinandergeschaltet werden können. Bei mehr als ca 5 braucht es Treiber um genügend Strom zu haben soviele CLK uns Enable  Pins paralell anzusteuern.

Grüße Uwe

Serenifly

Strom? Fan-Out? Wir sind hier doch nicht bei TTL :) Die HC Serie hat einen Eingangsstrom von ca. 1µA

uwefed

Statischen Eingangstrom vieleicht; aber es braucht einen Strom um den Zustand eines Eingangs zu ändern ( Gate-Source Kapazität)

Grüße Uwe

R1der

Schieberegister kommt nicht in Frage.
Die geforderte Funktion kann nicht erfüllt werden.

Das ganze soll am Ende eine "Balken"-Anzeige mit LEDs werden.
Um eine möglichst hohe Auflösung des darzustellenden Analogwertes hinzubekommen, brauche ich eben so viele Pins. Das Analogsignal ändert sich sehr schnell und die Anzeige soll mit min 2Hz aktualisiert werden.

Ansteigender Wert ist ja kein Problem mit dem Schieben. Das Absinken jedoch :smiley-roll-blue:
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

Eisebaer

hi,

Quote
Ansteigender Wert ist ja kein Problem mit dem Schieben. Das Absinken jedoch


??????

gruß stefan
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

Serenifly

#12
Jul 06, 2013, 07:15 pm Last Edit: Jul 06, 2013, 07:17 pm by Serenifly Reason: 1
Das ist nicht wie das Schieberegister funktioniert. Geschoben wird um die seriell/parallel-Wandlung zu erreichen. Du schiebst da immer alle 16 Werte auf einmal rein. Wenn du eine neue Zeile willst werden 16 neue Werte eingeschoben.

Es gibt auch Schieberegister bei denen man die Schieberichtung einstellen kann. Aber das ist hier nicht nötig!

2Hz ist alle 500ms. Das ist eine Ewigkeit.

R1der


hi,

??????

gruß stefan


Dann klär mich bitte auf, wie ich das darüber "einfach" lösen kann.

Sinkt das Signal ab, kommt natürlich ein LOW Aufs Register, die dann eben durchwandert. Jedoch soll in dem Fall das letzte (Höchstwertigste) HIGH-Signal zum LOW werden.

beispiel:
0000000011111111 steigt an
0000000111111111
0000001111111111 jetzt soll es sinken
0000000111111111
0000000011111111

mit dem Schieben kann nur die erste bzw. letzte Stelle beinflusst werden.
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

R1der


Das ist nicht wie das Schieberegister funktioniert. Geschoben wird um die seriell/parallel-Wandlung zu erreichen. Du schiebst da immer alle 16 Werte auf einmal rein. Wenn du eine neue Zeile willst werden 16 neue Werte eingeschoben.

Es gibt auch Schieberegister bei denen man die Schieberichtung einstellen kann. Aber das ist hier nicht nötig!

2Hz ist alle 500ms. Das ist eine Ewigkeit.


So sieht das ganze dann anders aus. Also kann ich die werte Seriell reinladen und die Ausgabe erst aktivieren, wenn alle da sind? Oder versteh ich das jetzt falsch?
Mit "2Hz ist alle 500ms. Das ist eine Ewigkeit." gehe ich davon aus, dass das auch schneller geht?
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

Go Up