Forum: Mikrocontroller und Digitale Elektronik PWM und Powerdown


von The SphereX (Gast)


Lesenswert?

Hi Leute !!!

Ich kann's leider gerade praktisch nicht testen, deshalb frage ich mal 
schnell nach:

Angenommen ich mache mit einem ATTiny ein einsekündiges Fade-In einer 
LED mittels PWM (Timer0) von 255 bis 0. Dann kommt irgendwann mal im 
Programm ein Powerdown. Leuchtet die LED weiter, denn Timer0 wird ja 
gestoppt?

Sollte sie weiterleuchten, wie würde sich das Ganze verhalten, wenn der 
Fade-In Endwert z. B. 90 anstatt 0 beträgt?

Grüße,
The SphereX

von Falk B. (falk)


Lesenswert?

@ The SphereX (Gast)

>Programm ein Powerdown. Leuchtet die LED weiter, denn Timer0 wird ja
>gestoppt?

Wenn du ihn während der HIGH Phase der PWM anhältst.

von The SphereX (Gast)


Lesenswert?

Ich gehe mal davon aus, daß dies dann allerdings rein zufällig passiert, 
man per Befehl also nicht irgendwie auswerten kann, ob die PWM gerade 
HIGH oder LOW ist?

Grüße,
The SphereX

von Falk B. (falk)


Lesenswert?

@ The SphereX (Gast)

>Ich gehe mal davon aus, daß dies dann allerdings rein zufällig passiert,

Nö.

>man per Befehl also nicht irgendwie auswerten kann, ob die PWM gerade
>HIGH oder LOW ist?

Doch. Wenn du den Zähler anhältst, kannst du ihn auslesen. Genau so wie 
deinen PWM Wert. Das kann man vergleichen.

Oder noch einfacher. Den Eingangswert des PWM-AUSGANGS einlesen, denn 
das geht natürlich parallel. Dann weiß die CPU, ob die LED an oder aus 
ist ;-)

von The SphereX (Gast)


Lesenswert?

" ... Wenn du den Zähler anhältst, kannst du ihn auslesen. Genau so wie 
deinen PWM Wert. ... "

Also wie ich den PWM-Wert auslese, weiß ich, wobei mir dieser ja bekannt 
ist. Wie kann ich aber den HIGH-LOW Status des Timers nach dessen 
Anhalten auslesen? Steht der Wert dann in irgendeinem Register?

" ... Oder noch einfacher. Den Eingangswert des PWM-AUSGANGS einlesen, 
denn das geht natürlich parallel. ... "

Das verstehe ich leider auch nicht so ganz. Wenn der betreffende Pin als 
Ausgang konfiguriert ist, wie kann ich dann gleichzeitig dessen 
Eingangswert, was der dann auch immer ergibt, einlesen? Oder verstehe 
ich Dich da jetzt falsch?

Grüße,
The SphereX

von Falk B. (falk)


Lesenswert?

@ The SphereX (Gast)

>Also wie ich den PWM-Wert auslese, weiß ich, wobei mir dieser ja bekannt
>ist. Wie kann ich aber den HIGH-LOW Status des Timers nach dessen
>Anhalten auslesen? Steht der Wert dann in irgendeinem Register?

Der ergibt sich aus der Logik! Wenn der Zähler >= PWM Wert ist, dann ist 
dein Pin HIGH.

>Das verstehe ich leider auch nicht so ganz. Wenn der betreffende Pin als
>Ausgang konfiguriert ist, wie kann ich dann gleichzeitig dessen
>Eingangswert, was der dann auch immer ergibt, einlesen?

Ja. Die Funktion zum Einlesen der Eingangspins ist immer verfügbar, auch 
wenn das Pin als Ausgang definiert ist.

von The SphereX (Gast)


Lesenswert?

OK, die Sache mit dem Auslesen des Timers habe ich jetzt verstanden. 
Geht ja tatsächlich ganz einfach über das TCNT0 Register. Was ist aber, 
wenn ich die LED auf volle Leuchtstärke (PWM0a = 0) einblende, und dann 
den Timer anhalte bzw. dann ein Powerdown folgt. In dem Fall wäre ja 
TCNT0 >= PWM0a immer erfüllt. Woher weiß ich dann, ob der Ausgang HIGH 
oder LOW ist?

" ... Die Funktion zum Einlesen der Eingangspins ist immer verfügbar, 
auch wenn das Pin als Ausgang definiert ist. ... "

Ach so ... ??? Das war mir nicht bekannt. Wenn ich einen ADC-Pin also 
als Ausgang konfiguriert habe, kann ich ihn trotzdem noch auslesen, so 
als würde er als Eingang eingestellt sein? Das verwirrt mich gerade ein 
wenig. Vor allem, was ich dann für einen Messwert erhalte. Etwa z. B. 
1024 bei PWM0A = 0 und HIGH?

Grüße,
The SphereX

von Mike (Gast)


Lesenswert?

The SphereX schrieb:
> Wenn der betreffende Pin als
> Ausgang konfiguriert ist, wie kann ich dann gleichzeitig dessen
> Eingangswert, was der dann auch immer ergibt, einlesen?

Da hilft zur Not ein Blick ins Datenblatt. Auch für deinen ATtiny wird 
es da im Abschnitt "Ports as General Digital I/O" die Abbildung "General 
Digital I/O" geben, wo du ganz genau sehen kannst, wer-was-wie am IO-Pin 
zugänglich ist.

von Kein Name (Gast)


Lesenswert?

>Dann kommt irgendwann mal im Programm ein Powerdown.

Wieso irgendwann? Normalerweise macht so ein Programm das Powerdown, 
nachdem das Fadein/Fadeout vollständig abgearbeitet ist. Setzt den Port 
und schaltet COMnx wieder ab. Danach erst das Powerdown.

von Oliver R. (orb)


Lesenswert?

The SphereX schrieb:
> Vor allem, was ich dann für einen Messwert erhalte. Etwa z. B.
> 1024 bei PWM0A = 0 und HIGH?

Nein, ein Portpin hat immer nur den Zustand High oder Low, was anderes 
kannst Du da nicht einlesen.
Aber Du mußt ja auch nur abwarten bis der Port grad 'Low' ist wenn der 
'Powerdown' kommt.

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.