Atmega8 Soft PWM Verständnis

Gast #1912742
Lesenswert?

Alsooo,

ich käse hier schon seit einigen Tagen mit dieser/m Soft PWM rum.

ich möchte eine LED dimmen.
Nach dem Lesen von unzähligen Forumsbeiträgen, tutorials, und sonstigen 
Homepages weiß ich inzwischen, dass ich einen Timer brauche.

Also habe ich den Timer1 so eingerichtet, dass er einmal die LED 
einschaltet, wenn der Timer auslöst und beim zweiten mal die LED wieder 
ausschaltet und dann wieder einschaltet und wieder ausschaltet...

Nun habe ich gehofft, dass wenn ich den Wert von OCR1A änder, dass die 
LED dadurch gedimmt wird. Tut sie aber nicht. Sie beginnt nur zu 
flackern.
Was ja im Grunde auch logisch ist, da der Timer ja nichts anderes 
veranlasst.

Also wie bekomme ich es nun hin, dass meine LED gedimmt wird???

Das Hardwarebasierte PWM hab ich hinbekommen. Das läuft auch.
Gast #1912768
Lesenswert?

Also falls du darauf hinaus willst, dass ich kein Code gepostet habe... 
sry
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
int t=1;
4

5
ISR(TIMER1_COMPA_vect)
6
{
7
  t++;
8
  if (t==3)
9
    {
10
    t=1;
11
    }
12

13
  if (t==1)
14
    {
15
    PORTC = 0x00; //LED an;
16
    }
17
  else if (t==2)
18
    {
19
    PORTC = 0xff; //LED aus;
20
    }
21
  
22
  TCNT1 = 0; //Zähler nullen
23

24

25
}
26

27

28
int main(void)
29
{
30
   DDRC = 0xff;
31
   PORTC = 0xff;
32
   
33
   TCCR1A = 0x00;
34
   TCCR1B = 1;      
35
   OCR1A = 18000;      
36
   TIMSK = (1<<OCIE1A);   
37
   sei(); 
38

39

40
while(1); 
41
return 0; 
42
}
Gast #1912792
Lesenswert?

Wie ist denn F_CPU eingestellt?
Wenn das ein frischer chip ist, läuft der wahrscheinlich auf 1 mhz statt 
den 8mhz die in dem Soft-PWM Beispielen verwendet werden.
Den Unterschied zwischen 100Hz und 12.5 Hz könnte man schon als flackern 
wahrnehmen.
Gast #1912799
Lesenswert?

Anhängend findet ihr ein Bild. Ich kenne mich mit den Einstellungen 
nicht aus (bin newbie) desshalb will ich da nicht einfach rumprobieren.

Und für F_CPU steht ja in dem Beispielcode oben drin "#define F_CPU 
8000000L"
Angehängte Dateien:
Gast #1912824
Lesenswert?

Hab ich das denn richtig verstanden, dass das Dimmen dadurch geschieht, 
dass ich durch den Timer die ein und ausschaltzeiten veränder?

und die Veränderung wird doch durch den OCR1A wert gemacht oder?
#1912832
Lesenswert?

@  Der Lars (Gast)

>Hab ich das denn richtig verstanden, dass das Dimmen dadurch geschieht,
>dass ich durch den Timer die ein und ausschaltzeiten veränder?

Ja.

>und die Veränderung wird doch durch den OCR1A wert gemacht oder?

Kommt drauf an. Im 1. und 2. Beispiel NEIN, dort läuft der Timer mit 
konstanter Frequenz. Im 3. Beispiel ja, dort wird es komplexer. Aber 
OCR1A wird dort nicht direkt manipuliert, als Nutzer der PWM ruft man 
nur PWM_update auf.

MFG
Falk
#1912845
Lesenswert?

@  Der Lars (Gast)

>Kannst du mir nun auch noch den entscheidenen Hinweis liefern, wie ich
>das erste Beispiel verändern müsste, um meine LED zu dimmen???

Gar nicht. Das läuft so. Gedimmt werden die Pins an PORTD, die einzenln 
PWM-Werte müssen in das Array pwm_setting geschrieben werden. Das ist 
alles.
OCR1A fasst man dazu nicht an.

MFG
Falk
Gast #1912876
Lesenswert?

Naja, nich ganz.

Das Dimmen wird durch die Veränderung des Verhältnisses von ein zu 
Auszeit gemacht. Wenn du die HW PWM nutzt, dann machst du das über 
OCR1A. Der Timer läuft immer von 0-65535 und toggelt bei deinem OCR1A 
wert den Zustand.

Wenn du die HW PWM nutzt, dann läuft der Timer 122 mal von 0 - 65535. 
Bei 18000 im OCR1A sind das rund 30% in der die LED an ist und 70% aus.

Dein Interrupt wird bei 8Mhz/18000 rund 440 mal in der Sekunde 
aufgerufen.

In der Hälfte der 440 Interrupts ist die LED an und in der Anderen aus.

Normalerweise sollte die LED nur "halb" so hell Leuchten. Selbst wenn 
der Mega nur mit 1Mhz läuft, sollte man da nichts blinken sehen. Wie 
schnell blinkt es denn?

Wenn du damit dimmen willst, brauchst du mehr t Zustände
T=10  t1-3 LED an, 4-10 LED aus -> "40" Helligkeit.

Idealerweise wird im Interrupt nur t hochgezählt. Deine Vergleiche 
schreibst du in deine While Schleife der Main.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren