Hallo!
Ich bin gerade dabei eine kleine Lüftersteuerung für einen 4 Pin 12V PWM
PC Lüfter zu bauen und verwende dafür den Attiny13.
Der Code sollte eigentlich eine Arbeit von 10 Minuten sein, will aber
ums Verrecken nicht funktionieren.
Folgender Testaufbau: Attiny PWM Ausgang OC0A (PB0) -> Widerstand ->
(Basis) Open Collector Schaltung mit NPN Transistor -> PullUp Widerstand
an Collector (3.3V).
Das Problem:
Im WGMA Mode 5, d.h als TOP Wert wird OCR0A herangezogen, krieg ich am
Collector immer HIGH raus, d.h. der Transistor sperrt. Es kommt kein PWM
Signal raus.
Im WGMA Mode 1, d.h. als TOP Wert wird 0xFF herangezogen, krieg ich ein
PWM Signal am Ausgang, aber leider mit der falschen Frequenz.
Hier mal der Code:
int main(void)
{
DDRB |= (1<<DDB0);
OCR0A = 0xC0; //dez: 192 -> 25 kHz at 9.6 MHz clk
TCNT0 = 0x22; //duty cycle
//Set OC0A on Compare Match when up-counting. Clear OC0A on
//Compare Match when down-counting.
//inverted PWM output at OC0A
TCCR0A |= ((1<<COM0A1)|(1<<COM0A0)); //inverting PWM
//WGMA Mode 5 (PWM Phase correct with TOP: OCRA)
TCCR0A |= (1<<WGM00);
TCCR0B |= (1<<WGM02);
TCCR0B &= ~((1<<FOC0A)|(1<<FOC0B));
//clk(IO) - no prescaling
TCCR0B |= (1<<CS00);
TCCR0B &= ~((1<<CS01)|(1<<CS02));
while(1)
{
}
}
Hab ich irgendwas vergessen, dass für den WGMA 5 Mode benötigt wird?
Lg,
A special case occurs when OCR0A equals TOP and COM0A1 is set. In this case, the Compare Match is ignored, but the set or clear is done at TOP. See “Fast PWM Mode” on page 64 for more details. Siehe Note 1
Hi >//WGMA Mode 5 (PWM Phase correct with TOP: OCRA) Dann ist aber OC0B Ausgang > TCNT0 = 0x22; //duty cycle Duty Cycle wird mit OCR0B eingestellt. MfG spess
Du nutzt doch den Output B als PWM, also: TCCR0A |= ((1<<COM0B1)|(1<<COM0B0)); //inverting PWM Und du musst natürlich auch ein Dutycycle setzen: OCR0B = xxx
Klasse vielen Dank! Jetzt funktionierts, aber ich lese das nicht aus der Doku raus :/ Wieso wird im WGMA Mode 5 OC0B als Ausgang verwendet? Wo steht das? Und wo steht, dass mit OCR0B der duty cycle eingestellt wird? Ich verwende diese Doku: http://www.atmel.com/images/doc2535.pdf Lg
Hi >Wieso wird im WGMA Mode 5 OC0B als Ausgang verwendet? Wo steht das? >Und wo steht, dass mit OCR0B der duty cycle eingestellt wird? OCR0A kann nur eine Aufgabe erfüllen. Entweder als Top- oder als Compare-Register. MfG Spess
Ich verstehe danke. Aber steht das auch irgendwo in der Doku, dass dann OC0B als Ausgang fungiert und mit OCR0B die Duty Cycle eingestellt wird? Oder bin ich nur etwas von den TI Dokus verwöhnt?
Athlon N. schrieb: > Aber steht das auch irgendwo in der Doku, dass dann OC0B als Ausgang > fungiert und mit OCR0B die Duty Cycle eingestellt wird? Auf manche Sachen kommt man nur durch Probieren. MfG Paul
Hi
>Auf manche Sachen kommt man nur durch Probieren.
Oder durch etwas gesunden Menschenverstand.
MfG Spess
spess53 schrieb: > Oder durch etwas gesunden Menschenverstand. Richtig. Den Menschenverstand braucht man beim Probieren, um sämtliche sinnvollen Einstellmöglichkeiten zu finden. ;-) MfG Paul
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.