Versuchsaufbau: Binäruhr

Hallo,

die ist mein erster Projektversuch und wollte daher
fragen ob Ihr Euch dass mal anschauen könntet.
Ich würde ungern den Arduino kaputt machen nur weil
ich noch nicht wirklich weiß wie dies alles so läuft.

Es soll eine Binäruhr realisiert werden.
Die RGB-Beinchen der LEDs sollen an die Pins1-6
des jeweiligen Shiftregisters angeschlossen werden,

Die Arduino-Pins (13,12,11),(10,9,8) und (4,3,2) sollen
an den latch-, clock- und data-Pin des jeweiligen Shiftregisters
angeschlossen werden.

Dann noch Vcc für das Shiftregister und Gnd für LED und Shiftregister.

Frage1: Muß ich wirklich jeweils einen 220Ohm Widerstand vor jedes
RGB-Beinchen setzen oder kann ich, wie im Bild dargestellt, auch
nur einen auf der Gnd Leiste verwenden?
Wobei ich mich hier frage, ob nicht jede LED den Widerstand für
die nachfolgende LED verändert!?

Frage2: Wenn ich die einzelnen Bits im Shiftregister setze, ist dass dann
genauso wie das setzen eines 255 RGB-Wertes zu sehen?

Frage3: Beim messen der Spannung an den RGB Beinchen ist mir aufgefallen,
das Grün und Blau 3,5V anzeigen, Rot aber nur 2,5 !??
Alle gesetzten RGB-Werte waren aber 255.

Frage4: Macht der Versuchsaufbau überhaupt Sinn oder sollte dies anders
gelöst werden, wenn davon ausgegangen wird, dass 6 RGB LEDs
eingesetzt werden sollen?
Abgesehen von dem offensichtlichen, dass ein 24-Bitshiftregister
anstelle von 3 8-Bitshiftregistern genutzt werden könnte. :slight_smile:

Vielen Dank
Claudia

LED current limit resistors

0.1uF, one per shift register, Vcc pin to Gnd.

Hello CrossRoads,

thank you for your answers but unfortunately I'm a newbie
so I'm not 100% sure I understand it correctly.

Am I right to say I must use a resistor between the
each sift register and the connected RGB pin.
May I ask you why this is needed?
I was under the impression that the resistor on the Gnd lane,
where each LED is connected to is sufficient.
What do I have to reread to get a better understand?

What do you mean by Vcc pin to Gnd?
I assume you are talking about the Vcc pin of the shift register, don't you?
If I connect it to Gnd, how does the shift register gets it current?

Sorry for my ignorance - still learning/trying to understand these electronic stuffs.

Cheers
Claudia

CFrank:
Frage1: Muß ich wirklich ...

Ja.

CFrank:
Frage2: Wenn ich die einzelnen Bits im Shiftregister setze, ist dass dann
genauso wie das setzen eines 255 RGB-Wertes zu sehen?

Nein, schon weil Du nur sechs Beinchen verwendest.

CFrank:
Frage3: Beim messen der Spannung an den RGB Beinchen ist mir aufgefallen,
das Grün und Blau 3,5V anzeigen, Rot aber nur 2,5 !??
Alle gesetzten RGB-Werte waren aber 255.

Die Flußspannung von LEDs richtet sich nach ihrer Farbe und benötigt daher auch unterschiedliche Vorwiderstände, um eine gleiche Helligkeit zu erzielen.

CFrank:
Frage4: Macht der Versuchsaufbau überhaupt Sinn oder sollte dies anders
gelöst werden, wenn davon ausgegangen wird, dass 6 RGB LEDs
eingesetzt werden sollen?
Abgesehen von dem offensichtlichen, dass ein 24-Bitshiftregister
anstelle von 3 8-Bitshiftregistern genutzt werden könnte. :slight_smile:

Da ich mir nicht vorstellen kann, wie Du die RGB-LEDs zu einer Binäruhr zusammenbauen möchtest, fällt mir die Antwort schwer. Du könntest auch ein Schiftregister pro Farbe verwenden. Da fallen mir auf jeden Fall mehrere Varianten ein.

Add a 0.1uF cap from shift register VCC pin to Gnd.

One resistor on common RGB pin is not the best. Better way is a resistor for each LED to limit current to ~ 10mA, total current draw when all LEDs are on should < 70mA.

MasterClear of each shift register: connect to 5V.
OE (G) of each shift register: connect to Gnd.
Control lines cannot be left to 'float'.

Danke für die Antworten agmue,

wenn ich zuerst auf das Konzept kommen darf,

jede LED stellt eine binäre Wertigkeit dar, heisst also

LED1 = 1
LED2 = 2
LED3 = 4
LED4 = 8
LED5 = 16
LED6 = 32

und die Fraben rot, grün und blau (oder jede andere Variante) stellen Stunden, Minuten und Sekunden dar.

Wenn also die LED3 rot leuchtet und alle anderen aus sind, dann ist es 4 Uhr,

Wenn LED5 ein Mix aus rot und grün ist, LED1 blau und LED6, LED3 und LED2 grün sind, dann wäre es 16:54:01.

Das soll das Ziel sein.

Zu Frage2: Ich war der Meinung, dass das Shiftregister einen Pin entweder auf 0 oder 1 setzt und daher
entweder Spannung anliegt oder aber auch nicht, hab ich das falsch verstanden?

Zu Frage3: Gibt es da ein Dokument oder Link wo ich mir die jeweiligen Werte anschauen kann
oder eine Formel dies zu berechnen?

Zu Frage1: Darf ich fragen warum das so ist, ich habe beim Messen der Spannung gesehen, dass es Unterschiede gibt aber wieso ist dem so? Wenn ich, ich habe momentan nur eine RGB LED, die LED
so wie im Bild anschließe, liegt an Rot 2,5V und an den anderen 3,5V an, wenn ich vor jedem RGB
Beinchen den gleichen Widerstand (220Ohm) setze, dann liegt bei Rot 2V und bei den anderen 2.6-2.7 an.
Warum ist dem so??

Danke
Claudia

CFrank:
oder kann ich, wie im Bild dargestellt, auch nur einen auf der Gnd Leiste verwenden?

Nein. Das sind drei einzelne LEDs in einem Gehäuse, die du unabhängig schalten willst

Beim messen der Spannung an den RGB Beinchen ist mir aufgefallen, das Grün und Blau 3,5V anzeigen, Rot aber nur 2,5 !??

Die Schwellenspannung hängt von der Wellenlänge ab. Je niedriger die Wellenlänge desto höher die Spannung. Das ist hängt mit dem Material zusammen dass für die Dotierung der Halbleiter verwendet wird:

Dazu kommen noch der interne Aufbau der LED wodurch zu Abweichungen vom typischen Wert je nach Typ kommen kann

Als erstes, nochmals danke für alle Antworten.

@CrossRoads

again, thank you, I hope I did what you, agmue and Serenifly have proposed - the new layout

@Serenifly,danke für den Link :wink: aber den muß ich noch öfter lesen um das zu verstehen,

das klingt wie Atomwissenschaft :slight_smile:

Cheers
Claudia

CFrank:
aber den muß ich noch öfter lesen um das zu verstehen,

Ist auch nicht nötig. In der Praxis muss man nur wissen dass es den Unterschied gibt. Auf der Wiki Seite für LEDs gibt es auch eine leichter verständliche Erklärung.

How is pin 10 connected?

Must be LOW, or driven from PWM pin for brightness control.

Sorry, I have that backwards.
13 LOW, 10 HIGH. Don't let them float.

@CrossRoads

Pin13 which is marked as G by Fritzing app is connected to Gnd
Pin10 (SCL) is connected to Vcc.

I have to apologize, the 2nd picture has an error as I counted from the wrong side.
Current layout

I do have an additional understanding question concerning how the 8bit shift register works.

I do understand that output pins (1-7 and 15) are connected to the external devices, like a LED,
in case we need a simple on/off mechanism, correct?

Gnd and Vcc are connected to Gnd and Vcc of course.

OE (Pin 13 - and marked as G by Fritzing app) is used to enable/disable ALL outputs at once
and can be used with PWM to control e.g. brightness of a LED

Pin11 (SRCLK), Pin12(RCLK) and Pin14(SER) are used to do the actual bit setting.
Pin11 seem to be the clock pin,
Pin12 the latch pin and
Pin14 the data pin

Pin11 receives the 8 "reference signals" and is compared with what Pin14 receives at that time.
If Pin14 is high the respective bit should be set if low it is not set.
Once the 8 "reference signals" have been received and its state has been saved the bits are set
using the latch pin, correct?

Now the remaining two pins, what is the purpose of Pin9 QH' (looks like another output
but then it is a 9bit shift register?) and Pin10 SRCLR (which is connected to Vcc)??

Thank you
Claudia

@Serenifly
und aus der Atomwissenschaft wurde Raktenwissenschaft. Ehrlich, ich hätte nie im Leben vermutet
was für einen Aufwand man betreiben muß um eine LED zu bauen. :slight_smile:

CFrank:
Wenn LED5 ein Mix aus rot und grün ist, LED1 blau und LED6, LED3 und LED2 grün sind, dann wäre es 16:54:01.

Ich fand Binäruhren bislang schon schwierig zu verstehen, diese dürfte alle mir bekannten toppen. Aber es ist eine kreative Idee!

Je Farbe ein Schieberegister, also Stunden, Minuten und Sekunden getrennt, dürfte Dir das Programmieren erleichtern.

CFrank:
Zu Frage2: Ich war der Meinung, dass das Shiftregister einen Pin entweder auf 0 oder 1 setzt und daher
entweder Spannung anliegt oder aber auch nicht, hab ich das falsch verstanden?

Nö, so stimmt es.

Darf ich fragen warum Du die Shiftregister einzeln ansteuerst? Der Vorteil liegt doch darin, dass die hintereinander gehängt werden können und damit 3 Steuer-Leitungen ausreichen, egal wieviele Shiftregister man hintereinander anschließt. Siehe hier:

Die Frage 2 ist mir nicht ganz klar. Willst Du die einzelnen Farben noch in der Helligkeit steuern? Wie Du schon richtig geschrieben hast, ein output Pin am Schieberegister ist entweder an oder aus und liefert damit 5V oder 0V. Und damit ist dann auch die angeschlossene LED an oder aus.

Zu Frage 3: Wie hast Du denn die Spannung an den LEDs gemessen? Jeweils eine Messklemme vor und hinter der LED? Dann hast Du die über der LED abfallende Spannung gemessen: Leuchtdiode – Wikipedia. Das ist also normal. Daher auch für jede LED einen eigenen Widerstand mit dem passenden Wert, damit der maximale Strom nicht überschritten wird und vor allem die unterschiedlichen Farben ähnlich hell leuchten.

Mario.

@agmue,

Ich fand Binäruhren bislang schon schwierig zu verstehen, diese dürfte alle mir bekannten toppen. Aber es ist eine kreative Idee!

ich will mich nicht mit fremden Federn schmücken, die Idee hab ich mir von Don (Mitglied im kodinerds forum) abgeschaut. Er benutzt an dieser Stelle aber ein LED Strippe welche über einen Controller angesprochen wird. Bei mir reichts nur für die einzelnen LEDs :wink:

Je Farbe ein Schieberegister, also Stunden, Minuten und Sekunden getrennt, dürfte Dir das Programmieren erleichtern.

Danke für den Tipp macht Sinn, ja :-).

@Mario

Darf ich fragen warum Du die Shiftregister einzeln ansteuerst? Der Vorteil liegt doch darin, dass die hintereinander gehängt werden können und damit 3 Steuer-Leitungen ausreichen, egal wieviele Shiftregister man hintereinander anschließt.

Aber immer doch und die Antwort lautet: Aus Unwissenheit :frowning:
Danke für den Link, ich weiß gar nicht warum ich nicht mehr an die Tutorials gedacht habe, da wird sogar
meine Frage nach dem Pin9 erklärt (Serial Out).

Willst Du die einzelnen Farben noch in der Helligkeit steuern?

Nein, mir ging es darum zu verstehen ob sich an dem Verhalten etwas ändert?
Ich probiere es mal so, eine RGB Led kann ja für jedes Beinchen einen Wert zwischen 0-255 erhalten,
am Beispiel des R-Beinchens, wo 0 aus beudeutet und 22 das maximale Rot leuchtet.
Wenn ich nun dies Beinchen über ein Schieberegister anschließe, ist dass dann so zu sehen als ob
ich nur noch die Werte 0 und 255 übergebe? Ich gehe davon aus, aber kann es sein das vielleicht
nur 0 und 200 übergeben wird, warum auch immer?

Macht das mehr Sinn oder immer noch verwirrend?

Wie hast Du denn die Spannung an den LEDs gemessen?

Das erste mal am Breadboard, danach aber immer an der LED selber, sprich
Minus an Kathode und Plus an die einzelnen RGB Beinchen, also vor(?) der LED .

Vielen Dank für eure Hilfe - super Forum.

Gruß
Claudia

CFrank:
Ich probiere es mal so, eine RGB Led kann ja für jedes Beinchen einen Wert zwischen 0-255 erhalten,
am Beispiel des R-Beinchens, wo 0 aus beudeutet und 22 das maximale Rot leuchtet.
Wenn ich nun dies Beinchen über ein Schieberegister anschließe, ist dass dann so zu sehen als ob
ich nur noch die Werte 0 und 255 übergebe? Ich gehe davon aus, aber kann es sein das vielleicht
nur 0 und 200 übergeben wird, warum auch immer?

Macht das mehr Sinn oder immer noch verwirrend?

So langsam verstehe ich was Du meinst. Aber den Wert zwischen 0 und 255 für die LED hast Du nur dann, wenn Du einen Ausgang des Arduino als PWM Ausgang (analogWrite) verwendest, das ist ein Sonderfall und hat mit der LED selbst nix zu tun. Der Ausgang schaltet dann ganz schnell zwischen 0V und 5V hin und her. Also auch nur zwischen AN und AUS. Lediglich die Zeit für AN und AUS werden unterschiedlich lang gewählt. Siehe https://www.arduino.cc/en/Tutorial/PWM
Damit entsteht für das träge Auge der Eindruck unterschiedlicher Helligkeit ohne das wir ein Flackern sehen.
Das geht mit einem Shiftregister so einfach erstmal nicht. Zumindest nicht direkt. Du hast da tatsächlich nur die Wahl zwischen An und Aus, wie Du schon selbst geschrieben hast.
Es gibt eine Lib die ShiftPWM heißt und das PWM auch mit Shiftregistern abbildet, das ist aber dann deutlich komplexer, weil die Werte mehrere hundert Mal pro Sekunde in die Register geschoben werden, um das PWM zu emulieren.

Mario.

hi,

naja, die shiftPWM ist sehr komfortabel zu bedienen, genau genommen sind damit für newbies die shiftregister einfacher zu steuern, als wenn man selbst die bytes reinschicken muß.

andererseits muß der TO sehr gut mit binärwerten klarkommen, wenn er dann auch die uhrzeit von diesem ding ablesen will. ich kann sehr gut in bits und bytes denken, und eine binär uhr mit getrennten reihen für stunden, minuten und sekunden ist für mich einfach zu lesen.

dieses ding hier ist ein anderes kaliber. ich glaube nicht, daß ich die schnell lesen kann. selbst mit übung wird das im zweistelligen sekundenbereich sein, und das ist halt dann nicht mehr sehr eindrucksvoll, wenn man's vorführt.

erinnert mich ein bißchen an:

Der britische Astrophysiker Sir Arthur Eddington wurde einer Forscheranekdote zufolge einmal gefragt, ob es denn stimme, dass es auf der Welt nur drei Menschen gibt, die Albert Einsteins Allgemeine Relativitätstheorie verstehen. Darauf soll Eddington mit einer Gegenfrage geantwortet haben: „Wer ist denn der dritte?“

gruß stefan

Mario, vielen Dank, auch das Du einen weiteren Fehler ignoriert hast. :wink:

wo 0 aus beudeutet und 22 das maximale Rot leuchtet

musste natürlich

wo 0 aus beudeutet und 255 das maximale Rot leuchtet

heissen.
Danke auch für den Hinweis zu dem PWM Tutorial, leider fällt mir dazu wieder ein Frage ein.

Im Tutorial heisst es dass der Arduino mit 500Hz, also 500 mal pro Sekunde, arbeitet.
Wenn also eine Modulation 2ms dauert, wäre dann nicht ein Wertebereich von 0-250
für analogWrite richtig? Mache ich mir da Gedanke die ich mir nicht machen muß weil
das intern so behandelt wird? Also sowas wie

if(ModulationWidth > 250){ModulationWidth = 250;}

oder habe ich, höchstwahrscheinlich, noch Verständnislücken?

Vielen Dank und in der Hoffnung nicht zu nerven
Claudia

Hallo Stefan,

vielen Dank für deinen Hinweis.
Ja, kann schon sein, dass das nicht mehr lesbar ist, :slight_smile:
ein Sekunden-Ausschalter ist auch schon geplannt. :wink:

Ich frage mich aber, ob dies nicht auch nur eine Sache des Trainings ist,
da unser Gehirn doch ein vielfaches schneller arbeitet.
Vielleicht müssen ein paar Nervenbahnen neugebaut oder verlegt werden - mal sehen. :slight_smile:

Gruß
Claudia

CFrank:
Er benutzt an dieser Stelle aber ein LED Strippe ...

Jetzt verstehe ich die "255"! Die "LED Strippe" (eigentlich wohl "stripe" für Streifen, also LED-Streifen) hat je Lichtpunkt mit R-, G- und B-LED auch noch ein IC eingebaut, das die LEDs mittels PWM ansteuern kann. Dem IC schickt man je LED ein Byte, also drei je Lichtpunkt, wobei "0" aus und "255" volle Helligkeit bedeutet, da ein Byte Werte von 0 bis 255 darstellen kann.

Übertragen auf das Schieberegister bedeutet "0" also "aus" und "255" bedeutet "an". Wobei das Schieberegister acht Bit aufnimmt, je Ausgang ein Bit. Beim Schieberegister bedeutet "255" alle Ausgänge auf HIGH, etwas ganz anderes als bei PWM.