16f628 otomatik pwm

Başlatan i3uz, 01 Şubat 2016, 16:32:28

i3uz

Arkadaşlar merhaba,

bir pwm sinyalim var devreye elektrik verdiğimde pwm 0 dan 255 degerine otomatik olarak çıkıyor.

ama ben bunu bir butona bastığımda 0 dan 255 degerine çıkıp durmasını istiyorum bir türlü anahtar komutunu yerleştiremedim. yardım ederseniz sevinirim. yazdığım kod aşşağıda ;

#include <16F628A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES intrc_io
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5
#use delay(clock=4000000)
void main()
{
int data=0;
Setup_timer_2(T2_DIV_BY_16,254,1);
setup_ccp1(ccp_pwm);//PWM modülünü aç
while(1)
{
data=data+5;
if(data==255)
{
for(;;)
{

}
}
set_pwm1_duty(data);
delay_ms(50);
}
}
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

toyer


i3uz

Alıntı yapılan: toyer - 01 Şubat 2016, 17:22:35http://www.pcbheaven.com/picpages/The_TRIS_and_PORT_registers/

burada portlaı input olarak şartlandırma ve ilk değer atama anlatılıyor.




Teşekürler ama normal butona basıp artanını yaptım ama bir türlü bir butona basıp ledi kısıktan yüksege dogru otomatik olarak açtıramadım..
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

toyer

bir if şartının içerisine pwm artma kodunu.   buton basılmış ise pwm artsın.

pwm.c

#4
#include <16F628A.h>
#FUSES NOWDT
#FUSES intrc_io
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOLVP
#use delay(clock=4000000)
void main()
   {
   int8 i=0;
   Setup_timer_2(T2_DIV_BY_16,254,1);
   setup_ccp1(ccp_pwm);
   set_pwm1_duty((int8) 0);
   delay_ms(250);

   while(TRUE) // ANA Döngü
   {
   if(!input(PIN_A0)) //RA0 lojik 0 ise butona basılmıştır.
      {
       for(i=0;i<255;i++)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A0)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
   }
   }
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

i3uz

#5
Alıntı yapılan: pwm.c - 02 Şubat 2016, 11:47:17#include <16F628A.h>
#FUSES NOWDT
#FUSES intrc_io
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOLVP
#use delay(clock=4000000)
void main()
   {
   int8 i=0;
   Setup_timer_2(T2_DIV_BY_16,254,1);
   setup_ccp1(ccp_pwm);
   set_pwm1_duty((int8) 0);
   delay_ms(250);

   while(TRUE) // ANA Döngü
   {
   if(!input(PIN_A0)) //RA0 lojik 0 ise butona basılmıştır.
      {
       for(i=0;i<255;i++)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A0)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
   }
   }


Çokk çokkk teşekkürler.. on numara çalışıyor.
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

i3uz

Diğer bir buton  ile geriye dogru otomatik indirmek için nasıl bir yol izlemeliyim?  acıkcası hazır kodları değiştirerek bişeyler yapmaya çalışıyorum. bazen işe yarıyor ama bu sefer yaramadı 3 gündür ugraşıyorum. bir butonda ekleyip, sinyali aşagıya indirebilirsem süper olucak..
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

pwm.c

Alıntı yapılan: i3uz@hotmail.com - 02 Şubat 2016, 15:03:47Diğer bir buton  ile geriye dogru otomatik indirmek için nasıl bir yol izlemeliyim?  acıkcası hazır kodları değiştirerek bişeyler yapmaya çalışıyorum. bazen işe yarıyor ama bu sefer yaramadı 3 gündür ugraşıyorum. bir butonda ekleyip, sinyali aşagıya indirebilirsem süper olucak..

buyur:
#include <16F628A.h>
#FUSES NOWDT
#FUSES intrc_io
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOLVP
#use delay(clock=4000000)
void main()
   {
   int8 i=0;
   Setup_timer_2(T2_DIV_BY_16,254,1);
   setup_ccp1(ccp_pwm);
   set_pwm1_duty((int8) 0);
   delay_ms(250);
   
   while(TRUE) // ANA Döngü
   {
   if(!input(PIN_A0)) //RA0 lojik 0 ise butona basılmıştır.
      {
       for(i=0;i<255;i++)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A0)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
     
    if(!input(PIN_A1)) //RA1 lojik 0 ise butona basılmıştır.
      {
       for(i=255;i>0;i--)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A1)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
   }
   }
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

i3uz

Alıntı yapılan: pwm.c - 02 Şubat 2016, 17:47:59buyur:
#include <16F628A.h>
#FUSES NOWDT
#FUSES intrc_io
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOLVP
#use delay(clock=4000000)
void main()
   {
   int8 i=0;
   Setup_timer_2(T2_DIV_BY_16,254,1);
   setup_ccp1(ccp_pwm);
   set_pwm1_duty((int8) 0);
   delay_ms(250);
   
   while(TRUE) // ANA Döngü
   {
   if(!input(PIN_A0)) //RA0 lojik 0 ise butona basılmıştır.
      {
       for(i=0;i<255;i++)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A0)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
     
    if(!input(PIN_A1)) //RA1 lojik 0 ise butona basılmıştır.
      {
       for(i=255;i>0;i--)
         {
         set_pwm1_duty(i);
         delay_ms(10);
         }
      while(!input(PIN_A1)){delay_ms(1);} //butona basılı ise bırakmayı bekle.
      }
   }
   }


vallahii sana nasıl tessekkür etsem bilemedim..cokk tesekkürlerr dostum..
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın