Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ican43 - 02 Nisan 2018, 13:01:15

Başlık: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: ican43 - 02 Nisan 2018, 13:01:15
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;
  }
}
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: bulut_01 - 02 Nisan 2018, 13:17:08
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.
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: mehmet - 02 Nisan 2018, 13:48:53
Akış diyagramı çalışınız.
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: 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...
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: kudretuzuner - 02 Nisan 2018, 17:45:57
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.
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: ican43 - 03 Nisan 2018, 12:05:04
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.
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: silver_wolf - 05 Nisan 2018, 21:28:14
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
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: M.Salim GÜLLÜCE - 06 Nisan 2018, 14:43:53
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 :)
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: fide - 06 Nisan 2018, 22:57:09
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
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: ican43 - 10 Nisan 2018, 12:25:11
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.
Başlık: Ynt: İSİS İLE BOARD AYNI ÇALIŞMIYOR
Gönderen: silver_wolf - 10 Nisan 2018, 18:57:40
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