Forum: Mikrocontroller und Digitale Elektronik Soft-PWM: Ausgangsports während der Initialisierung dauerhaft "aus"?


von Thomas J. (rrurr)


Lesenswert?

Hallo an alle,

habe eine Frage bezügich des Soft-PWM-Tutorials - Implementierung der 
Version 3 (http://www.mikrocontroller.net/articles/Soft-PWM): Sobald ich 
das Programm auf meinen Microcontroller schreibe, werden anschließend 
bei der Initialisierung des Programms alle Ports auf high gesetzt, so 
dass die LEDs an den Pins leuchten.

Natürlich kann man die LEDs im eigentlichen Programmablauf direkt auf 
low setzten, so dass diese ausgehen, jedoch stört es mich etwas, dass 
die Leds jedes Mal kurz aufleuchten, wenn ich den µC einschalte.

Kann man irgendwie verhinden, dass die Ausgänge ein Signal bei der 
Initialisierung bekommen?

Gruß

von Eumel (Gast)


Lesenswert?

Thomas J. schrieb:

> Natürlich kann man die LEDs im eigentlichen Programmablauf direkt auf
> low setzten, so dass diese ausgehen, jedoch stört es mich etwas, dass
> die Leds jedes Mal kurz aufleuchten, wenn ich den µC einschalte.
>
> Kann man irgendwie verhinden, dass die Ausgänge ein Signal bei der
> Initialisierung bekommen?
>
> Gruß

Das ist eigentlich schon richtig so, da man den Minus Pol der LEDs gerne 
an den Controller legt. Die leuchten dann bei "Null" und sind bei "Eins" 
aus.

von Thomas J. (rrurr)


Lesenswert?

Mag sein, dass das so richtig ist, jedoch von mir nicht ganz gewünscht 
;-)

Habe zusätzlich das Problem, dass wenn ich während der Laufzeit den Port 
ändere (nach diesem Beispiel: 
Beitrag "Soft-PWM: Ausgangsport während der Laufzeit ändern ?") wird der ursprüngliche Port 
auch auf "null" gesetzt und alle LEDs leuchten.

von Falk B. (falk)


Lesenswert?

Wie sinnvoll ist die dynamische Änderung des PWM-Port? Lötest du auch 
die Verbraucher um?

von Fabian O. (xfr)


Lesenswert?

Setz den Port halt bei der Initialisierung auf den Wert, den Du willst:
1
PWM_PORT = 0xFF;
bzw.
1
PWM_PORT = 0x00;
Je nachdem wie die LEDs angeschlossen sind.

Vor dem Umschalten des Ports machst Du das gleiche. Und drauf achten, 
dass der Timer-Interrupt nicht dazwischenfunkt:
1
cli();
2
PWM_PORT = 0xFF;
3
pwm_port = &PORTD;
4
sei();

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.