Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

for döngüsü sorunu

Başlatan mertgl, 15 Ocak 2015, 21:35:09

mertgl

Arkadaşlar merhaba. Yazılımsal olarak 3 çıkışlı basit bir PWM yapmaya çalıştım. Devreyi çalışması şu şekilde b portundan gelen bilgi sayesinde rgb ledin bacaklarına uygulanacak sinyal belirleniyor. Devre ilk çalıştığında b portunda hangi bilgi varsa onu sorunsuz yapıyor, ama b portundaki bilgiyi değiştirdiğimde hiç birşey değişmiyor. Sanki for döngüsünde takılı kalmış gibi saçma sapan bir durum oluşuyor :-\ Program aşağıda bi bakarsanız sevinirim.
#include <16F877A.h>

#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)


#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e) 
 
 
#BYTE PORTA=  0x05
#BYTE PORTB=  0x06
#BYTE PORTC=  0x07
#BYTE PORTD=  0x08
#BYTE PORTE=  0x09
#BYTE status = 0x03
#BYTE ADCON1 = 0x9F

int R,G,B,gelen;
int a,i;

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

set_tris_b(0xff);
set_tris_a(0x00);
output_b(0x00);
output_a(0x00);

output_a(0xff);
delay_ms(1000);
while(1)
{   
    gelen=input_b();
   if(gelen==0){R=255;G=0;B=0;}
   if(gelen==1){R=0;G=255;B=0;}
   if(gelen==2){R=0;G=0;B=255;}
   if(gelen==3){R=180;G=100;B=50;}
   for(a=0;a<25;a++)
   {
      for(i=1;i<=255;i++)
      { 
      if(i<=R){bit_set(porta,0);}
      if(i>R){bit_clear(porta,0);}
   
      if(i<=G){bit_set(porta,1);}
      if(i>G){bit_clear(porta,1);}
   
      if(i<=B){bit_set(porta,2);}
      if(i>B){bit_clear(porta,2);}
      delay_us(10);
      }
   }

}
}

Salih

Şemayı koyarsan iyi olur. PortB giriş bağlantısını bilmek gerekiyor, yorum yapabilmek için.

Kabil ATICI

Programı yanlış yorumlamadı isem, pb0 ve pb1 giriş olarak kullanılmış.
gelen =gelen & 0x03; yapmakta fayda olabilir. ikilik sayı sisteminde portb'den gelen sayılarda diğerleri etkilemesede c düzeyinde işlem yapıldığında girişe 4 gelirse işlemci ne yapar sorusu sizin program için sıkıntı olabilir...
ambar7

mertgl

#3
Alıntı yapılan: salih - 16 Ocak 2015, 11:34:20
Şemayı koyarsan iyi olur. PortB giriş bağlantısını bilmek gerekiyor, yorum yapabilmek için.
şemayı koymaya gerek yok, b portunun tamami giris, ve gelen adindaki degiskene aktariliyo, ona gore r,g,b degerleri belirleniyo. 256 farkli durumun tamamini yapicam daha sonra ben simdilik kisa yaptim. sorun for dongusunde takili kalmasi

mesaj birleştirme:: 17 Ocak 2015, 15:02:05

Alıntı yapılan: ambar7 - 16 Ocak 2015, 11:55:23
Programı yanlış yorumlamadı isem, pb0 ve pb1 giriş olarak kullanılmış.
gelen =gelen & 0x03; yapmakta fayda olabilir. ikilik sayı sisteminde portb'den gelen sayılarda diğerleri etkilemesede c düzeyinde işlem yapıldığında girişe 4 gelirse işlemci ne yapar sorusu sizin program için sıkıntı olabilir...
b portnun tamami giris, b portu 8 bitlik giris toplamda 256 durum olusabilir ve ben onlarin tamamini eklicem. sadece 0,1,2,3 bilgisi geliyo pice cunku el ile kontrol ediyorum .

mesaj birleştirme:: 17 Ocak 2015, 01:02:54

eger sizde daha iyi bi 3 cikisli pwm programi varsa paylasirsaniz sevinirim


z

#5
int i değişkeni kullandığın sistemde  -128...+127 aralığındamı yoksa -32768...+32767 aralığındamı kontrol etmelisin.

int i yerine unsigned int i dersen düzelir.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aliveli

int i 0-255 arası değer alır
şema şart buton mu anahtar mı bağladın? gerçek devreyi kurdun mu?
pwm timer ile yapılır genelde http://www.ccsinfo.com/forum/viewtopic.php?t=30139

z

  for(i=1;i<=255;i++) yerine       for(i=1;i!=0;i++) denemek lazım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aliveli

ikisi de aynı adım sayar ccs c için
bence buradaki sıkıntı for döngüsünde değil
gelen=input_b(); satırında
bu satırın programa uygun çalışması için butonlar pull down olmalı, sadece b0 ve b1 de buton olmalı, buton olmayan pinler şaselenmeli

tahminim butonlar b0-b4 arası bağlı diğer pinler boşta bu nedenle if lerin hiçbiri çalışmıyor
soruyu soran devreyi göstermeyi gerek görmediği için bilemiyoruz

z

o zaman

gelen=input_b();

yerine

gelen=input_b() & 3;

yazacak
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

aliveli

kaç buton kullandı ,butonlar nereye bağlı, nasıl bağlı bilmiyoruz