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
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.
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.
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
@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).
@Hans AVRFreaks hat unter Academy ein neues Projekt: LED Fader! Ist aber (glaube ich) für einen mega16 ;-) Gruß, Edgar
Hi! Wenn das Lauflich nicht unbedingt mit einem µController realisiert werden muss, schau dir mal den LM3914 an. Grüsse Matthias
@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
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
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
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.