11 Haziran 2020 Perşembe

ccs c comparator örnek uygulama

Pic programlama ccs c comparator örnek

#include<16f628a.h>
#fuses intrc_io,nowdt,nomclr
#use delay(clock=4m)

void main(void)
{
set_tris_a(0xff);
set_tris_b(0x00);

setup_comparator(A0_A3_A1_A2);

while(true)
{

if(C1OUT ==1)
{
output_high(pin_b1);
}
if(C1OUT == 0)
{
output_low(pin_b1);
}

if(C2OUT ==1)
{
output_high(pin_b2);
}
if(C2OUT == 0)
{
output_low(pin_b2);
}
}
}




9 yorum:

  1. Kayan sinyal animasyonu yapmak istiyorum yazılımı kolay gibi duruyor ama sorun devre bağlantısı.Tek far için misal 20 LED diğer far için 20 led desek toplamda 12f683 ile 40 ledi nasıl kontrol edebilirim.16f877a bile olsa 40 tane çıkışı yok sonuçta.Burda çoklama gibi bir şey yapmak gerek ama onu nasıl yapabiliriz.Yalnız ledler grup olarak değil tek tek kontrolü olmasını istiyorum yani çıkışa transistor baglayip tek kanaldan 3 4 led kontrol etmek istemiyorum bu mümkün mü acaba?

    YanıtlaSil
    Yanıtlar
    1. https://www.sifirzero.com/2020/05/pic-programlama-ccs-c-5-ucla-8-led.html?m=0. Bu örnege bakarak gelistirebilirsiniz

      Sil
    2. Bu yorum bir blog yöneticisi tarafından silindi.

      Sil
  2. Interrupt araştırdım ama hangisinin uygun olduğunu bulamadım.MCLR ile kesme yapmak istiyorum bu mümkün mü yoksa ill denetleyicinin tıme 0 ınt bacağından mı yapmam gerekiyor?

    YanıtlaSil
  3. Mclr ucu denetliyicilerin reset ucudur kesme yapmaz. Wdt kesmesine bak istersen

    YanıtlaSil
  4. Araştırdım ama PIC'i resetlemeye yarıyormuş benim isteğim alttaki programda işlem bitmesini beklemeden butona 2. kez bastığımda diğer programa geçmesini sağlamak.While döngüsünde yazacağım programdan döngü sonsuz olduğu için butona kaç kere basarsam basayım diğer programa geçmiyor bunun için uygun kesme wdt midir yoksa başka bir kesme mi?

    #include<12f683.H>
    #fuses intrc_io,nomclr,nowdt,noprotect
    #use delay(clock=4m)



    void main()
    {
    set_tris_a(0x00);
    output_a(0x00);
    #define LED pin_a0
    #define LED2 pin_a2
    #define LED3 pin_a4

    int x=0;

    while(1)
    {

    if(input(pin_a3)==1)
    {
    x++;

    if(x==1)
    {
    output_high(LED);
    delay_ms(1500);
    output_low(LED);
    }

    else if(x==2)
    {
    output_high(LED2);
    delay_ms(1500);
    output_low(LED2);
    }

    else if(x==3)
    {
    output_high(LED3);
    delay_ms(1500);
    output_low(LED3);
    }

    }
    }
    }

    YanıtlaSil
    Yanıtlar
    1. uzun basılı tutarmısın.
      #include <12f683.h>
      #fuses NOWDT,INTRC_IO,NOMCLR,BROWNOUT
      #use delay (clock=4000000)
      //#use fast_io(a)

      int x=0;

      void main ()
      {
      set_tris_a(0x00);
      output_a(0x00);

      while(true)
      {
      if(input(pin_a3))
      {
      delay_ms(30);
      x++;
      while (input(pin_a3));
      }

      if(x==1)
      {

      output_high(pin_a0);//ileri
      delay_ms(100);
      output_low(pin_a0);//ileri
      output_high(pin_a1);
      delay_ms(100);
      output_low(pin_a1);
      output_high(pin_a2);
      delay_ms(100);
      output_low(pin_a2);
      output_high(pin_a4);
      delay_ms(100);
      output_low(pin_a4);
      output_high(pin_a5);
      delay_ms(100);
      output_low(pin_a5);


      output_high(pin_a5);//geri
      delay_ms(100);
      output_low(pin_a5);
      output_high(pin_a4);
      delay_ms(100);

      output_high(pin_a4);
      delay_ms(100);
      output_low(pin_a4);
      output_high(pin_a2);
      delay_ms(100);
      output_low(pin_a2);
      output_high(pin_a1);
      delay_ms(100);
      output_low(pin_a1);
      }

      if(x==2)
      {
      output_high(pin_a0);//ileri
      delay_ms(100);
      output_low(pin_a0);//ileri
      output_high(pin_a1);
      delay_ms(100);
      output_low(pin_a1);
      }

      }
      x=0;
      }

      Sil
    2. Deney bordunda deneyemedim şuan ama proteusta denedim evet basılı tutunca değişiyor.Yazılımı anlamaya çalışıp kendi istediğim şekilde düzenlemeye çalışacağım, burada hangi kesmeyi kullandınız? İlgilendiğiniz için teşekkür ederim.

      Sil

Her yorum bilgidir. Araştırmaya devam...