Ich suche seit Tagen ein IC, welches folgende Wahrheitstabelle erfüllt:
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?
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:
Da brauchst du dann zwei davon und schiebst dir dann je nach dem Zustand von ABCD andere Werte raus. Ist sicher das einfachste hier.
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.
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
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!
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.
Serenifly:
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?
Du verstehst das falsch. Denke nicht in dem Sinne als ob du da irgendwas durch schiebst. Das Schieben dient nur dazu um aus einem seriellen Ausgang 16 parallel Ausgänge zu machen. Davon bekommst du gar nichts mit.
Du hast eine Funktion wie shiftOut(byte) in der IDE. Die schiebt dir dann das Byte raus und es erscheint an den SR Ausgängen. Wenn man das zweimal macht hat man 16 Ausgänge. Wenn du eine neue Zeile der Wertetabelle willst werden zwei neue Bytes rausgeschoben.
genau. Du schreibst IMMER 16 werte rein. und natürlich geht das viel schneller. noch viel schneller als Du es zb von anzeigen auf alten stereoanlagen kennst.
R1der:
Also kann ich die werte Seriell reinladen und die Ausgabe erst aktivieren, wenn alle da sind? Oder versteh ich das jetzt falsch?
Schau dir mal das Datenblatt an. Die Schieberegister sind intern gelatcht. Das heißt sie haben einen Zwischenspeicher und der wird erst raus geschrieben wenn ein Latch Enable Signal kommt.
Serenifly:
Mit "2Hz ist alle 500ms. Das ist eine Ewigkeit." gehe ich davon aus, dass das auch schneller geht?
Ja, wesentlich schneller. Genau kann ich es dir nicht sagen, aber wahrscheinlich ein paar hundert kHz. Die Limitierung kommt daher dass jeder Wert einzeln durch die ganzen Flip-Flops geschoben werden muss (ähnlich einem Ripple-Counter) und natürlich den µC Takt. Aber so schnell brauchst du das dann doch nicht