Forum: Mikrocontroller und Digitale Elektronik Verschiedene Helligkeiten mit Schieberegister


von Andy (Gast)


Lesenswert?

Hallo allerseits,

Ich habe eine kurze Frage. Und zwar habe ich ein Lauflicht mit einem
ATmega8 und zwei Schieberegistern (HEF4094) realisiert (in BASCOM). Das
hat super funktioniert (ist ja auch nicht schwer - gg).
Nun möchte ich aber etwas anspruchsvolleres probieren. Und zwar möchte
ich eine Art Welle programmieren. Da soll es natürlich ein Tal und ein
Maximum geben.
Wie kann ich aber mit den Schieberegistern verschiedene Helligkeiten
ausgeben. Geht das überhaupt, oder gehen ich mit dieser Lösung in die
falsche Richtung??

Ich hoffe, dass mir irgendwer helfen kann!! Vielen Dank im Voraus!

mfg
Andy

von Rahul (Gast)


Lesenswert?

Klar geht das (auch in BASCOM)...
Dazu muss man mehrere Bytes nacheinadner ausgeben, und diejenigen LEDs,
die heller als die andere erscheinen sollen öfter ausgeben.

z.B.

(1) 10000000
(2) 11000000
(3) 11100000
(4) 11110000
(5) 11111000
(6) 11111100
(7) 11111110
(8) 11111111

Wenn man diese 8 Byte in regelmässigen Abständen nacheineinander
ausgibt, erscheint es, als leuchtete das erste Bit am hellsten und das
letzte am schwächsten.
Dabei sollte die Ausgabefrequenz augenfreundlich wählen, weil es sonst
zu Flackereffekten kommt.
Sowas müsste man auch in BASCOM hinbekommen...

von Andy (Gast)


Lesenswert?

Hallo Rahul,

Vielen Dank für deine rasche Antwort! Werd ich gleich probieren...

Gibt es auch noch eine andere Möglichkeit, das hinzubekommen. Ich
möchte gerne mehrere Varianten kennenlernen.

mfg

von peter dannegger (Gast)


Lesenswert?

Eine Mehrkanal-PWM in Basic mit augenfreundlicher Wiederholfreqeunz auf
Schieberegister hinzubekommen, könnte sehr haarig werden.

Da sind Assembler oder C wesentlich besser geeignet.


Peter

von Sebatsian Heyn (Gast)


Lesenswert?

warum? wenn du mit hardware spi die daten rausschiebst?

von Andy (Gast)


Lesenswert?

Ich habe eigentlich vor mit der Hardware spi zu arbeiten. Hab ich auch
schon hinbekommen. Und wie funktioniert das mir der Mehrkanal-PWM?

von Karl heinz B. (kbucheg)


Lesenswert?

Eine PWM ist doch im Grunde nichts anderes als
eine bestimmte Rechteckschwingung an einem Ausgang.

    +--------+        +--------+
    |        |        |        |
    |        |        |        |
    |        |        |        |
----+        +--------+        +------

Entscheidend ist dabei das zeitliche Verhältnis von High-Pegel
zu Low-Pegel. Warum? Weil die dadurch übertragene Energie
proportional zur Fläche unter der Kurve ist. Sind die High-
Pegel jetzt aber schmal


    +---+             +---+
    |   |             |   |
    |   |             |   |
    |   |             |   |
----+   +-------------+   +----------

so ist die Fläche und damit die übertragene Energie kleiner,
als wenn die High-Pegel breit sind.


    +--------------+  +--------------+
    |              |  |              |
    |              |  |              |
    |              |  |              |
----+              +--+              +--

So weit klar?
Gut.

Nun, wie kann man sowas erzeugen?
Letztendlich läuft es doch immer darauf hinaus, dass der
Ausgabe-Pin eine bestimmte Zeit lang eingeschaltet ist
(der High-Puls) und dann eine bestimmte Zeit lang aus-
geschaltet wird (der Low-Puls). Das kann zb ein Timer
übernehmen, muss er aber nicht. Das kannst du auch selbst
machen. Du musst nur dafür sorgen, dass ein Pin in regelmässigen
Abständen High-Low toggelt und dass du das Verhältnis von
High zu Low Zeit einstellen kannst.

Sagen wir mal du gibst in einer Schleife immer wieder ein sich
wiederholendes Muster von 8 Werten (0 oder 1) auf einen Pin aus.
Sagen wir mal weiter, dass ein Durchlauf durch die Schleife genau
1 ms dauert.

Das Muster könnte zb sein:

 0 0 0 0 0 0 0 0

das heist dann: der Ausgane-Pin ist ständig low. Oder in Zeiten
ausgedrückt: der Ausgabe-Pin ist 8ms low und überhaupt nie high.

Oder das Muster könnte sein

 1 1 1 1 0 0 0 0

das heist dann: der Ausgabe-Pin ist 4 ms high und dann 4 ms low
(dann wiederholt sich das Spielchen, denn die Schleife läuft immer
wieder und immer wieder und gibt immer dieselbe Abfolge dieser
8 Werte aus).

Oder das Muster könnte sein:

 1 1 1 1 1 1 0 0

das heist dann: der Ausgabe-Pin ist 6 ms high und 2 ms low.

Durch die Anzahl der 1-en die da hintereinander am selben Pin
ausgegeben werden, steuere ich das Verhältnis (zeitlich gesehen)
von High-Zeit zu Low-Zeit. Und genau das ist ja das Wesen einer
PWM.

Für eine Mehrkanal-PWM machst du jetzt das selbe Spielchen
an mehreren Output-Pins gleichzeitig. Anstatt also nur einen
Pin in der Schleife auf 0 oder 1 zu setzen, macht man das halt
zb mit einem kompletten Port an allen Pins.

Bei dir kommt jetzt natuerlich noch hinzu, dass du die
eigentlichen Output-Pins nicht am µC hast, sondern dass die
am Schieberegister abgegriffen werden. Aber das Prinzip
ist das gleiche: Du musst nur dafür sorgen, dass ein Schieberegister
Output Pin im richtigen High-Low Verhältnis umgeschaltet wird.
Du lädst also das Schieberegister ständig neu. Immer und immer
wieder und sorgst mit obiger Technik dafür, dass das Puls/Pausen
Verhältnis dem entspricht was du haben möchtest.

Wenn man das mal verstanden hat, dann ist das mit Schieberegistern
auch nicht schwer zu realisieren. Ich bin allerdings ein starker
Verfechter der 'zum Lernen so einfach wie möglich'-Technik. Daher
würde ich Dir mal empfehlen eine LED mal direkt am µC anzu-
schliessen und diese LED durch gezieltes 'Wackeln' am Pin in
der Helligkeit zu regeln. Wenn du das erst mal durchschaut hast,
dann sollte die Verkomplizierung durch das SR auch keine
Rolle mehr spielen.


Und genau das will ich ja: das ist eine

von peter dannegger (Gast)


Lesenswert?

@Andy,

Du setzt einen Timerinterupt auf, z.B. alle 50µs und läßt dort eine
Variable von 99 auf 0 runterzählen usw.. Diesen Wert vergleichst Du mit
8 Variablen (0..100), die der Helligkeit der LEDs entsprechen und setzt
dann entsprechend die Bits im Schiebewert.

D.h. die LEDs sind 0..100 von 100 Interrupts an.


Peter

von Andy (Gast)


Lesenswert?

@ Karl Heinz:
Vielen Dank für deine ausführliche Erläuterung. Diese Variante ist das,
was ich gesucht haben. Besten Dank!

@ Alle:
Danke für eure rasche Hilfe. Das ist es, was ich an diesem Forum so
mag!!

THX Andy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.