18 Ocak 2012 Çarşamba

PIC16f877 motor hız göstergesi lcd encoder PIC C

Posted by Unknown On 22:20 1 comment


encoder-picc

Projenin Dosyaları isis simülasyon ve pic c dosyaları (.cod .c .LST .hex vb.) encoder-lcd-picc Emeği geçen Kişilere Teşekkürler

PIC16F877 Mikrokontrolör ile motor hızını lcd de gösteren encoder devresi

Program ve devre hakkında açıklamalar

Projenin akış şeması iki bölümden meydana gelmektedir. Bunlar; ana programın akış şeması ve kesme rutini akış şemasıdır.

Ana programda PORTA ve PORTB yönleri tanımlanır. Daha sonra program sonsuz bir döngüye girer ve enkoderden puls gelmesi beklenir. Enkoderden her puls geldiğinde “sayım” değişkeni bir arttırılır.

Kesme rutinine her 66 ms de bir gidilir. Programın başlangıcın da yine LCD hazırlanır. Daha sonra her 66 ms de bir motorun hızı hesaplanır ve akrana yazdırılır. Yine programımızda ADC kullanıldığı için motorun hızı PWM ile ayarlanır. Akış şemasında da zaten PWM belirtilmiştir.

Programın Akış Åžeması

encoder-akis-diagramlari

Devre Åžeması

motor-hizini-lcd-de-gosteren-encoder-devresi

Test görüntüleri

lcd-konum-hiz encoder-test picc-encoder-devresi

PIC C Programı


   #include <16f877.h>
   #fuses XT,NOWDT,NOPROTECT
   #use delay(clock=4000000)
   #include
   #include
   #BIT T0IF = 0x0B.2

   int sayac,artan;
   long hiz,konum;
   int16 value;

   #INT_rtcc
   clock_isr()
   {
      if(T0IF)
      {
         artan=0;
         sayac=sayac+1;

         if(sayac==15)
         {
            hiz=get_timer1();
            hiz=hiz*1.4;

            lcd_gotoxy(0,1);
            printf(lcd_putc,"  HIZ   :%4LU d/d  ",hiz);

            sayac=0;
            artan=get_timer1()%15;
            set_timer1(0);
         }
      }
   }

   void main()
   {
      konum=0;
      artan=0;
      hiz=0;
      sayac=0;

      enable_interrupts(GLOBAL);
      enable_interrupts(INT_RTCC);
      set_timer0(0);
      setup_timer_0(RTCC_DIV_256);
      set_timer1(0);
      setup_timer_1(T1_EXTERNAL);
      ext_int_edge( 1,H_TO_L );

      lcd_init();

      setup_timer_2(T2_DIV_BY_4, 1023, 1);
      setup_ccp1(CCP_PWM);
      setup_port_a(ALL_ANALOG);
      setup_adc(adc_clock_internal);
      set_adc_channel(0);

      for(;;)
      {
         value=read_adc();
         value=value*4;
         set_pwm1_duty(value);

         konum=(artan+get_timer1())%15;
         konum=24*konum;
         lcd_gotoxy(0,0);
         printf(lcd_putc,"  KONUM : %3LU der  ",konum);

      }
   }

1 yorum:

bu Elektirik işindede kod yazıldıgını bilmiyordum teşekkürler.

Yorum Gönder