Forum: Mikrocontroller und Digitale Elektronik LED Lauflicht


von Hans Müller (Gast)


Lesenswert?

Hallo!

Habe ein kleines bis mittleres Problem:

Ich will mit ein 8515 ein kleines Lauflicht bewerkstelligen (max. 8
LEDs), welches langsam angeht (LED 1 fade in) und ein fliessender
Übergang zu den anderen LEDs stattfindet (LED 1 fade out + LED 2 fade
in).
Nun kenne ich mich leider mit Assembler nur so weit aus, dass ich das
Lauflicht ohne fliessenden Übergang selber programmieren kann (LED 1
an; LED 1 aus + LED 2 an), doch bleibt mir bis jetzt das Verständnis,
wie ich das ganze mit ein PWM realisieren soll, recht verschlossen.

Kann mir jemand vielleicht mit einer Erklärung (in einfachen Worten)
weiterhelfen oder vielleicht mit einen Programmcode der den wechsel bis
zur LED 2 beschreibt weiterhelfen?
Leider weiß ich auch noch nicht genau, wie man einen Interrupt
auslöst?

Eine reine Hardwarelösung mit Kondensatoren kommt leider nicht in
Frage, da ich verschiedene Lauflicht-Programme mit harten und weichen
Übergang haben möchte.

Für jede Hilfe bin ich dankbar.

Danke. Hans

von thkais (Gast)


Lesenswert?

Da brauchst du eine 8-Kanal PWM, d.h. jeder Kanal muß eine eigene PWM
bekommen. Ist schon mit einem 2313 möglich, es geistert immer wieder
eine 8-Kanal Servo-Ansteuerung für den 2313 durch die Gegend, die
sollte einige Denkanstöße geben können.

von crazy horse (Gast)


Lesenswert?

geht schon mit 8-Kanal-PWM, ist aber kaum mit einer Servoansteuerung
verwandt. Dort ist es ausreichend, immer einen Kanal nach dem anderen
zu erzeugen, also reicht dafür ein einziger Hardwaretimer und ein ganz
klein wenig Software, die die Ports schaltet.
Aber ist trotzdem kein Problem, war hier vor kurzem.

von Markus Kaufmann (Gast)


Lesenswert?

Das geht z.B. so:
Du rufst (per Timerinterrupt) eine Funktion 10000 mal pro Sekunde auf.
Dort ist ein Zähler, der immer von 1 bis 100 läuft und dann wieder von
vorne beginnt.

Dann brauchst Du 8 (Byte-)Variablen für die Helligkeit der 8 LEDs. Der
Wertebereich geht von 0 (LED aus) bis 100 (immer an).

Ist die Helligkeitsvariable einer LED größer oder gleich dem o.g.
Zähler, dann wird die LED angemacht, ansonsten aus.

Leider ist die Helligkeit einer LED nicht linear zur Zeit, also in der
Hinsicht etwas rumexperimentieren.

Markus

von thkais (Gast)


Lesenswert?

@crazy horse:
Eine gewisse Ähnlichkeit hat PWM mit einer Servoansteuerung schon...
;)
Wenn der Übergang fließend sein soll, brauchts mindestens 2 Kanäle
(einer, der dunkler wird und einer, der heller wird).

von Edgar (Gast)


Lesenswert?

@Hans

AVRFreaks hat unter Academy ein neues Projekt: LED Fader! Ist aber
(glaube ich) für einen mega16 ;-)

Gruß,
Edgar

von mbeyer (Gast)


Lesenswert?

Hi!

Wenn das Lauflich nicht unbedingt mit einem µController realisiert
werden muss, schau dir mal den LM3914 an.

Grüsse
Matthias

von thkais (Gast)


Lesenswert?

Der LM3914 kann aber nicht "faden"...

von Steril (Gast)


Lesenswert?

"AVRFreaks hat unter Academy"
----------
Wo gibts das zu lesen?

von Edgar (Gast)


Lesenswert?

@Steril:

bei www.avrfreaks.net anmelden, dann Academy->User Projects->complete
code
das Projekt heisst LED fades und hat die Nr. 177
Wenn Du bei AVRFreaks noch nicht als User angemeldet bist, mußt Du das
vorher tun, um auf die Downloads zugreifen zu können.

Viel Spaß weiterhin,
Edgar

von Hans Müller (Gast)


Lesenswert?

Erst einmal ein riesiges Dank an alle für die schnelle Hilfe. Der Link
zu avrfreaks.net hat mir sehr geholfen.

Es liegt übrings eine überarbeitete Version vom LED fader vom
12.10.2003.

@Edgar
Ein besonderen Dank an Dich.

Vielen Dank.

Hans

von samo (Gast)


Lesenswert?

Entwerfen Sie eine C-Funktion putPattern(), die unterschiedlich lange 
Byte-Folgen auf die LEDs ausgibt
und so ein Muster, wie z.B. ein Lauflicht erzeugt. Nachdem das Muster 
ausgegeben ist, schaltet sie die
LED-Zeile wieder aus.
Die Eingangsparameter der Funktion sind ein Array mit der Byte-Folge, 
die Länge der Byte-Folge und die
Dauer in ms, für die ein Byte auf den LEDs angezeigt wird (delay). Die 
Funktion soll davon ausgehen, dass
der Port für die Ausgabe auf die LEDs bereits initialisiert ist. Sie 
verwendet, wo das sinnvoll ist, die Funktionen
aus Aufgabe 1. Geben Sie den Prototypen für putPattern() an und zeichnen 
Sie ein Aktivitätsdiagramm für
die Funktion, auf dessen Grundlage die Programmierung im Labor erfolgt.
Hinweis: Sehr kompakt wird die Programmierung, wenn die 
Eingangsparameter von putPattern()in einer
Struktur gespeichert werden, die der Funktion übergeben wird.
kann niemand mich hilfen,um diese funktion zu verstehen

von Karl H. (kbuchegg)


Lesenswert?

samo schrieb:
> Entwerfen Sie eine C-Funktion putPattern(), die unterschiedlich lange
> Byte-Folgen auf die LEDs ausgibt
> und so ein Muster, wie z.B. ein Lauflicht erzeugt. Nachdem das Muster
> ausgegeben ist, schaltet sie die
> LED-Zeile wieder aus.
> Die Eingangsparameter der Funktion sind ein Array mit der Byte-Folge,
> die Länge der Byte-Folge und die
> Dauer in ms, für die ein Byte auf den LEDs angezeigt wird (delay). Die
> Funktion soll davon ausgehen, dass
> der Port für die Ausgabe auf die LEDs bereits initialisiert ist. Sie
> verwendet, wo das sinnvoll ist, die Funktionen
> aus Aufgabe 1. Geben Sie den Prototypen für putPattern() an und zeichnen
> Sie ein Aktivitätsdiagramm für
> die Funktion, auf dessen Grundlage die Programmierung im Labor erfolgt.
> Hinweis: Sehr kompakt wird die Programmierung, wenn die
> Eingangsparameter von putPattern()in einer
> Struktur gespeichert werden, die der Funktion übergeben wird.
> kann niemand mich hilfen,um diese funktion zu verstehen


1) Kapere bitte keinen anderen Thread.
   Vor allen Dingen dann nicht, wenn er so gut wie gar nichts mit
   deinem Problem zu tun hat

2) In der Aufgabenstellung steht eigentlich schon so gut wie alles.
   Selbst die Lösung ist dort mehr oder weniger schon enthalten.
   Du musst das nur noch etwas formaler aufschreiben und
   programmiergerecht aufbereiten

3) Im übrigen: hab ein bischen Phantasie.
   Wonach könnte da wohl gefragt sein? Die Aufgabenstellung ergibt
   sich eigentlich schon ganz von alleine, wenn man ein bischen
   darüber nachdenkt, was wohl so sinnvoll sein könnte.

von Rolf Magnus (Gast)


Lesenswert?

samo schrieb:
> Entwerfen Sie eine C-Funktion putPattern(), die unterschiedlich lange
> Byte-Folgen auf die LEDs ausgibt und so ein Muster, wie z.B. ein
> Lauflicht erzeugt.

Ok, fertig. Und jetzt?

von raketenfred (Gast)


Lesenswert?

Aufhören mit der Leichenschändung?

Der Thread ist doch schon so ziemlich tot

da macht eine Auto-Close-Funktion vll Sinn...

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.