Forum: Mikrocontroller und Digitale Elektronik ATtiny45 Peaks in PWM


von Günter M. (redround)


Lesenswert?

Hallo,

ich bastle gerade an einer kleinen PWM-Anwendung mit dem ATtiny45. 
Controller läuft mit internem Takt.

Minimal-Programm:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
    TCCR0A |= (1<<WGM00)|(1<<WGM01); // Fast PWM
6
    TCCR0B |= (1<<CS00); // ohne Prescaler
7
    DDRB |= (1<<PB0); // PB0 als Ausgabe-Pin
8
    TCCR0A |= (1<<COM0A1);  // PWM aktivieren
9
  
10
    while (1) {
11
        OCR0A = 0; // 0 als PWM-Wert ausgeben  
12
    }  
13
}

Wenn ich das so mache, bekomme ich leider keine saubere 0-Line, sondern 
alle rund 250us einen Peak von 1us. Was mache ich falsch?

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Günter M. schrieb:
> Was mache ich falsch?

Datenblatt nicht gelesen.

"If the OCR0A is set equal to BOTTOM, the output will be a narrow spike 
for each MAX+1 timer clock cycle."

von Thomas E. (thomase)


Lesenswert?

Günter M. schrieb:
> Was mache ich falsch?

Nichts.

Eine Möglichkeit dem Abhilfe zu schaffen, ist den Phase Correct Mode zu 
benutzen.
Die zweite ist, den Timer bei OCR = 0, von Clear on Match auf Set on 
Match umzuschalten und den OCR auf 255 zu setzen. Wenn du das sauber 
programmierst erhält deine PWM dann 257 statt 256 Werte.

: Bearbeitet durch User
von Günter M. (redround)


Lesenswert?

super Thomas ... das krieg ich damit jetzt hin :-)

von spess53 (Gast)


Lesenswert?

Hi

>Eine Möglichkeit dem Abhilfe zu schaffen, ist den Phase Correct Mode zu
>benutzen.

Mit 'inverting mode' bekommst du den Peak auch weg.

MfG Spess

von Thomas E. (thomase)


Lesenswert?

spess53 schrieb:
> Mit 'inverting mode' bekommst du den Peak auch weg.

Damit verschiebt man nur das Problem auf einen "0-Peak" bei 255.

von Peter D. (peda)


Lesenswert?

Man kann doch ganz einfach beim Wert 0 den Pin von der PWM abschalten 
und auf 0 setzen.

von Carl D. (jcw2)


Lesenswert?

Peter D. schrieb:
> Man kann doch ganz einfach beim Wert 0 den Pin von der PWM abschalten
> und auf 0 setzen.

Zu einfach!

;-)

von Thomas E. (thomase)


Lesenswert?

Peter D. schrieb:
> Man kann doch ganz einfach beim Wert 0 den Pin von der PWM
> abschalten
> und auf 0 setzen.

Dann gibt es aber einen Sprung von 0 auf 2.
Perfektion geht anders.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Damit verschiebt man nur das Problem auf einen "0-Peak" bei 255.

Na Und ?

MfG Spess

von Thomas E. (thomase)


Lesenswert?

spess53 schrieb:
> Na Und ?

Du plenkst und 'und' schreibt man klein.

von spess53 (Gast)


Lesenswert?

Hi

>> Na Und ?

>Du plenkst und 'und' schreibt man klein.

Hast du noch mehr zu bieten.

MfG Spess

von Thomas E. (thomase)


Lesenswert?

spess53 schrieb:
> Hast du noch mehr zu bieten.

Bist du mit Kurt verwandt?

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.