led pwm sorunu

furkanov

Üye
Katılım
16 Mar 2010
Mesajlar
21
Puanları
1
Yaş
37
Kod:
#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?
 
Sadece pwm'i birer birer arttırmak için döngü yazmışsın, bir döngü de birer birer azaltmak için yazmalı, Program, arttırma döngüsü 255'e ulaşığında azaltma döngüsüne, azaltma döngüsü de 0 olduğunda arttırma döngüsüne dallanmalı.
 
Kod:
#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?

Programı birde şu şekilde dene; simülasyon ya da derleyici programım yok şuanda. Aklıma gelenleri yazdım direk bir dene istersen. Daha basit yolunu konuşuruz yine.

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

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

set_pwm1_duty(duty);

while(1)
{
switch(duty_secenek)
{
case 0:
{
duty++;
delay_ms(10);
set_pwm1_duty(duty);
if(duty==255)
{duty_secenek=1;}
}
case 1:
{
duty--;
delay_ms(10);
set_pwm1_duty(duty);
if(duty==0)
{duty_secenek=0;}
}
}

}
}
 
görüşleriniz için sağolun sorunu şu şekilde hallettim.
Kod:
#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);
  }
 

Forum istatistikleri

Konular
129,173
Mesajlar
923,920
Kullanıcılar
451,523
Son üye
emreokyy

Yeni konular

Geri
Üst