PWM ile soft aydınlatma

Başlatan catalyst, 10 Nisan 2018, 21:33:30

catalyst

Merhabalar, STM8S'e yeni başladım. PWM ile bir ledi yavaş yavaş artarak en sonunda son parlaklığına kadar yakmak istiyorum.  Duty'i yavaş yavaş arttırmam gerekiyor sanırım. Bunun için nasıl bir algoritma oluşturmalıyım?

kimlenbu

Algoritmalık fazla bir şey yok.
-Timer'ın "output compare and pwm" özelliğini pwm olarak ayarla,
- frekansı ayarla,
-frekansa göre duty cycle'ı %100 yapmak için gereken periyot değerinin hesabını yap
- daha sonra duty cycle'ı değiştirmek için kullanılacak register'a 0'dan hesapladığın periyot değerine kadar değer atayabilirsin.

Bu altyapıyı kurduktan sonra hiç uğraşmadan istediğin %'de pwm tek satır kodla oluşturulabilir.

catalyst

Alıntı yapılan: kimlenbu - 12 Nisan 2018, 09:32:29Algoritmalık fazla bir şey yok.
-Timer'ın "output compare and pwm" özelliğini pwm olarak ayarla,
- frekansı ayarla,
-frekansa göre duty cycle'ı %100 yapmak için gereken periyot değerinin hesabını yap
- daha sonra duty cycle'ı değiştirmek için kullanılacak register'a 0'dan hesapladığın periyot değerine kadar değer atayabilirsin.

Bu altyapıyı kurduktan sonra hiç uğraşmadan istediğin %'de pwm tek satır kodla oluşturulabilir.

Hocam öncelikle teşekkürler. Söylediginiz şeyi anlıyor ve uygulayabiliyorum. Fakat istedigim şey şu: Bir butona bastıgımda duty cycle'ı %0'dan %100'e örneğin 3 saniye içerisinde periyodik aralıklarla ulaştırmak. Yani kare dalga genişliği 0'dan 100'e yavaşça periyodik olarak %100'e kadar 3 saniye içerisinde artacak. Sabit bir duty değil yani.

mehmet

Her hangi bir döngü veya şart ile;
ilgili registeri, aşağı yada yukarı
sayan bir değişken ile kontrol
edebilirsiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

fide

for (a=0;a<101;a++)
{
    Set_pwm_duty(a) ;

    Delay(30);//30milisaniye
}
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

catalyst

Alıntı yapılan: fide - 14 Nisan 2018, 20:41:41for (a=0;a<101;a++)
{
    Set_pwm_duty(a) ;

    Delay(30);//30milisaniye
}

Hocam teşekkür ederim, deneyeceğim.