Frage

Ich versuche, PWM für eine LED auf einer Atmega8 zu verwenden, jede Pin of Port B. Einrichten von Timern ist ärgerlich, und ich weiß nicht, was mit meinem OCR1A zu tun ist.Hier ist mein Code, und ich würde etwas Feedback lieben.

Ich versuche nur herauszufinden, wie der PWM verwendet wird.Ich kenne das Konzept, und OCR1A soll der Fraktion des gesamten Gegenzeiten sein, den ich den Puls auf möchte. generasacodicetagpre.

War es hilfreich?

Lösung 2

Sie müssen Ihre OCR1A mit diesen beiden Zeilen initialisieren: generasacodicetagpre.

und dann diese verwenden: generasacodicetagpre.

und wissen, dass der Bereich 0-255 beträgt.Zählen Sie Ihre Prozentsätze und dort haben Sie es! generasacodicetagpre.

Andere Tipps

nein, das ist nicht den Weg, wie Sie einen PWM machen sollten. Wie setzen Sie zum Beispiel eine PWM-Rate von beispielsweise 42% damit ein? Auch die Codegröße ist groß, es kann auf viel effizienter erfolgen. Sie verschwenden auch einen 16-Bit-Timer, um 8 Bit-Vorgänge zu erledigen. Sie haben 2x 8 Bit-Timer (Timer / Zähler 0 und 2) und einen 16-Bit-Timer, Timer/Counter 1.

Es ist auch eine schlechte Idee, ungenutzte Portpins zum Ausgeben einzustellen. Alle Portpins, die nicht mit etwas verbunden sind, sollten als Eingaben gelassen werden.

Der Atmega8 verfügt über einen eingebauten PWM-Generator auf den Timer 1 und 2, es ist nicht erforderlich, es durch Software zu simulieren. Sie müssen Ihre Ports nicht einmal manuell einstellen (Sie müssen nur den entsprechenden Portpin auf die Ausgabe einstellen)

Sie benötigen nicht einmal einen Interrupt. generasacodicetagpre.

Beachten Sie, dass Sie mit einem anderen PWM eine andere LED verwenden können, indem Sie denselben Timer verwenden und OCR2B anstelle von OCR2A einstellen. Vergessen Sie nicht, TCCR2A einzustellen, um OCR2B als Ausgabe für Ihr PWM zu aktivieren, wie in diesem Beispiel nur OCR2A zulässig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top