for döngüsü problemi

Başlatan bulut_01, 04 Şubat 2016, 21:44:25

bulut_01

iyi aksamlar pic proje ailesi küçük bir derdim var çözemedim for döngüsü ile ilgili değişkenin belirlediğim degere geldiğinde durmasını istiyorum yeni başa dönüp ilk degeri atayıp baştan başlıyor benimse istediğim t<100 degerine geldiğinde for döngüsünden cıkıp sabit pwm almak.
for(t=1000;t>100;t--)
{
for(x=0;x<=10;x++)
       {
    output_high(PIN_b0);
     output_high(PIN_b3);
      delay_us(t);
          output_low(PIN_b0);
          output_low(PIN_b3);
          delay_us(1000-t);

}
}


1000 geri sayım yapıyor 100 geldiğinde sabit 100 kalmasını istiyorum ama burda 0 inip yeniden 1000 geri sayım yapıyor 100 durmuyor for şart bölümünde 100 altına indiğinde for döngüsü çalısmaması lazım ama for çıkmıyor hatam nerde anlamadım.
YENİLMEZ..

z

for(t=1000;t!=100;t--)

Bu işini görür ama ben böyle kullanmazdım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bulut_01

Alıntı yapılan: z - 04 Şubat 2016, 21:47:40
for(t=1000;t!=100;t--)

Bu işini görür ama ben böyle kullanmazdım.

neden bülent hocam birde yukardaki verdiğiniz hiç birşeyi değiştirmedi gine aynı şekil çalışıyor t sıfırlayıp başa dönüyor.
YENİLMEZ..

z

Alala t değişkenin nasıl bir değişken.

t'nin tanımlandığı satırı da yazarmısın?

Aslında seninkinin de çalışmama sebebi muhtemelen bu değişken tanımı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bulut_01

#include <16F628A.h>
#FUSES NOWDT                     //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT              //No brownout reset
#fuses NOMCLR
#use delay(int=4000000)

int16 x=0;
int16 t=0;

#int_timer0  
void TIMER0_isr() 
{
}

void main()
{
setup_comparator(NC_NC_NC_NC);
set_tris_a(0b00000011);
set_tris_b(0b00000000);
output_a(0x00);
output_b(0x00);
enable_interrupts(GLOBAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(INT_RTCC);

while(true)
{

for(t=1000;t>=100;t--)
{
for(x=0;x<=10;x++)
       {
    output_high(PIN_b0);
     output_high(PIN_b3);
      delay_us(t);
          output_low(PIN_b0);
          output_low(PIN_b3);
          delay_us(1000-t);

}
}
}
}


for(t=1000;t!=100;t--)     sonuc değiştirmiyor
YENİLMEZ..

z

İlginç.

1000'den geri sayıyor 100e geliyor ama geri saymaya devam ediyor 99,98,97....0 öylemi?

100'den sonra zaten 1000'den başlaması normal ama 100 de neden durmuyor gerçekten ilginç.

Hatayı buluncaya kadar şu timerı da bir devre dışı bırak olmazsa.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vitruvius

100'ün altına indiğini nereden anlıyorsunuz? Debug mı yapıyorsunuz? Umarım sonsuz döngünün içinde sonsuz kere çalışmasndan bahsetmiyoruzdur.

bulut_01

protues sim. ediyorum pwm oluşturuyorum hersey normal duty 1000 başlayıp 100 kadar azalıyor 100 gelince for döngüsünden çıkması gerekirken çıkmıyor ve duty 1000 olup yeniden başa dönüyor burası ilginç ben istediğim 1000 geri saysın 100 kadar 100 sabit kalsın geri başa dönmesin kafam durdu.
YENİLMEZ..

vitruvius

Öncelikle şunda bir anlaşalım. İçiçe olan for döngüleriniz while(true) içinde. Yani kodun bu haliyle döngüler sürekli çalışacak. Döngünün yapısında da t=1000 ataması olduğundan t'ye ve x'e sürekli bu değerler atanacak. Tekrar 1000'den sayacak. Sizin kodda olan şey bu.

dursuncemal

#9
for(t=1000;t>100;--t) yi bi dene ustad  ya da while dene >= >= e de bak istersen
:=

bulut_01

ikinci for kısmı x değişkenli olan ince ayar duty azalma hızını ayarlıyorum ilk döngüde nasıl bir değişiklik yapmam lazımki 1000 geri saysın 100 sabit kalsın kafa durdu artık işin içinden çıkamadım.
YENİLMEZ..

dursuncemal

--t ile t-- arasidaki fark birinde eksiltikten sonra kontrol birinde kontrol sonra eksiltme olmali yanlis hatirlamiyorsam.
:=

bulut_01

Alıntı yapılan: dursuncemal - 04 Şubat 2016, 22:54:20
for(t=1000;t>100;--t)

sonuc aynı değişmedı gine başa dönüyor.
YENİLMEZ..

z

Alıntı yapılan: bulut_01 - 04 Şubat 2016, 22:48:20
protues sim. ediyorum pwm oluşturuyorum hersey normal duty 1000 başlayıp 100 kadar azalıyor 100 gelince for döngüsünden çıkması gerekirken çıkmıyor ve duty 1000 olup yeniden başa dönüyor burası ilginç ben istediğim 1000 geri saysın 100 kadar 100 sabit kalsın geri başa dönmesin kafam durdu.

Eee ama bu normal.

100'e gelince while'ın başına gelip tekrar 1000'den geri sayacak. Boşu boşuna kafamızı karıştırdın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vitruvius

#14
Alıntı yapılan: bulut_01 - 04 Şubat 2016, 22:59:43
sonuc aynı değişmedı gine başa dönüyor.

Başa dönmesinin sebebini açıkladım.

Eğer istediğinizi doğru anladı isem aşağıdaki kodun çalışması lazım:

for(t=1000;t>100;t--)
{
   for(x=0;x<=10;x++)
   {
       output_high(PIN_b0);
       output_high(PIN_b3);
       delay_us(t);
       output_low(PIN_b0);
       output_low(PIN_b3);
       delay_us(1000-t);

   }
}

while(1)
{
       output_high(PIN_b0);
       output_high(PIN_b3);
       delay_us(t);
       output_low(PIN_b0);
       output_low(PIN_b3);
       delay_us(1000-t);
}