Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

led pwm sorunu

Başlatan furkanov, 09 Kasım 2010, 01:18:17

furkanov

#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay(clock=4000000)

void main()
{
int duty;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);

while(1)
{
set_pwm1_duty(duty);
if(duty<255)
duty++;
else
duty=0;
delay_ms(10);
}
}




yukarıdaki pwm yazılımında bir ledi yavaşca yakıp duty cycle 100e ulaştıktan sonra tekrar azaltarak sıfıra kadar düşürmek istiyorum. fakat artış sorunsuz olurken birden sıfıra düşüyor. azalmanın da aynı şekilde yumuşakça olmasını nasıl sağlayabilirim?

justice_for_all

arkadasim arttirma ve azaltma icin birertane for dongusu yap ve beklemelerini icine koy arttitiken 255 e dogru say azaltirken sifira dogru ...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

furkanov

basla:

for(i = 1; i <= 254; i++)
set_pwm1_duty(i);
delay_ms(10);
i=255;
for(i=255;i>=1;i--)
set_pwm1_duty(i);
delay_ms(10);

goto basla;


program kısmını bu hale getirdim ama pwm çalışmıyor bu şekliyle.
yanlışlarım nerede söyler misiniz?

furkanov

ilgin için sağol sorunu çözdüm. şu şekilde yapmak gerekiyormuş:

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

void main(){

int data=0;

delay_ms(50);
setup_timer_2(T2_DIV_BY_1,254,1);
setup_ccp1(ccp_pwm);

while(1){
   data=data+5;
   if(data==255)
   {
   for(data=255;data>0;data--)
   {set_pwm1_duty(data);
   delay_ms(20);}
   }
   delay_ms(50);
   set_pwm1_duty(data);
  }
}

justice_for_all

arkadasim yukaridaki kodda for icin parantaz filan yokki calismaz tabi...



for(i = 1; i <= 254; i++)
{
   set_pwm1_duty(i);
   delay_ms(10);
}

boyle olursa calisir... ama tek tek arttirmak islemcini fazla yorar 10 arttirsanda fazla farketmezsin zaten...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay