İSİS İLE BOARD AYNI ÇALIŞMIYOR

Başlatan ican43, 02 Nisan 2018, 13:01:15

ican43

Selam arkadaşlar PİC de biraz acemiyiz sizlerden yardım talep ediyoruz...Aşağıdaki programda lambalar trafik ışık sistemine göre yanıyor. a0 girişini 1 yaptığımda basla komutu devreye giriyor ve bazı lambalar sönüp bazıları yanık kalıyor. 10 saniye sonra trafik sistemi kaldığı yerden devam ediyor. Yaptığım program isis de çalışıyor lakin boarda bağladığım pic de düzgün çalışmıyor. input sartını görmeden 1. while komutuyla 2. while komutunu döngü yapmadan direk okuyup geçiyor. ve bazen karışık kendisine göre çalıştırıyor. Trafik ışık sistemine Alternatif müdahale önerileriniz varsa sevinirim.
#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6

/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{  
  set_tris_a(0xff);// a portu giriş
  set_tris_b(0x00);// b portu çıkış
  output_b(0x00);
  
  while(1)
  {
  git:
      output_high(pin_b0);
      output_high(pin_b6);
      delay_ms(3000);
      {
      if(input(pin_a0)==1)
      goto basla;
      } 
      output_high(pin_b1);
      output_high(pin_b5);
      delay_ms(2000);
      output_low(pin_b0);
      output_low(pin_b1);
      output_low(pin_b6);
      output_low(pin_b5);
      delay_ms(20);
      {
      if(input(pin_a0)==1)
      goto basla;
      }
      
      output_high(pin_b2);
      output_high(pin_b4);
      delay_ms(3000);
      {
      if(input(pin_a0)==1)
      goto basla;
      }
      
      output_high(pin_b1);
      output_high(pin_b5);
      delay_ms(2000);
      output_low(pin_b2);
      output_low(pin_b1);
      output_low(pin_b4);
      output_low(pin_b5);
      delay_ms(20);
      {
      if(input(pin_a0)==1)
      goto basla;
      } 
  }
  while(1)
  
      basla:
  {
        output_high(pin_b3);
        delay_ms(500);
        output_low(pin_b3);
        delay_ms(500);
        
        output_high(pin_b4);
        output_high(pin_b2);
        output_high(pin_b0);
            
        output_low(pin_b6);
        output_low(pin_b1);
        output_low(pin_b5);
        
        delay_ms(10000);
      goto git;
  }
}

bulut_01

C ile basic karıştırırsan normal çalışmaması dogal git; ve goto basla; gibi komutlar C olmaz komple C yazmak istiyorsan basic komutlarını silin yerine C komut satırlarını kullanın.
YENİLMEZ..

mehmet

Akış diyagramı çalışınız.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

kimlenbu

@bulut_01, C'de kullanılmasına iyi gözle bakılmasa da "goto" vardır.

@ican43, "super loop" nedir, nasıl kullanılır, goto kullanmadan nasıl program yazılır öğrenmen lazım. Emeklemeden koşmaya çalışmışsın. önce tek led yak söndür, tek buton oku, bu butona göre ledi yakıp söndür. Koda bakınca okuyasım gelmedi.

Goto kullanmayı geçtim bari  etiketleri doğru yerleştirseydin. while ve { parantez arasına etiket koymak...

kudretuzuner

Merhaba,
Isis simülasyon esnasında bazı şeyleri gözardı edebiliyor.Sakıncası yoksa isis şemanızı da verirseniz belki çalışmayan yer de bulunabilir.Kolay gelsin.
Amatör

ican43

Sağolun haklısınız. lakin acil bir projede lazım oldu. goto basla, git yerine ani olarak yönlendirme komutu ne kullanabilirim, yardımcı olursanız sevinirim.

silver_wolf

Selam @ican43;
Yazdığınız kodlardan anladığım kadarıyla örnek program yazdım.
Ben de ISIS'te çalışıyor. Devrenizde deneyip geri bildirim yaparsanız sevinirim.


Saygılar

Örnek programım şu şekilde çalışıyor;
1)PORTA.0 eşit değil 1 ise;
  1a)PORTB.0=1
  1b)PORTB.6=1
  1c)3 saniye bekle
2)PORTA.0 eşit değil 1 ise;
  2a)PORTB.1=1
  2b)PORTB.5=1
  2c)2 saniye bekle
  2d)PORTB.0=0
  2e)PORTB.1=0
  2f)PORTB.6=0
  2g)PORTB.5=0
  2h)20 milisaniye bekle
3)PORTA.0 eşit değil 1 ise;
  3a)PORTB.2=1
  3b)PORTB.4=1
  3c)3 saniye bekle
4)PORTA.0 eşit değil 1 ise;
  4a)PORTB.1=1
  4b)PORTB.5=1
  4c)2 saniye bekle
  4d)PORTB.2=0
  4e)PORTB.1=0
  4f)PORTB.4=0
  4g)PORTB.5=0
  4h)20 milisaniye bekle
5)PORTA.0 eşit 1 ise;
  5a)PORTB.3=1
  5b)0.5 saniye bekle
  5c)PORTB.3=0
  5d)0.5 saniye bekle
  5e)PORTB.4=1
  5f)PORTB.2=1
  5g)PORTB.0=1
  5h)PORTB.6=0
  5i)PORTB.1=0
  5j)PORTB.5=0
  5k)10 saniye bekle
6)1'e git

#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6

/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{  
  //Aşağıdaki setuplar A portu dijital I/O yapar
  setup_adc_ports(NO_ANALOGS); //ANALOG giriş yok
  setup_adc(ADC_OFF);  //ADC birimi devre dışı
  setup_comparator(NC_NC_NC_NC);// OPAMP birimi devre dışı 

  set_tris_a(0xff);// a portu giriş
  set_tris_b(0x00);// b portu çıkış
  output_b(0x00);
  
  while(TRUE)
  {

    if(input(pin_a0)!=1)//1
    {
      output_high(pin_b0);//1a
      output_high(pin_b6);//1b
      delay_ms(3000);//1c
    }
    if(input(pin_a0)!=1)//2
    {
      output_high(pin_b1);//2a
      output_high(pin_b5);//2b
      delay_ms(2000);//2c
      output_low(pin_b0);//2d
      output_low(pin_b1);//2e
      output_low(pin_b6);//2f
      output_low(pin_b5);//2g
      delay_ms(20);//2h
    }
    if(input(pin_a0)!=1)//3
    {
      output_high(pin_b2);//3a
      output_high(pin_b4);//3b
      delay_ms(3000);//3c
    }
    if(input(pin_a0)!=1)//4
    {
      output_high(pin_b1);//4a
      output_high(pin_b5);//4b
      delay_ms(2000);//4c
      output_low(pin_b2);//4d
      output_low(pin_b1);//4e
      output_low(pin_b4);//4f
      output_low(pin_b5);//4g
      delay_ms(20);//4h
    }
    if(input(pin_a0)==1)//5
    {
      output_high(pin_b3);//5a
      delay_ms(500);//5b
      output_low(pin_b3);//5c
      delay_ms(500);//5d
      
      output_high(pin_b4);//5e
      output_high(pin_b2);//5f
      output_high(pin_b0);//5g
          
      output_low(pin_b6);//5h
      output_low(pin_b1);//5i
      output_low(pin_b5);//5j
      
      delay_ms(10000);//5k
    }
  }
}
:1000000000308A0019280000223084008313000881
:10001000031918280130F800F701F70B0D28F80B29
:100020000C284A30F700F70B13281628800B0A28F3
:10003000080003081F39830083161F149F141F151F
:100040009F1107309C0083131F149F141F159F11CD
:1000500083121F10073083169C00050885000330AB
:10006000F700F70B31281C0883120D13FF3083169D
:100070008500003086008312860105184828061482
:1000800006170C30A100FA30A2000420A10B43286F
:1000900005185A28861486160830A100FA30A200E6
:1000A0000420A10B4E280610861006138612143069
:1000B000A200042005186528061506160C30A100BC
:1000C000FA30A2000420A10B6028051877288614B6
:1000D00086160830A100FA30A2000420A10B6B287C
:1000E00006118610061286121430A2000420051C88
:1000F000962886150230A100FA30A2000420A10B38
:100100007C2886110230A100FA30A2000420A10B45
:100110008428061606150614061386108612283043
:10012000A100FA30A2000420A10B91283D28630011
:02400E00393F38
:00000001FF
;PIC16F877A

Selam @kimlenbu;
Süper loop nedir? Biraz açıklar mısınız? Ya da kaynak önerir misiniz?

Saygılar

M.Salim GÜLLÜCE

Alıntı yapılan: kimlenbu - 02 Nisan 2018, 14:27:47@bulut_01, C'de kullanılmasına iyi gözle bakılmasa da "goto" vardır.

@ican43, "super loop" nedir, nasıl kullanılır, goto kullanmadan nasıl program yazılır öğrenmen lazım. Emeklemeden koşmaya çalışmışsın. önce tek led yak söndür, tek buton oku, bu butona göre ledi yakıp söndür. Koda bakınca okuyasım gelmedi.

Goto kullanmayı geçtim bari  etiketleri doğru yerleştirseydin. while ve { parantez arasına etiket koymak...
Hay allah Neşelendirdin beni yahu :)

fide

Arkadaşlar bakıp çıkacaklara sözüm yok ama bu işle uğraşacaklar bi zahmet devreyi kursun. Sanal yerine reelde deneme yapsın. Gürültü ile lehimle, fiziksel olarak parçalarla tanışsınlar bi zahmet. Sözüm özellikle mühendislik öğrencilerine. Yarın bi yerde işe başlarsanız isisde denedim çalışıyordu demezsiniz herhalde
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

ican43

Silver wolf Allah razı olsun, program İSİS de çalışıyor lakin pic yüklediğimde pin a0  şartını da aramadan hepsini birden döngüde dolanıyor. Yani lambalar yanıyor, sürekli döngü yapmadan pin a0 sanki 1 miş gibi devam edip gidiyor. İsteğim trafik lambaları döngüsü olsun lakin a0 girişi 1 olunca lambalar benim istediğim gibi 10 saniye konum değiştirip, sonra trafik sistemi kaldığı yerden devam etsin. Biraz daha yardımcı olursanız sevinirim.

silver_wolf

Selam @ican43;
PortA.0'a pulldown buton bağladığını varsaydım.
Buton'a bastığında 2 veya 3 saniye işlemini yapacak ve 10 saniyelik kısım çalışacaktır. Buton hala basılı ise üç port yanık, üç port sönük kalacak. Buton basılıp bırakıldıysa 10n saniyelik işlemi 1 defa yapacak ve normal çalışmasına devam edecektir.

Şemanı yüklersen diğer arkadaşlardan da bilgi alabilirsin.

Saygılar

#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6
unsigned long int i=0;
int1 izin=0;
/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{  

  setup_adc_ports(NO_ANALOGS); //ANALOG giriş yok
  setup_adc(ADC_OFF);  //ADC birimi devre dışı
  setup_comparator(NC_NC_NC_NC);// OPAMP birimi devre dışı 

  set_tris_a(0xff);// a portu giriş
  set_tris_b(0x00);// b portu çıkış
  output_b(0x00);
  
  while(TRUE)
  {

    if(input(pin_a0)!=1&&izin==0)
    {
      output_high(pin_b0);
      output_high(pin_b6);
      for(i=0;i<3000;i++)
      {
          if(input(pin_a0)==1)
            izin=1;
          delay_ms(1);
      }
    }
    if(input(pin_a0)!=1&&izin==0)
    {
      output_high(pin_b1);
      output_high(pin_b5);
      for(i=0;i<2000;i++)
      {
          if(input(pin_a0)==1)
            izin=1;
          delay_ms(1);
      }
      output_low(pin_b0);
      output_low(pin_b1);
      output_low(pin_b6);
      output_low(pin_b5);
      delay_ms(20);
    }
    if(input(pin_a0)!=1&&izin==0)
    {
      output_high(pin_b2);
      output_high(pin_b4);
      for(i=0;i<3000;i++)
      {
          if(input(pin_a0)==1)
            izin=1;
          delay_ms(1);
      }
    }
    if(input(pin_a0)!=1&&izin==0)
    {
      output_high(pin_b1);
      output_high(pin_b5);
      for(i=0;i<2000;i++)
      {
          if(input(pin_a0)==1)
            izin=1;
          delay_ms(1);
      }
      output_low(pin_b2);
      output_low(pin_b1);
      output_low(pin_b4);
      output_low(pin_b5);
      delay_ms(20);
    }
    if(izin==1)
    {
      output_high(pin_b3);
      delay_ms(500);
      output_low(pin_b3);
      delay_ms(500);
      
      output_high(pin_b4);
      output_high(pin_b2);
      output_high(pin_b0);
          
      output_low(pin_b6);
      output_low(pin_b1);
      output_low(pin_b5);
      
      delay_ms(10000);
      izin=0;
    }
  }
}
:1000000000308A001928000024308400831300087F
:10001000031918280130F800F701F70B0D28F80B29
:100020000C284A30F700F70B13281628800B0A28F3
:10003000080003081F398300A101A00122108316C4
:100040001F149F141F159F1107309C0083131F144A
:100050009F141F159F1183121F10073083169C00D9
:10006000050885000330F700F70B34281C088312BD
:100070000D13FF3083168500003086008312860141
:1000800005185B2822185B2806140617A101A00199
:1000900021080B3C031C5B28031D52282008B73C99
:1000A000031C5B28051822140130A4000420A00AB8
:1000B0000319A10A482805187D2822187D288614CE
:1000C0008616A101A0012108073C031C7628031D08
:1000D0006D282008CF3C031C762805182214013017
:1000E000A4000420A00A0319A10A632806108610A0
:1000F000061386121430A40004200518982822182C
:10010000982806150616A101A00121080B3C031C26
:100110009828031D8F282008B73C031C9828051831
:1001200022140130A4000420A00A0319A10A852882
:100130000518BA282218BA2886148616A101A0012B
:100140002108073C031CB328031DAA282008CF3C24
:10015000031CB328051822140130A4000420A00AAF
:100160000319A10AA028061186100612861214305F
:10017000A4000420221CDA2886150230A300FA30DD
:10018000A4000420A30BBF2886110230A300FA307C
:10019000A4000420A30BC728061606150614061390
:1001A000861086122830A300FA30A4000420A30B86
:0801B000D4282210402863004E
:02400E00393F38
:00000001FF
;PIC16F877A