LED Fader

Hier werden Fragen zu LED-Grundlagen beantwortet...

Moderator: T.Hoffmann

MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Mi, 27.10.10, 19:44

Hallo liebe Community,
ich möchte einen LED Fader für meinen Halloween Kürbis nachbauen. Hier im Forum und im Internet bin ich auch schnell fündig geworden.
Und würde nun gerne einen Bauen.
In der Baubeschreibung steht nun aber das , diese Schaltung mit 5Volt betrieben wird. Da ich aber im Kürbis leider keine Steckdose für ein Netzteil habe würd ich gerne einen 9Volt block verbauen. Nun weiß ich leider nicht ob das so einfach geht und ob dann die Baubeschreibung von den Widerständen so bleiben kann.
Ich hoffe ihr könnt mir weiterhelfen. Danke

Hier noch die Informationen :
3 grüne LED a ca. 3 Volt
Bild
gefunden bei : http://www.moddingtech.de/tutorials/44- ... fader.html

Vielen Dank
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Mi, 27.10.10, 22:29

Die 9V Block kann ich nicht empfehlen. Besser 3 AA oder AAA Batterien/Akkus verwenden. Selbst die billigsten davon halten viel länger als so ein 9V Block. Die kann man eigentlich nur für Geräte verwenden, die sehr wenig Strom brauchen (Multimeter, Feuermelder...). Zur Not müsste die Schaltung aber auch mit einen 9V Block laufen. Wenn Du Glück hast, sogar mit 3 LEDs in Serie. Aber halt nicht lang.
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Mi, 27.10.10, 22:39

aber den bauteilen wie dem lm342n ist das egal ob da jetzt nun 5V, 6V oder 9V ankommen?
was heist den "nicht lange" . was macht es für einen unterschied ob ich jetzt 4x 1,5 AA Batterien nehme oder 1x 9V Block? (Kann man das in etwas schätzen?)
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 28.10.10, 08:20

Der LM324 verträgt bis zu 32V. Das ist kein Problem. Wie das 'Zeitgewinnverhältnis' aussieht, ist stark von der Beschaltung abhängig. AA Batterien haben ca. 2000mAh (3 reichen!), 9V Block Batterien etwa 200-300mAh. Wenn also alle LEDs parallel betrieben werden (wie im Original-Schaltplan), ist das 'Zeitgewinnverhältnis' fast 1:10. Wenn Du am 9V Block alle 3 LEDs in Serie betreiben kannst, sinkt das 'Zeitgewinnverhältnis' auf ca. 1:3. Unter dieser Bedingung würde ein 9V Block ca. 10-20 Stunden halten (20mA LEDs vorausgesetzt, die wegen dem Faden mit durchschnittlich 10mA leuchten). Wenn die LEDs parallel betrieben werden nur noch ein drittel, also etwa 3-7 Stunden. Ob der Fade-Effekt bei 9V 'leidet' (also weniger 'schön' ist), müsste man probieren.
BTW: Ich würde die Schaltung mit einem LM358 aufbauen. Der LM324 ist ein 4-fach OP von dem aber in dieser Schaltung nur 2 verwendet werden. Der LM358 enthält nur 2 OPs, braucht also weniger Platz und weniger Strom.
Zuletzt geändert von Borax am Do, 28.10.10, 09:54, insgesamt 1-mal geändert.
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 28.10.10, 09:54

Vorschlag: Nimm den 9V Block und 2 LEDs in Serie, oder 3xAA und 1, 2, 3... LEDs parallel.
Ich hab den Schaltplan mal auf den LM358 angepasst und ein wenig 'optimiert' (Spannungsteiler 47K/47K auf 47K/68K geändert). Bei der Original-Schaltung fand ich die Pausen (LED aus) zu lang, außerdem erreicht der Strom nur geringe Werte (kann man natürlich durch Ändern des LED-Vorwiderstands anpassen, finde ich aber nicht soo toll). Das hier ist aber nur eine Simulation!In der Praxis kann es sein, dass die 68K schon zu groß sind. Also beim Nachbau auch 47k bzw. 56k testen. Der LED-Vorwiderstand mit 68Ohm hängt natürlich auch von den verwendeten LEDs ab.
Angepasster LM358-Schaltplan (und Sim):
LED_Fader_LM358_1.png
LED_Fader_LM358_1.png (10.48 KiB) 16539 mal betrachtet
Original-Beschaltung (R2=47K):
LED_Fader_LM358_2.png
LED_Fader_LM358_2.png (3.98 KiB) 16539 mal betrachtet
Für 3 LEDs in Serie reicht es bei 9V und ca. 3V pro LED sicher nicht.
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Do, 28.10.10, 15:29

Danke Borax,

hab das heute gleich mal nach deinem plan gebaut und zusammen gelötet. Funktioniert echt super! Vielen Dank

Ich habe allerdings 47k /47k verwendet. was würde den passiert wenn ich 47k / 68k nehmen würde?
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 28.10.10, 16:08

Wie oben schon geschrieben:
Bei 47k /47k hat man (laut Simulation - ich hab die Schaltung NICHT aufgebaut) relativ lange 'Pausen', wo die LEDs gar nicht leuchten (laut Simulation etwa genauso lang wie die gesamte 'An' Zeit). Das kannst Du in der unteren Kurve sehen. Wenn man auf 47k/68K geht, dann reduziert sich die 'Aus' - Zeit auf ca. 1/10 der gesamten 'An'-Zeit. Das sieht man in der oberen Kurve (direkt unter dem Schaltplan; man muss nur runter scrollen). Sprich es wird nach dem 'dunkel werden' praktisch gleich wieder heller, ohne dass erst eine Zeit lang die LEDs ganz aus sind. Vorsicht beim ausprobieren: Auch der Strom steigt wenn man R2 erhöht. Falls Du die Vorwiderstände für Deine LEDs 'eingemessen' hast (so bestimmt, dass max. 20mA fließen), dann müssen die wahrscheinlich größer werden, falls Du testweise mal R2 auf 56k oder 68k setzen willst.
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Fr, 07.01.11, 12:34

Hallo,

kann man einen fader auch mit einen programmierbaren Chip nachauen?
ich würde gerne haben das die leds auf 10% der leucht leistung herunterfahren und dann wieder nach oben auf 100%

zudem möchte ich einen wippschalter mit 2 getrennten Schaltern anschliessen.

Schaltkreis 1 aktiv - LEDs faden
Schaltkreis 2 aktiv - LEDs leuchten
Schaltkreis beide aktiv - LEDs leuchten

ist sowas machbar? und könnte mir jemand bei der realisierung helfen?


betrieben soll das ganze mit weißen LEDs und Batterien.
danke
Benutzeravatar
NeoExacun
Mega-User
Mega-User
Beiträge: 132
Registriert: Mi, 26.05.10, 14:35

Fr, 07.01.11, 16:26

MartinSch hat geschrieben:kann man einen fader auch mit einen programmierbaren Chip nachauen?
Natürlich. Du brauchst einen µC mit PWM-Timer und einem zusätzlichen Timer.

Dein seperater Timer soll alle 20ms (oder wie viel auch immer) einen Interrupt auslösen.
In der ISR fragst du als erstes ab, ob Pin2 gesetzt ist. Wenn das der Fall ist, setzt du die PWM auf ihr Maximum. Ansonsten fragst du ab, ob Pin1 gesetzt ist. Ist das der Fall, erhöhst du eine Variable und liest damit einen Wert in einer Fading-Tabelle aus und setzt ihn in die PWM.
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Mo, 10.01.11, 12:09

könnte mir jemand bei der realisierung helfen
Ja. An was für einen Chip hast Du gedacht? Ich würde einen kleinen AVR vorschlagen (ATTiny13/25/45).
Bei PIC kann ich nicht weiterhelfen.
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Mo, 10.01.11, 17:17

was ist den pic?
Welcher chip dafür am bessten is kann ich nicht sagen. Da habt ihr wohl wesentlich mehr ahnung. Ich möchte damit nur ein bisschen basteln.
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Di, 11.01.11, 18:08

Dann such Dich mal durch die AVR Einführungsliteratur hier im Forum.
Z.B. das hier: viewtopic.php?f=35&t=5911&start=0
Benutzeravatar
NeoExacun
Mega-User
Mega-User
Beiträge: 132
Registriert: Mi, 26.05.10, 14:35

Di, 11.01.11, 18:35

Ich kann dir diesen Kurs sehr empfehlen: http://www.halvar.at/elektronik/kleiner ... _avr_kurs/
stromflo
Mega-User
Mega-User
Beiträge: 304
Registriert: Mi, 31.12.08, 12:16

Di, 11.01.11, 20:11

Hi,

da gibts noch einiges mehr an guten Links:
Ist natürlich auch die Frage welcher Programmiersprache man sich hingibt... :)

Roboternetz - Bascom
bunbury - Bascom
Mikrocontroller net - C
Roboternetz - C

Neue Atxmega Reihe - Anspruchsvoll da neue Möglichkeiten wie DMA etc. Für Anfänger nicht unbedingt geeignet.
Keine DIP Gehäuse nur SMD! Trotzdem informativ mal der Link.
stromflo Wiki - C

So das war mal das was mir so sporadisch einfiel.

Gruß Flo
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Mi, 14.09.11, 19:17

Guten Abend,
Auch wenn das thread schon ein bisschen älter ist hab ich noch eine frage. Ich würde gerne in die Schaltung oben noch einen lichtsensor einbauen, sodass wenn es dämmert die Schaltung von alleine angeht und eben auch wieder von alleine aus.

Was eignet sich hierfür am besten? Ein LDR ?
Wie muss er mit abgeschlossen werden?
Vielen dank für eure Hilfe
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Mi, 14.09.11, 21:01

in die Schaltung oben
Welche genau?
MartinSch
User
User
Beiträge: 38
Registriert: Di, 20.10.09, 13:05

Do, 15.09.11, 08:48

ich hatte damals die Schaltung von dir am am Do, 28.10.10, 10:54 nachgebaut.
dort würde ich auch gerne den lichtsensor einbauen
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 15.09.11, 12:47

Probier es mal so:
LED_Fader_LM358_3.png
Sollte funktionieren, aber 100% versprechen kann ich es nicht. Die Einschaltschwelle ist in einem recht großen Bereich einstellbar, aber ob dieser Bereich 'günstig' liegt, kann ich nicht vorher sagen.
Optimierungsmöglichkeiten:
Wenn man zwischen +9V und den Fototransistor noch einen Festwiderstand schaltet (ca. 10-100k), und dann den unteren Widerstand (2.2k) anpasst, lässt sich der Ruhestrom (also der Strom den die Schaltung verbraucht während es hell ist, sprich die LEDs nicht leuchten) noch massiv senken. Aber da ist ein wenig experimentieren angesagt.
wondalfo
Mini-User
Beiträge: 7
Registriert: Do, 05.01.12, 22:39

Do, 05.01.12, 23:01

Hallo zusammen, insbesondere Borax,

ich habe Boraxs Schaltung mit dem LM358 hier aufgebaut. Habe aber statt des dortigen Transistors einen 2N2222A. Ich betreibe die Schaltung mit 4 AA Akkus also 4.8-5.X V Die Schaltung funktioniert auch, allerdings habe ich ein paar Probleme und hoffe hier auf Lösung.

Zwischen dem Emitter und Minus messe ich maximal 2,6V, kann man ganz gut messen, wenn man den Kondensator rausmacht, dann sind die LEDs immer an. Das reicht nicht um 2 LEDs in Reihe zu betreiben. Daher erstmal die Frage ist das normal ? In meinem naiven Verständnis eines Transistors hatte ich erwartet, dass er die Eingangsspannung durchschaltet.

Zum anderen brauch ich mehr Licht. Ich habe also 4 rote LEDs mit 20mA und 2 rote mit 50mA. Beide Typen haben diese Ströme bei der gleichen Spannung. Nun habe ich diese LEDs erstmal parallel geschalten. Ich hatte zuerst eine der kleinen drin und einen Vorwiderstand von 30Ohm, das machte dann schöne 20mA. Jetzt hätte ich erwartet, dass mit jeder weiteren LED parallel der Strom entsprechend ansteigt, das war aber nicht der Fall. Der Strom stieg zwar, aber viel geringer. Am Ende flossen durch alle LEDs ca. 40mA. Also habe ich den Vorwiderstand rausgenommen und ohne fließen 106mA, eigentlich immer noch zu wenig, aber egal. Aber nun funktioniert das Fading nicht mehr, egal ob mit oder ohne Kondensator die LEDs sind immer an. Also habe ich rumprobiert und herausbekommen, dass es wieder geht wenn ich einen Vorwiderstand von 17,7 (15+2,7)Ohm davor mache. Natuerlich entsprechend geringere Ströme. Allerdings habe ich das bei einer mittleren Stellung des 100k Potis probiert. Drehe ich den Poti jetzt weiter auf, also in Richtung langsamer, gibt es plötzlich einen Punkt an dem die LEDs wieder konstant an sind. Das ist ätzend.
Was muss ich machen um die LEDs bei maximaler Helligkeit laufen zu lassen, also mit insgesamt 180mA, bzw. immer zwei in Reihe und dann nur noch 90mA ?

Noch eine Frage, was muss ich an der Schaltung ändern, wenn ich noch geringere Frequenzen haben möchte, also das ganze noch langsamer ? Noch einen Widerstand zu dem 100k Poti in Reihe ?

Vielen Dank Wolfgang
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 06.01.12, 14:42

Hallo Wolfgang,
welcome on board!

Die Schaltung ist ein 'Sensibelchen'... In der Simulation wollte sie mit 5V gar nicht.
Zwischen dem Emitter und Minus messe ich maximal 2,6V, kann man ganz gut messen, wenn man den Kondensator rausmacht, dann sind die LEDs immer an. Das reicht nicht um 2 LEDs in Reihe zu betreiben. Daher erstmal die Frage ist das normal ?
Ja. Mehr oder minder normal. Die Schaltung ist ein Emitterfolger, kein Schalter.
Für 2 LEDs in Serie bei 5V Betriebsspannung wird es daher sicher nicht reichen.
Ein paar Sachen zum testen (die Schaltung benimmt sich in der Sim nicht sauber genug um definitive Aussagen zu machen):
R3 auf 47K und R4 auf 27k reduzieren, R2 ganz leicht vergrößern (nur ein paar KOhm - bei zu großem Wert 'steht' die Schaltung wieder - aber ansonsten liefert sie dann mehr Strom). Für noch geringere Frequenzen am besten den Kondensator vergrößern (z.B. 47µF).
Viel Erfolg!
wondalfo
Mini-User
Beiträge: 7
Registriert: Do, 05.01.12, 22:39

Fr, 06.01.12, 21:56

Hallo Borax,

ich habe ausprobiert, was Du geschrieben hast, aber da wollte nichts mehr blinken. Jetzt habe ich statt des einfachen Transistors zwei in Darlington Schaltung und jetzt kriege ich blinkenderweise immerhin 70mA durch. Das ist schon was. Als ich in gleicherweise noch einen dritten Transistor dahinter schalten wollte, waren es aber nur noch 4mA. Morgen kaufe ich einen pnp Transistor und probiere mal noch die Sziklai Schaltung.

Trotzdem vielen Dank für Deine Hilfe.
Wolfgang
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 06.01.12, 22:08

Ansonsten suchen wir eine stabilere Schaltung. Ich habe mir diese Schaltung nicht ausgedacht... Nur von einem 4 fach OP auf einen 2 fach OP umgemünzt. Es gibt da bestimmt stabiler laufende Möglichkeiten... Aber wenn Du es so hin kriegst, auch gut!
wondalfo
Mini-User
Beiträge: 7
Registriert: Do, 05.01.12, 22:39

Fr, 06.01.12, 23:52

Hab jetzt gerade mal ein bissel rumgestöbert und hab gelesen, dasssich sowas evtl. auch per PWM mittels NE555 realisieren lässt. Hast Du da eine Idee ? Wichtig ist aber, dss sich die Frequenz verändern lässt und die LEDs langsam an und wieder ausgehen.
stromflo
Mega-User
Mega-User
Beiträge: 304
Registriert: Mi, 31.12.08, 12:16

Sa, 07.01.12, 09:23

Guten Morgen,

da immer wieder mal die Frage nach einem LED-Fader hier kommt, möchte ich mal eine kleine Schaltung dazu vorstellen.
Das Projekt besteht schon ein wenig länger, hatte es im Netz auch schon mal vorgestellt....

Das Modul ist so konzipiert, dass zwei Ausgänge seperat dimmbar sind und bis zu 3 Blinkeffekte abgerufen werden können.

Der Schaltplan ist recht übersichtlich, im wesentlichen ist das Herzstück der Attiny13. Dieser wurde jedoch im Laufe des Projekts durch Attiny25 ersetzt, da ich für diesen bessere Beschaffungsquellen hatte und zu dem mehr Flash Speicher zur Verfügung steht.
Der Dimmer hat einen 5V Spannungsregler und kann mit 12V versorgt werden. An den Ausgängen steht die eingespeiste Spannung an.

Bild

Zum Schaltplan gehört natürlich, dann auch ein Layout :)

Bild

Teileliste:
X1,2,3 Printstecker 3 polig
X4 Pin1 Versorgungsspannung 12V
X4 Pin2 Versorgungsspannung GND
X5 Pin1 + Anschluss der Last (12V)
X5 Pin2 - Anschluss der Last
X6 Pin1 + Anschluss der Last (12V)
X6 Pin2 - Anschluss der Last
Fuse Kleinsicherung Je nach Last!
C1 Folienkondensator 330nF
C2 Folienkondensator 100nF
C3 Folienkondensator 100nF
IC1 Attiny25 mit Dimmsoftware
IC2 Spannungsregler 7805
T1 IRLZ34N
T2 IRLZ34N
R1 240 Ohm
R2 16K Ohm
R3 240 Ohm
R4 16K Ohm

Die Taster müssen an X1-2,X1-3 (Effekt) an X2-2,X2-3 Dimmer(1) und an X3-1,X3-3 Dimmer(2).

X1 u. X2 ist so vorbereitet, dass auch die Steuerung über Potis möglich ist.
Allerdings haben wir dazu keine Firmware gemacht.

Auf eine ISP Schnittstelle wurde hier verzichtet.

Schreiten wir zum nächsten Schritt, ein Foto von der bestückten Platine:

Bild

Anschließend habe ich die Platine in ein Gehäuse integriert

Bild

Aber was macht eine Platine ohne Software? Natürlich gar nix!
Deshalb ist in dem angehängten Ordner neben Schaltplan und Layout auch das Hexfile zu finden.

Bedienungsanleitung
Effektauswahl:
Über den Taster Effektauswahl kann zwischen 4 Effekten gewählt werden:
1.Dimmermodus
2.Blinker
3.Wechselblinker
4.Fader

Bei einem weiteren Tastendruck bei Effekt 4 wird wieder Effekt 1 aufgerufen.

Effekt Dimmermodus:
Im Effekt Dimmermodus kann über Dimmer1 und Dimmer2 die Helligkeit der beiden Ausgänge durch Tastendruck einzeln verstellt werden.

Effekt 2-4:
Bei diesen Effekten kann mit Taster Dimmer1 die Geschwindigkeit des Effekts und mit Dimmer2 die Helligkeit der LED Beleuchtung gesteuert werden.

Hier noch ein Link wie die Software übertragen werden kann.

Vielleicht ist diese Schaltung ja für den ein oder andern von euch von Nutzen :)

Natürlich erfolgt der Nachbau wie immer auf eigene Gefahr :)

Code: Alles auswählen

/*
 * main.c
 *
 *  Created on: 20.10.2009
 *  Version:	0.1.0
 *  Author: 	tecdroid
 */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <math.h>

#define INTERRUPTING

/***************************** /
 * Zeiten für die Wellenform
 ****************************/
#define DIFS 100
#define SEC1 28
#define SEC2 SEC1 + DIFS
#define SEC3 SEC1 + SEC2

/***************************** /
 * Konfiguration der Pins
 ****************************/
// PB2 ist die Taste
#define PB_TASTE1	PB2
#define PINB_TASTE1 	PINB2
// ADC2 - ist immer die Dimmung
#define PB_TASTE2	PB3
#define PINB_TASTE2   	PINB3
// ADC3 - ist Dimmung oder Frequenz
#define PB_TASTE3	PB4
#define PINB_TASTE3		PINB4

#define VAL(x) ( (uint16_t)x * (uint16_t)valLeft / DIFS)

/***************************** /
 * Konfiguration des Blinkers
 ****************************/
// der auszuführende effekt
enum {
	DIMMER = 0,
	BLINKER = 1,
	WECHSELBLINKER = 2,
	FADER = 3,
	WECHSELFADER = 4,
	count = 5
} effekt;

// die ADC-Werte
uint8_t valLeft;
uint8_t valRight;

uint8_t timer;
uint16_t timer2;


/***************************** /
 * Funktionen
 ****************************/
void init_taste(void) {
	/* Die Tastenpins als Input konfigurieren und
	 * PULLUPs aktivieren
	 */
	DDRB &= ~((1 << PB_TASTE1) | (1 << PB_TASTE2) | (1 << PB_TASTE3));
	PORTB |= (1 << PB_TASTE1 | (1 << PB_TASTE2) | (1 << PB_TASTE3));
}

/* Entprellter Tastendruck
 */
uint8_t tasteGedrueckt(uint8_t pTaste) {
	/* Wenn Pin B0 low ist, wurde der Taster gedrückt
	 */
	uint8_t input = ~PINB;
	if (input & pTaste) {
		_delay_ms(50);
		/* warte bis losgelassen wurde
		 */
		while (~PINB & pTaste) {
			_delay_ms(50);
		}
		/* warte um das Loslassen zu entprellen
		 */
		_delay_ms(50);
		/* melde den Tastendruck
		 */
		return (input & pTaste);
	}
	/* wurde die Taste nicht gedrückt
	 * melde negatives Ergebnis
	 */
	return 0;
}

/*
 * initialisiert die PWM
 */
void init_pwm() {
	/* OCR0A&B als Ausgang konfigurieren. */
	DDRB |= (1 << PB0) | (1 << PB1);
	/* OCR0A&B als invertierender Ausgang der PWM konfigurieren */
	TCCR0A |= (1 << COM0A1) | (1 << COM0B1);
	/* FastPWM konfigurieren */
	TCCR0A |= (1 << WGM00);
	/* Vorteiler auf 8, 4KHz *
	TCCR0B = (1 << CS01);
	*/
	/* Vorteiler auf 64, 0.5KHz */
	TCCR0B = (1 << CS01) << (1 << CS00);

	/* Timer-Interrupt deaktivieren */
	TIMSK &= ~((1 << OCIE0A) | (1 << OCIE0B));
}

/*
 * initialisiere den Timer 1
 */
void init_timer() {
	/* Vorteiler auf 8 */
	TCCR1 = (1 << CS12);

	/* Timer Overflow interrupt aktivieren */
	TIMSK |= (1 << TOIE1);
}

/*
 * setzen der linken LED
 */
inline void set_left_value(uint8_t val) {
	OCR0A = val;
}

/*
 * setzen der rechten LED
 */
inline void set_right_value(uint8_t val) {
	OCR0B = val;
}

inline void calc_value() {
	// erhöhe den timer
	if (effekt == DIMMER) {
		timer2 = 0;
		timer  = 0;
	} else {
		timer2 += valRight + 1;
		timer = (timer2 >> 8);
	}

	// führe die zum aktuellen Effekt gehörende Funktion aus
	switch (effekt) {
	case BLINKER:
		if ((timer < 0x80)) {
			set_left_value(valLeft);
			set_right_value(valLeft);
		} else {
			set_left_value(0);
			set_right_value(0);
		}
		break;
	case WECHSELBLINKER:
		if ((timer < 0x80)) {
			set_left_value(valLeft);
			set_right_value(0);
		} else {
			set_left_value(0);
			set_right_value(valLeft);
		}
		break;
	case FADER:
		if (timer < SEC1) {
 			// nullstellung
			set_left_value(0);
			set_right_value(0);
		} else if(timer < SEC2) {
			// steigende Flanke
			set_left_value(VAL(timer - SEC1));
			set_right_value(VAL(timer - SEC1));
		} else if (timer < SEC3) {
			// maximalwert
			set_left_value(VAL(DIFS - 1));
			set_right_value(VAL(DIFS - 1));
		} else {
			// fallende Flanke
			set_left_value(valLeft - VAL(timer - SEC3));
			set_right_value(valLeft - VAL(timer - SEC3));
		}
		break;
	case WECHSELFADER:
		if (timer < SEC1) {
			// nullstellung
			set_left_value(0);
			set_right_value(VAL(DIFS -1));
		} else if(timer < SEC2) {
			// steigende Flanke
			set_left_value(VAL(timer - SEC1));
			set_right_value(valLeft - VAL(timer - SEC1));
		} else if (timer < SEC3) {
			// maximalwert
			set_left_value(VAL(DIFS -1));
			set_right_value(0);
		} else {
			// fallende Flanke
			set_left_value(valLeft - VAL(timer - SEC3));
			set_right_value(VAL(timer - SEC3));
		}
		break;
	default:
		set_left_value(valLeft);
		set_right_value(valRight);
		break;
	}
}
/*
 * Timerfunktion
 */
ISR(TIMER1_OVF_vect)
{
	calc_value();
}

/***************************** /
 * Hauptprogramm
 ****************************/
int main() {
	// initialisiere Maschine
	init_pwm();
	init_taste();

	// initialisiere Werte
	effekt = DIMMER;
	valLeft = 0x1;
	valRight = 0x1;

	// aktiviere Interrupts
#ifdef INTERRUPTING
	init_timer();
	sei();
#endif

	// starte Ablauf
	while (1) {
		// bei Tastendruck ändert sich der Effekt
		if (tasteGedrueckt(1 << PINB_TASTE1)) {
			effekt++;
			if (effekt == WECHSELFADER) {
				effekt = DIMMER;
			}
		}

		// bei Tastendruck ändert sich der Effekt
		if (tasteGedrueckt(1 << PINB_TASTE2)) {
			if (valLeft == 0xff) {
				valLeft = 0x00;
			} else {
				valLeft = (valLeft << 1) + 1;
			}
		}

		// bei Tastendruck ändert sich der Effekt
		if (tasteGedrueckt(1 << PINB_TASTE3)) {
			if (valRight == 0xff) {
				valRight = 0x00;
			} else {
				valRight = (valRight << 1) + 1;
			}
		}

#ifndef INTERRUPTING
		calc_value();
		// warte
		_delay_ms(1);
#endif

Gruß Flo
Dateianhänge
download.zip
(24.33 KiB) 362-mal heruntergeladen
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Sa, 07.01.12, 23:25

und hab gelesen, dasssich sowas evtl. auch per PWM mittels NE555 realisieren lässt. Hast Du da eine Idee ?
Ja, so was schwebt mir auch vor. Kommen aber wohl erst nächste Woche dazu, mich da näher einzudenken.
@stromflo
Sehr hübsch! Aber ich glaube den meisten (Wolfgang, Mr_Dooley...) geht es um eine Lösung ohne µC. Mit µC ist es geradezu trivial (das soll aber nicht Deine Leistung schmälern).
Antworten