Software PWM mit Atmega8 funktioniert nicht

Gast #1273623
Lesenswert?

Hallo, ich hab vor 3 Tagen das erste mal einen AVR programmiert, ist 
also alles noch neugebiet für mich. Ich programmiere übrigens in C mit 
AVRstudio 4.12 und USBprog als AVRISP mkII klon.

Jetzt habe ich versucht eine Software PWM zu programmieren für die LED 
die an PORTB angeschlossen ist. Ziel ist das das Tastverhältnis am 
anfang 1 ist und dann langsam bis 0 "fadet" und dann wieder auf 1 
resettet wird.
Ich benutze den internen RC oscillator.

Problem: Die LED flackert seeehr schwach mit (GROB geschätzt) ~2Hz, wenn 
i<0 ist leuchtet sie für ein paar Zehntel einer Sekunde auf voller 
Leuchtstärke, und flackert dann wieder wie vorhin beschrieben.
Die LED soll aber langsam Faden.

Code ist im Anhang, schonmal vielen dank im voraus :)
Angehängte Dateien:
#1274002
Lesenswert?

So wird das auch nichts.
Deine Variable i ist in ein paar Zehntel-Millisekunden von 100 auf 0 
runtergezählt. Kein Wunder das das flackert.
Du musst die 'PWM' schon eine gewisse Zeit lang laufen lassen, damit du 
überhaupt mal was siehst und erst dann die Stufe um 1 runterschalten.

PS: Alle delay Funktionen, die mit dem AVR-gcc kommen, sind darauf 
ausgelegt, dass sie ein konstantes Argument bekommen. Ansonsten stimmen 
die Zeiten hinten und vorne nicht.
#1274010
Lesenswert?

greg2k schrieb:
> Ich mache Soft-PWM mit Timer immer. Sehe Beispiel im Anhang.
>
> Mit "pwm"-Variable kannst Du die Leuchtstärke einstellen;

Lass das SREG in einer ISR in Ruhe!
Die Prozessorregister gehören in C dem Compiler. Wenn du dich daran zu 
schaffen machst, machst du es meistens nur schlimmer, nie besser. Dein 
Compiler weiß schon, was in einer ISR zu tun ist. Überlass es ihm, sich 
um solche Feinheiten zu kümmern.

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