Go Down

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

Serenifly

#15
Jul 06, 2013, 07:23 pm Last Edit: Jul 06, 2013, 07:55 pm by Serenifly Reason: 1
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.

Eisebaer

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.

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

Serenifly

#17
Jul 06, 2013, 07:29 pm Last Edit: Jul 06, 2013, 08:11 pm by Serenifly Reason: 1

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.

Siehe hier:
http://arduino.cc/en/Reference/ShiftOut

Code: [Select]

   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, data1);  
   shiftOut(dataPin, clockPin, LSBFIRST, data2);
   digitalWrite(latchPin, HIGH);




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

R1der

Entschuldigt mein Unwissen.

Habe mir nun das Datenblatt genau angeschaut vom 74HC595...

Der wird es wohl werden... Also min 2 davon.

Damit probier ich es dann.

Bin noch Frischling auf dem ganzen Gebiet. Den Schiebetakt erzeuge ich am Besten im Board um das mit den Daten sauber hinzubekommen. Richtig?
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

Serenifly

Das ist in der IDE schon implementiert. Du musst da um nichts kümmern. Du definierst nur den Daten-Pin, den Clock-Pin und Latch-Pin.

Alles hier mit Beispiel beschrieben:
http://arduino.cc/en/Reference/ShiftOut

R1der

Vielen Dank nochmal!

Ihr seid mir eine sehr große Hilfe.
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

uwefed


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:


Die Daten werden seriell in das Schieberegiste hineingeschoben und paralell an den Ausgängen ausgegeben.
Die Taktfrequenz kann für des Schieberegister 100Mhz betragen. Der Arduino kann mit der SPI-Schnittstelle bei 1/4 Systemtakt teoretisch 16 Bit (2 Schieberegister) fast bis auf 250kHz Wiederholrate kommen. Weil Du die Daten auch berechnen mußt, wird es eher in der Nähe von 10kHz sein. Um auf 2Hz zu kommen mußt Du der Arduino viel Warten  ;) ;)

Das Problem ist eher, daß der 74HC595 nur 70 mA Gesamtstrom an allen Ausgängen geben kann ( wenden dieses Limits an den Spannungsversorgung bzw Masse-Pin). Darum mußt Du um 8 LED ansteuern zu können den LED-Strom auf 8mA begrenzen, einen  Treiber , zB den ULN2803 dazwischenschalten oder einen  TPIC6C595N verwenden (kostet zwar ein vielfaches des 74HC595 genaugesagt um die 2€)

Grüße Uwe


Serenifly

#22
Jul 06, 2013, 08:17 pm Last Edit: Jul 06, 2013, 08:19 pm by Serenifly Reason: 1
Ja, da mit Strom wollte ich auch gerade schreiben und musste erst mal nachgucken :)

Die machen zwar bis zu 35mA pro Ausgang, was sich erst mal super anhört, aber dann insgesamt nur 70mA. Das kommt darauf an was du da genau dranhängen hast. 3mm LEDs oder eine kleine Bargraph-Anzeige würden gehen.

Normalerweise treibt man aber keine LEDs mit Logik-ICs. Weiß nicht wieso man da in diesen Beispiel nicht hinschreibt, dass es etwas hingepfuscht ist. Die 220 Ohm da, lassen nämlich den Strom zu hoch werden, aber es funktioniert halt gerade noch so.

uwefed

#23
Jul 06, 2013, 09:16 pm Last Edit: Jul 06, 2013, 09:19 pm by uwefed Reason: 1

Entschuldigt mein Unwissen.

Habe mir nun das Datenblatt genau angeschaut vom 74HC595...

Der wird es wohl werden... Also min 2 davon.

Damit probier ich es dann.

Bin noch Frischling auf dem ganzen Gebiet. Den Schiebetakt erzeuge ich am Besten im Board um das mit den Daten sauber hinzubekommen. Richtig?


Für Unwissen brauchst Du Dich nicht zu entschuldigen. Wir alle haben mal klein angefangen und sind auch keine Allwissenden.
Ich ausgenom..auah, äh auch ich.  ;) ;) ;) ;)
Grüße Uwe

volvodani

Ao mit einem Aufwändigen Programm bin ich mit shiftout auf120hz gekommen wegen des großen Programms . Mit shiftput via spi kam ich dann auf 1khZ bei 8 schieberegistern hinterieinader.
Gruß
Der Dani.

Deine zwie hz sind locker zu machen. Der alte zustand bleibt ja bei schieberegisten anstehen bis du die neuen daten drin hast und dann den "ausgabe" pin aktivierst. Und das kannst du mit normalen shifout mindestens 100mal in der Sekunde machen.
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

R1der

Das wäre meine nächste Frage gewesen... Also mit dem alten Zustand 8)

Ich bestelle mir mal eine handvoll und probier es denn mal aus.
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

uwefed

Wünsch Dir gutes Gelingen.
Uwe

R1der

Danke!

Hab noch ein IC gefunden, womit es realisierbar wäre.

LM3914 - damit ist eine Balkenanzeige möglich.

Bau mir das ganze natürlich über ein arduino+SR, da ich sowieso ein wenig rechnen muss und es interessanter ist.
Um Dinge zu erleben, die du noch nie erlebt hast, ist es nötig Dinge zu tun, die du noch nie getan hast

Serenifly

#28
Jul 08, 2013, 09:16 am Last Edit: Jul 08, 2013, 09:24 am by Serenifly Reason: 1
Für den LM3914 brauchst du aber ein Analog-Signal um ihn ansteuern. Und der Arduino hat keinen D/A-Wandler. Das kommt darauf an was da genau angezeigt werden soll. Wenn die Anzeige-Werte erst irgendwie berechnet werden müssen geht das nicht. Aber als Voltmeter z.B. wäre das natürlich interessant. Lautstärke-Regelung ließe sich auch machen, aber da muss man die Spannung entsprechend anpassen.

R1der

Ich weiß. Ohne Anpassung nicht verwendbar.

Zur Not PWM-Ausgang und den Arithmetischen Mittelwert zur Wertvorgabe nehmen...

Aber ich bleibe beim SR 8)
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