Attiny841, PWM Phase Correct auf PA1

Gast #4122030
Lesenswert?
• ▲
▼
Moin,

versuche seit ein paar Stunden einen 16 bit Phase Correct PWM auf PA1 
eines Attiny841 auszugeben. Auf dem Port passiert leider nichts, und ich 
steh gerade auf dem Schlauch wo ich den (die) Fehler gemacht habe. 
Vermute das was mit dem Ansatz ICR1 als Top Counter nicht stimmt. Habt 
Ihr eine Idee wo ich ansetzen muss?

Danke!
1
main()
2
{
3
        DDRA |= (1<<PA1);
4

5
        TOCPMSA0 |= (1<<TOCC0S0);
6
        TOCPMCOE = (1<<TOCC0OE);
7

8
        ICR1 = 1000;
9

10
        TCCR0A = (1<<COM1B1) | (1<<COM1B0);             
11
        //Mode: Mode 10, WGMn[3:0]=1010, PWM Phase Correct, Top=ICR1
12
        TCCR0A = (1<<WGM11);
13
        TCCR0B = (1<<WGM13);
14

15
        while(1) {}
16
}
Gast #4123208
Lesenswert?
• ▲
▼
Danke, ist korrigiert! TOCPMSA0 sollte auch auf TOCC0S1 stehen, wenn ich 
Tabelle 12-7 richtig verstehe, hat aber leider beides nichts gebracht. 
Bin etwas ratlos, ich vermute das ich TOCPMSA0 immer noch falsch gesetzt 
habe für Ausgabe auf TOCC0/PA.
Gast #4123239
Lesenswert?
• ▲
▼
Wellenschmied schrieb:
1
> main()
2
> {
3
>         DDRA |= (1<<PA1);
4
> 
5
>         TOCPMSA0 |= (1<<TOCC0S0);
6
>         TOCPMCOE = (1<<TOCC1OE);
7
> 
8
>         ICR1 = 1000;
9
> 
10
>         TCCR1A = (1<<COM1B1) | (1<<COM1B0);
11
>         //Mode: Mode 10, WGMn[3:0]=1010, PWM Phase Correct, Top=ICR1
12
>         TCCR1A = (1<<WGM11);
13
>         TCCR1B = (1<<WGM13);
14
> 
15
>         while(1) {}
16
> }

Wenn du Timer 1 verwenden willst, solltest du auch die passenden 
Register beschrieben - nicht die des Timer0.

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