Forum: Mikrocontroller und Digitale Elektronik LED per PWM Ansteuern


von G0_H4rd (Gast)


Lesenswert?

Hey leute,

ich hab an meinen AT90CAN128-Mikrocontroller eine LED mittels Transistor 
angeschlossen.
Um zu testen ob die LED funktioniert, hab ich über den Programmiercode 
zunächst die Ports auf High gesetzt:

while(1)
{
  DDRB= 0xFF;
  PORTB |= (1<<5);
}

Ich wollte nun einmal die LED in verschiedenen Helligkeitsstufen dimmen 
und hätte dies gerne mit dem PWM Signal gemacht. In einem älteren 
Testcode habe ich eine PWM für die Ansteuerung eines Servomotors 
realisert. Mein AT90CAN wird über einen externen Quartz mit 16 MHz 
betrieben, der Programmiercode sieht folgendermaßen aus


  void SERVOPWM (void)
  {
    DDRB  |= 0xFF;
    TCCR1A |= 1<<WGM11 | 1<<COM1A1 | 1<<COM0A0 ;
    TCCR1B |= 1<<WGM12 | 1<<WGM13 | 0<<CS10 | 1<<CS11;
    ICR1 = 39999;

    OCR1A = ICR1 - 35200;
  }

Ich habe nun versucht den Code für meine LED-Ansteuerung zu verwenden, 
leider ohne Erfolg. Was muss ich hier beachten bzw. noch einstellen um 
verschiedene Helligkeitsstufen zu erreichen ?

von Karl H. (kbuchegg)


Lesenswert?

G0_H4rd schrieb:
> Hey leute,
>
> ich hab an meinen AT90CAN128-Mikrocontroller eine LED mittels Transistor
> angeschlossen.

wie, genau, hast du das gemacht?

> Um zu testen ob die LED funktioniert, hab ich über den Programmiercode
> zunächst die Ports auf High gesetzt:

Mach mal den Gegentest, setz den Pin auf Low und sieh nach, ob die LED 
dann auch ausgeht. Eventuell könnte man auch mit einm langsamen Blinken 
testen, ob die Ansteuerung funktionert.

>   void SERVOPWM (void)
>   {
>     DDRB  |= 0xFF;
>     TCCR1A |= 1<<WGM11 | 1<<COM1A1 | 1<<COM0A0 ;
>     TCCR1B |= 1<<WGM12 | 1<<WGM13 | 0<<CS10 | 1<<CS11;
>     ICR1 = 39999;
>
>     OCR1A = ICR1 - 35200;
>   }
>
> Ich habe nun versucht den Code für meine LED-Ansteuerung zu verwenden,
> leider ohne Erfolg. Was muss ich hier beachten bzw. noch einstellen um
> verschiedene Helligkeitsstufen zu erreichen ?

Wenn du die Funktion auch noch aufrufst, dann müsste das funktionieren.
Dein OCR1A Wert ist allerdings in der Form, dass die LED sehr hell ist. 
Bei hellen LED kann man aber als Mensch die einzelnen Stufen kaum noch 
unterscheiden. Setz halt OCR1A mal auf 'halbe' Helligkeit. Das müsste 
deutlich zu sehen sein
1
    OCR1A = 20000;

von Christian (Gast)


Lesenswert?

An welchen Pin hast du die LED angeschlossen?

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.