Forum: Mikrocontroller und Digitale Elektronik Duty cycle linear regeln lassen? C Befehl?


von Thomas S. (thomas_s74)


Lesenswert?

Hallo,

normalerweiße schreibe ich beim faden von LEDs, Lampen, Motoren immer 
die ganzen befehle für das Tastverhältnis in den code. Allerdings dauert 
das lange, man hat wenig PWM Schritte, man muss viel schreiben und es 
verbraucht viel flash.

Gibt es irgendeinen Befehl um den Duty cycle des PWM Signals linear 
regeln zu lassen. z.B. dass das Signal in 1000ms von 0-100% ansteigt 
(bei 500ms das Signal 50% hat)?

Oder das ganze gar mit einem ADC zu steuern. Also mit dem befehl, dass 
bei value 0 das Signal 0%, also komplett low ist, bei value 500 es 50% 
duty cycle hat und bei value 1000 das Signal 100%, also High ist.

MfG
Thomas

von André A. (nummer5) Benutzerseite


Lesenswert?

Dafür gibts doch die Timer. Solltest du für AVR programmieren schau dir 
mal das Tutorial an. Dann musst du nur noch einen Wert in ein Register 
schreiben und das Tastverhältnis zu ändern. Aus welchen Daten du das 
Verhältnis berechnest ob ADC oder Timer in 1s Abständen ist eine andere 
Sachen. Spezielle Befehle dafür gibt es nicht in C.

von noAVRuser (Gast)


Lesenswert?

Schon mal eine Schleife Programmiert "for x to y" oder "while ... do"?
Oder einen Wert inkrementiert "a++"?

von Thomas S. (thomas_s74)


Lesenswert?

noAVRuser schrieb:
> Schon mal eine Schleife Programmiert "for x to y" oder "while ... do"?

Ne, bis jetzt ist mir nur die Schleife am Ende des Programms bekannt. 
Wäre es zu viel verlangt, wenn Du es etwas genauer erklären könntest?

MfG
Thomas

von Marius W. (mw1987)


Lesenswert?

Jedes C-Buch ist dafür geeignet!

MfG
Marius

von Peter D. (peda)


Lesenswert?

Thomas S. schrieb:
> Oder das ganze gar mit einem ADC zu steuern. Also mit dem befehl, dass
> bei value 0 das Signal 0%, also komplett low ist, bei value 500 es 50%
> duty cycle hat und bei value 1000 das Signal 100%, also High ist.

MCs rechnen immer binär.
Ein 10Bit ADC hat also 1024 Schritte und eine 10Bit-PWM auch.
Dein Programm würde auf einem ATtiny24 etwa so aussehen:
1
  for(;;)
2
    OCR1A = ADCW;
Davor noch den ADC free running und den T1 in Mode 3 (PWM, Phase 
Correct, 10-bit) setzen, fertig.


Peter

von Christian H. (christian_h)


Lesenswert?

Kleiner Tipp: Lerne definitiv die Sprache, in der du programmierst, 
erstmal so gut kennen, dass du dich danach nur noch um die Plattform 
sorgen machen musst. Heißt: Ein C-Buch anschaffen (gibt gute für 10€), 
lernen und danach wirst du sehen, dass dir alles ein wenig leichter 
fallen wird, da dann nur noch das Datenblatt brauchst, falls du etwas 
spezielles wissen musst.

von Thomas S. (thomas_s74)


Lesenswert?

Christian H. schrieb:
> Ein C-Buch anschaffen

Die Idee hört sich gut an. Kann irgend Jemand ein gutes empfehlen? 
Preislich würde ich aber nicht über 30€ gehen wollen.

von Kali (Gast)


Lesenswert?

> Kann irgend Jemand ein gutes empfehlen? Preislich würde ich aber nicht
> über 30€ gehen wollen.

http://openbook.galileocomputing.de/c_von_a_bis_z/index.htm#_top

Die 30€ bitte ich auf ein Konto einer karitativen Organisation Deiner 
Wahl zu überweisen und die Spendenquittung (ggf. mit unkenntlich 
gemachtem Daten des Einzahlenden) hier zu posten.

von Martin (Gast)


Lesenswert?

Thomas S. schrieb:
> Gibt es irgendeinen Befehl um den Duty cycle des PWM Signals linear
> regeln zu lassen.

Ein linearer PWM Anstieg ist normalerweise sehr ungünstig, wenn es um 
die Helligkeit geht. Beim linearen Faden steigt die Helligkeit zu Anfang 
stark an und ändert sich bei höheren Werten nur noch relativ wenig. Bist 
du sicher, dass du das möchtest.

von Thomas S. (thomas_s74)


Lesenswert?

Martin schrieb:
> Ein linearer PWM Anstieg ist normalerweise sehr ungünstig, wenn es um
> die Helligkeit geht. Beim linearen Faden steigt die Helligkeit zu Anfang
> stark an und ändert sich bei höheren Werten nur noch relativ wenig. Bist
> du sicher, dass du das möchtest.

Also müsste das ganze, wenns intern geregelt wird logarithmisch 
ansteigen. Und wenn das per Wert im ADC (z.B. als Motorregler oder 
Signalgenerator) gesteuert wird, linear ansteigen?

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.