Hallo ich hab mal die idee gehabt verschiedene LEDS gleichzeitig aufzuhellen und wieder zu dimmen nach einem bestimmten Interrupt sagen wir mal alle 10sekunden. Hab mich auch einwenig auf dem GCC-Tutorial durchgelesen aber den entscheidenen Hinweis wie ich das umsetzen kann hab ich leider nicht gefunden. :( Ich möchte dass die Led nach einem bestimmt interrupt langsam aufhellt und beim zweiten interrupt langsam dunekel wird. Ich habs nur geschafft eine led in einem bestimmten intervall an und auszublinken mit dem Timer:(
Wenns mehrere LED sind, und du die auch hardwaremässig nicht so verschaltet kannst, dass du sie alle miteinander von einem einzigen PWM-Output Pin dimmen kannst (und du auch nicht genug PWM-Kanäle für alle LED einzeln hast), dann wird es wohl auf eine Software-PWM rauslaufen. Also vergiss die Hardware-PWM und bau selber eine in Software auf. Den Timer kannst du dann auch gleich für die Eindimm und Aufdimm Zeitsteuerung benutzen. Skizze
1 | volatile uint8_t helligkeit; |
2 | |
3 | ISR( Timer Overflow ISR ) |
4 | { |
5 | static uint8_t pwmCount; |
6 | static uint8_t helligkeitJetzt; |
7 | |
8 | pwmCount++; |
9 | if( pwmCount == Anzahl Helligkeitsstufen ) |
10 | pwmCount = 0; |
11 | |
12 | if( pwmCount < helligkeitJetzt) |
13 | schalte alle LED ein |
14 | else |
15 | schalte alle LED aus |
16 | |
17 | if( helligkeitJetzt < helligkeit ) |
18 | helligkeitJetzt++; |
19 | else if( helligkeitJetzt > helligkeit ) |
20 | helligkeitJetzt--; |
21 | } |
22 | |
23 | int main() |
24 | { |
25 | ... timer konfigurieren |
26 | ... Overflow Interrupt freigeben |
27 | |
28 | helligkeit = 0; |
29 | |
30 | sei(); |
31 | |
32 | while( 1 ) |
33 | { |
34 | |
35 | if( irgendwas ) |
36 | helligkeit = 28; |
37 | |
38 | if( irgendwas anderes ) |
39 | helligkeit = 12; |
40 | |
41 | .... |
42 | } |
43 | } |
Um die LED auf einen bestimmten Wert zu dimmen, schreibst du den Wert einfach in die Variable 'helligkeit'. Der letzte Teil in der Overflow-ISR führt dann die tatsächlich gerade zu realisierende Helligkeit diesem Wert langsam nach, so dass sich ein aufdimmen, abdimmen bzw. umdimmen zwischen verschiedenen Helligkeitsstufen ergibt. Wie schnell das geht, hängt davon ab, wie du den Timer einstellst und wie oft daher die Overflow-ISR pro Sekunde aufgerufen wird. Sollte das zu schnell sein, dann kann man diesen Nachführteil auch nur bei jedem 2.ten ISR aufruf oder noch seltener machen.
was ich gerne möchte ist dass die lampe aufdimmt und wieder abdimmt und dass in regelmässigen abständen ohne i-was einzustellen. Moementan macht es nur dass es kurzzeitig aufdimmt und dann die ganze zeti hell bleibt aber nicht wieder abdimmt. Hier mein quellcode schonmal hoffe ihr könnt mir weiter helfen:(
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.