Forum: Mikrocontroller und Digitale Elektronik LED Fading parallel zum eigentlichen Programm


von Robert (Gast)


Lesenswert?

Guten Tag,

ich Versuche mich gerade an einem Mikrocontroller Projekt.
Ich möchte jetzt gerne noch LED's per PWM dimmen und das in einem 
bestimmten Zeitbereich.
Dazu muss ich dann auch die Timer/PWM in Abhängigkeit der Uhrzeit 
starten.
Wie bekomme ich die Uhrzeit auf meinen Mikrocontroller? Kann ich das 
Softwaretechnisch realisieren oder brauche ich da erstmal einen 
Timer-Baustein wie z.B. NE555?

LED soll z.B. morgens innerhalb einer halben Stunde von AUS bis voll AN 
dimmen. Das ganze soll natürlich parallel zum eigentlichen Programm 
laufen.
Wie kann ich sowas realisieren? Ich habe die PWM im Moment über eine 
For-Schleife laufen mit der ich die Werte eines Arrays ins OCRA1 
Register schreiben lasse um so die LED zu dimmen.
Während die Schleife abgearbeitet wird, passiert natürlich nichts im 
Rest des Programs. Hier sollen aber weiterhin ADC Werte erfasst werden.

Ich hoffe Ihr könnt mir ein paar Tipps geben.
Vielen Dank!

von Jochen S. (jochen_s)


Lesenswert?

Hallo Robert,

Du solltest die so Sachen wie State Machine oder Task handler anschauen.
Was Du vor hast, lässt sich am einfachsten durch eine feste Zeitbasis 
bsp. 1 Sekunde erledigen. Alle Sekunde kommt ein Flag von einem Timer, 
dies kannst Du nutzen um deine Zeit weiter zu zählen. Gleichzeitig 
kannst du immer anhand des Flags prüfen ob deine PWM für die LED 
geändert werden muss. Wichtig ist, dass dein Flag die kürzeste im System 
vorkommende Zeit darstellen können muss. Falls du Änderungen im 100ms 
Takt machen möchtest muss das Deine Zeitbasis abbilden können. Ist ein 
Trade-off zwischen zeitlicher Auflösung und Variablengöße die gezählt 
werden muss, man kann z.b. bei 100ms Timer Interrupt 10 mal zählen um 
dann ein Sekundenflag zu erlangen dies mal 60 gibt eine Minute usw....

Richtig gut wird das aber nur, wenn ein stabiler Referenztakt anliegt 
(Quarz) und wenn die Ausführungsdauer der Interruptroutine für das Flag 
konstant ist (Atomar ausgeführt / andere Interrupts sperren).

Gruß
Jochen

von Falk B. (falk)


Lesenswert?

@Robert (Gast)

>Wie bekomme ich die Uhrzeit auf meinen Mikrocontroller?

Über einen Timer oder eine RTC.

>Softwaretechnisch realisieren

Ja.

> oder brauche ich da erstmal einen
>Timer-Baustein wie z.B. NE555?

NEIN! Das ist bei einem Mikrocotnroller vollkommener Käse. Der hat doch 
schon einen Takt!

>Wie kann ich sowas realisieren?

Siehe Multitasking.

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.