PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED: Hell- und Dunkelzustand über PWM steuern



BlooD
10.09.2005, 17:06
Hallo,

hab im Forum schon ein Beitrag gefunden wie man eine LED mit PWM dimmen kann, nun möchte ich aber zwei Zustände definieren (Hell und Dunkel).
Habe mir das so vorgestellt:

Ich benutze den ATMega8 (Timer1) als PWM, dann habe ich bereits 2 Kanäle.
mit dem einen Kanal regle ich denn Hell-Zustand; mit dem anderen den Dunkel-Zustand.

Ich hab nen Schaltplan gebastelt wie ich mir das vorstelle, darin sind jetzt nur 3 LED's enthalten, das ganze sollte dann mit mindestens 20 LEDs laufen. Jede einzelne ansteuerbar (wahrscheinlich über Latches - aber das ist Nebensache)

So, was ich nun wissen will: Ist der ansatz okay oder würdet ihr das anders machen?

Noch nen Codebeispiel für die Interessenten:

$regfile = "m8def.dat"
$crystal = 1000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear down , Compare B Pwm = Clear down , Prescale = 1

Config PortC = Output

LED_PowerA Alias PWM1a : Config PortB.1 = Output
LED_PowerB Alias PWM1b : Config PortB.2 = Output

LED_PowerB = 200 'Hell-Zustand
LED_PowerA = 10 'Dunkel-Zustand

DO

'Beispiel: LED an Portc.1 blinkt von Hell auf Dunkel
portc.1 = 1
waitms 500
portc.1 = 0
waitms 500

LOOP

END

patti16
10.09.2005, 20:13
Hallo,

so ist das auf jeden fall gut. Ich habe es anders gemacht. Ich habe einfach die Led, die ich haben wollte einfach an Portb.1 gehängt, allerdings musst du dann noch ein Vorwiderstand vor die Led hängen. Dann kannst du genau so die Helligkeit regeln wie jetzt und es ist weniger aufwendig dann brauchst du die Dioden und soweiter nicht.
Was hast du denn mit den ganzen Leds vor??

gruß
patrick

Marco78
10.09.2005, 22:47
Moment. Ich verstehe das Prinzip jetzt nicht!
Warum ein Port für Hell und einer für dunkel?
Wenn der hell heller macht und der dunkel gleichzeitig dunkler macht, dann ist es ja so, als wäre nichts passiert!
Es reicht doch ein Kanal, der die Pulsweite änders und damit heller bzw dunkler macht.

Oder meint ihr was anderes, was ich jetzt nicht verstanden habe?

patti16
11.09.2005, 12:49
halo marco78,

also ich meine das ganz anders als der blood den ich mach das nur über ein Port was er über zwei macht was eigentlich umständlich ist. Aber vielleicht hat er sich ja dabei was gedacht. Ich habe das nur über ein Portb laufen, wo ich alles beide machen kann hell und dunkel.

gruß
patrick

BlooD
11.09.2005, 15:38
Ich glaube ihr habt mich da nicht so ganz verstanden ;-)
Also nochmal zur klarstellung:
Das Ding soll später ne Binäruhr werden, die LEDs, die ausgeschaltet sind sollen aber ganz schwach leuchten. Desweiteren möchte ich die maximale Helligkeit einstellen.

Das Tastverhältniss von PWM_HELL muß größer sein, als das von PWM_dunkel, sonst gehts natürlich nicht.

Die Sache funktioniert dann so:

-LED ist aus:
-- Der Strom fließt dann über T1, den Vorwiderstand, die LED und dann über T2 - die Helligkeit wird dabei durch T2 begrenzt. Das wäre dann auch so, als ob kein µC angeschlossen ist (der entsprechende Pin liegt auf 5V)

-LED ist an:
-- Der Strom fließt jetzt über T1, den Vorwiderstand und dann über den entrsprechenden Pin am µC (liegt jetzt auf 0V), die Helligkeit wird jetzt begrenzt über den T1.

Die Dioden brauche ich damit ich die LEDs einzeln schalten kann, sonst würde ich alle LEDs mit einem Pin schalten.

@patti16:
wie soll ich das machen mit der LED+Vorwiderstand direkt an einem Pin? Einfach immer ein+ausschalten und damit dimmen? Das ginge solange gut, bis ich keine Ports am µC mehr frei habe, und da ich einen ATMega8 verwenden will reichts nicht für 20LEDs, muss ich also eine Porterweiterung benutzen, diese kann ich dann nicht so schnell ein und ausschalten.

patti16
11.09.2005, 15:52
hallo,

du kannst doch mit dem Pwm signal die led hell und dunkel machen ok für 20 leds wirds nicht reichen aber für 4 oder 5 schon. Du brauchst doch die Led nur mit einem vorwiderstand an deinen Portb.0 oder Portb.1 die Led mit dem Widerstand dran hängen probier das doch mal aus.

gruß
patrick

Marco78
11.09.2005, 16:56
Die mindest und minimalleuchtstärke kannst du im Programm ja vorgeben.


So, was ich nun wissen will: Ist der ansatz okay oder würdet ihr das anders machen?

Ich würde es anders machen ;)

Und Sorry, das es eine Uhr werden soll habe ich im ersten Beitrag überlesen.

Ich kann auch nicht ganz nachvollziehen wie das elektrisch arbeiten soll. Die Widerstände kannst du dir wahrscheinlich sparen. Die Transistoren haben ja auch einen Spannungfall. Bzw. sie könen wohl kleiner ausfallen.
Aber im Prinzip sind sie überflüssig wenn man mit PWM arbeitet.
Wofür sind die 1N4148? Wozu die Abgriffe zum AVR (C.1, C.2, C.3)?
Sicher das es mit 2 NPN so funktioniert?
Hast du das schonmal aufgebaut und getestet?

BlooD
11.09.2005, 17:12
Stand ja gar nicht da das es eine Uhr werden soll ;)

Naja die Widerstände sind nur dafür da, das die LEDs nicht durchbrennen, wenn ich beim PWM_HELL den Maximalwert angebe (dann würde die LED bei 5V ja bruzeln)

Hmm, hab ich das wirklich so schlecht erklärt?
Die "Abgriffe" sind um die LEDs einzuschalten:
Logisch 1 - LED aus
Logisch 0 - LED an
--> steht doch in meinem letzten Beitrag

Naja und die Dioden sind dafür, das wenn ich eine LED einschalte, die anderen nicht auch leuchten.

--> Ich habs schon mit 2 LEDs aufgebaut und das hat auch funktioniert.

@Marco87

Ich würde es anders machen ;)

Wie denn?

Marco78
11.09.2005, 21:20
Stand ja gar nicht da das es eine Uhr werden soll
Deine Antwort war aber so vorwurfsvoll als ob man es hätte wissen müssen :P

Wenn deine PWM_DUNKEL mal einen Fehler hat, ist eine 1 am Port tatsächlich für LED aus. Aber für alle LEDs. Weil es ein (fast) kurzschluss ist.

Wenn es mit 2 LED geht, wird es auch mit 20 klappen. Sofern die Summe der Ströme der Ports nicht mehr als erlaubt wird.
Dann kannst du es ja auch so machen.
Ich würde das ganze ohne PWM zu bauen. Und wenn es Lowcurrent-LEDs sind, würde ich LEDs alle direkt am AVR anschliessen. Oder über eine Porterweiterung um Pins zu sparen?
Evtl würde ich es auch ganz anders machen. Das ist nur das, was mir grade durch den Kopf ging ohne viel drüber nachzudenken.

Es wiederspricht zwar einer Grundregel im Umgang mit µC, aber die hast du ja auch schon gebrochen. Wenn man einen µC einsetzt, sollte man alle externen Bauteile vermeiden, die der µC ersetzen könnte. Und wenn man es schon mit PWM macht, könnten die Widerstände wegfallen. Du kannst ja im Programm vorgeben, wie hell sie werden dürfen.

Die Krönung wäre es ja, wenn alle LEDs direkt an die Pins angeschlossen werden, ohne Widerstand, ohne Transistor und alles per PWM geregelt wird. Dann darf man aber wirklich nur Lowcurrent-LEDs verwenden. Und die sind ggf. zu dunkel.

BlooD
12.09.2005, 09:39
Ich geb dir mal in dem Punkt recht, das es ein "fast-Kurzschluss" werden kann, hab nicht bedacht, das der ATMega8 ja auch HIGH treiben kann - wenn er das nicht könnte und bei 1 nur ein interner PullUp hängen würde, dann würde es so ja gehen... !?! Käme dann wieder auf die Schieberegister/Latches an die ich verwenden wollte...

Ich verzichte eigentlich nur solange auf externe Bauteile bis ein Zerstören anderer Bauteile durch Programmierfehler eintreten könnte. Die anderen lass ich zur Sicherheit normal drin; z.B. die Widerstände.

Wenn ich dich richtig verstanden hab, dann würdest du nicht die Hardware PWM-Kanäle nehmen (davon hab ich ja nur 3), sondern z.B. alle 20 LEDs an einen Schieberegister und dann mit dem Muster die Helligkeit steuern?

also in etwa so:



DO
Muster 11000101 senden
lang warten (LEDs an)
00111010 senden
kurz warten (anderen LEDs kurz an)
LOOP


Lowcurrents will ich keine nehmen, wird sonst zu dunkel - 20mA sollte die Schaltung schon können.

Marco78
12.09.2005, 10:25
Software-PWM würde ich nur dann nehmen, wenn ich Lowcurrent-LEDs nehmen und dann keine weiteren Bauteile mehr mit einbauen bräuchte.
Und ob das für 20 LEDs klappt weiss ich nicht. Ich würde dann im Programm immer ein Bit pro LED setzen und in einen Timer die Ausgänge ansteuern.
Der Timer müsste dann immer so schnell aufgerufen werden, das alle 20 LEDs gedimmt werden können, ohne das sie flackern.
Für Hell würde das wohl gehn. Aber wenn viele dunkel sind würde viel Zeit verloren gehen.

Man könnte ja auch alle LEDs über Widerstände direkt an die Spannung anschliessen. Somit sind alle LEDs wenn sie nicht hell sein sollen etwas gedimmt.
Und über einen zweiten Widerstand werden sie mit den Pins dann ganz hell geschaltet?!
Damit spart man sich die Zeit für die PWM.