Forum: Compiler & IDEs Benötigt fast pwm den interrupt? bzw Fehlersuche


von Chris (Gast)


Lesenswert?

Ich versuche mt einem mega88 vom Timer 0, zwei pwm Signale erzeugen zu 
lassen. Das funktioniert nicht, daher bitte ich um eure Hilfe.

folgender code:
1
    DDRD = (1<<PD6)|(1<<PD5); //oc0A/B
2
    PORTD = 0;
3
    TCCR0A = (1<<COM0A1)|(1<<COM0A0)|(1<<COM0B1)|(1<<COM0B0)|(1<<WGM00)|(1<<WGM01); //fast pwm inverting 
4
    TCCR0B = (1<<WGM02)|(1<<CS00)|(1<<CS01);   //div 8, update bottom
5
    OCR0A   = 55;
6
    OCR0B   = 200;
7
8
    while(1);

Ich hoffte, dann  pwm Signale a PD5 und PD6 anliegen aber es tut sich 
nichts. Toggle ich "zu Fuß", sehe ich das.
Was mache ich da falsch, oder funktioniert der pwm über das ocr Register 
nur, wenn der interrupt verwendet wird oder so?
Bewusst finden tute ich nichts dergleichen im Datenblatt.

von Stefan E. (sternst)


Lesenswert?

Da du einen PWM-Modus einstellst, bei dem OCR0A der TOP-Wert ist, ist 
Kanal A tot. Und da der B-Match-Wert größer ist als TOP, ist auch Kanal 
B tot.

von Chris (Gast)


Lesenswert?

Habe ich das grundlegend falsch verstanden? Ich war der Annahme, daß der 
Counter in dem Modus rund läuft, also nur indirekt bei 255 umbricht und 
ocr0a und ocr0b unabhängig mit dem tcnt Register vergleicht und 
entsprechend den Ausgangs Pin setzt? :-(

von Stefan E. (sternst)


Lesenswert?

Chris schrieb:
> Ich war der Annahme, daß der
> Counter in dem Modus rund läuft, also nur indirekt bei 255 umbricht

Das wäre Modus 3, du hast aber 7 eingestellt.

von Chris (Gast)


Lesenswert?

Oh Mann! Ich danke dir da hätte ich vermutlich noch lange gesucht. Hatte 
schon Sorge, unter fauler Mensch zu fallen.
Irgendwie weiß ich nach so dämlichen Fehlern nie, ob ich froh sein soll 
ihn gefunden zu haben(oder Hilfe gefunden zu haben), oder mich über mich 
selber maßlos ärgern soll....

Nun steinig ist der Weg -  ich muss noch lernen jedes(!) Wort in den 
Datenblättern auf die Goldwaage zu legen. Lese immer zu schnell.

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.