Thông báo

Collapse
No announcement yet.

Đọc ADC để điều chế xung, hiển thị tốc độ lên LED7

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Đọc ADC để điều chế xung, hiển thị tốc độ lên LED7

    em check mãi mà chả biết cái code này nó sai cái gì ? mấy bác kiểm tra giúp em với
    em cám ơn !

    Code:
    #include <16f877a.h>
    #include <def_877a.h>
    #fuses XT, NOWDT, NOPROTECT, NOLVP
    #device PIC16F877a*=16 ADC=8
    #use delay(clock=4000000)
    #use fast_io(C)
    #define  tr    RC5
    #define  ch    RC6
    #define  dv    RC7
    
    int a, tram , chuc , dvi , SL_ngat ;
    int16 tocdo ;
    int16 soxung ;
    const char maled[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
    #int_timer0
    void  tmr0_isr() 
    {
    SL_ngat++ ;
    set_timer0(0);
    }
    
    
    void hien_thi() 
       {
       // hien thi ra LCD 
       if(!bit_test(PIN_C5)) // hang chuc hien thi
          
         { output_high(PIN_C5);
          output_low(PIN_C6);
          portD=maled[chuc];
          output_high(PIN_C7);
          delay_ms(5);
          }
        
        else 
          {
          if ( !bit_test(PIN_C6) ) // hang don vi hien thi
            { output_high(pin_c6);
             output_low(dv);
             portD = maled[dvi];
             output_high(pin_c5);
             delay_ms(5);
            }       
                else              // hang tram hien thi
                   { output_high(pin_c7);
                    output_low(pin_c5);
                    portD= maled[tram];
                    output_high(pin_c6);
                    delay_ms(5);
                   }
          }
      
       }
       
    void main()
    {
     int value ; 
     int temp=get_timer0() ;
     int temp1 ;
     //a=input(pin_B1);
     // thiet lap vao ra//
     set_tris_c(0x00) ; 
     set_tris_a(0xff) ; 
     SET_TRIS_B(0x01) ; 
     set_tris_D(0x00);
     // Tinh so vong cua dong co
      
      soxung=(SL_ngat)*256 + temp ;
      (tocdo)=(soxung)/100 ;// 1 vong = 100 xung
      
      tram=tocdo/100;
      temp1=tocdo%100;
      chuc=temp1/10 ;
      dvi=temp1%10;
     
     // Thiet lap PWM//
    
       setup_timer_2(T2_DIV_BY_4,62,1);
       setup_ccp1(CCP_PWM);
       set_pwm1_duty(128) ;
       
     // thiet lap ADC
       setup_adc_ports(ALL_ANALOG) ;
       setup_adc(ADC_CLOCK_INTERNAL) ;
       set_adc_channel(0) ;
       delay_us(10);
     
     // cai dat timer0
       setup_timer_0(RTCC_ext_h_to_l);
     //
     
      output_high(pin_b1);
     a= 0; 
     tram=0 ;
     chuc=0 ;
     dvi=0 ;
     SL_ngat=0;
     output_low(tr);
     
     // cai dat ngat ngoai  
       enable_interrupts(INT_EXT);
       ext_int_edge(H_to_L);
       enable_interrupts(GLOBAL) ;
     
    
     while(1)
      {
      if(input(pin_b0)==0)
      {
       while(input(pin_b0)==0) ;
       
       
          if(a==0)
             {
             a=1;
             output_low(pin_b1);
                    // khi nhan B0 thi dao chieu dong co
             }
                else
                   {
                      output_high(pin_b1);
                      a=0;
    
                   }
    
       }      
      value = read_adc();
      delay_ms(5);
      set_pwm1_duty(value);
      
      hienthi();
      
      }
    
    }
    Attached Files

  • #2
    hiz, em check lỗi thì toàn là lỗi 28, 43 và 48 , trong manual của ccs không thấy nói thêm về mấy cái này, nên em pót lên đây nhờ các bác xem giúp. Các bác xem rồi, có nhận xét gì vui lòng cho em vài dòng. Cám ơn

    Comment


    • #3
      Bắt lỗi đê ê ê ê ê ê.............

      Từ trên xuống nhé.
      *****Line7,8,9
      Bạn khai báo 3 biến tr,ch,dv sai cấu trúc dẫn tới sai 1 loạt bên dưới do nó ko biết cái RC5,RC6,RC7 nó là cái gì.
      Phải là #bit tr = portC.5
      ....
      Nếu có lỗi phải tạo 1 file register và include vào chương trình.
      ***** Không có #int_timer0 mà chỉ có #int_rtcc. Trong main cũng chưa khai báo enable_interrupts(int_rtcc);
      ***** Else if(condition) chứ ko phải Else. Hơn nữa cấu trúc condition bị sai.
      ***** Không có portD=maled[dvi] mà là output_d(maled[dvi]);
      ***** Bạn không khai báo hàm hien_thi() mà đã gọi nó vào thì lỗi là đương nhiên.

      Comment


      • #4
        Nguyên văn bởi mrsalem Xem bài viết
        hiz, em check lỗi thì toàn là lỗi 28, 43 và 48 , trong manual của ccs không thấy nói thêm về mấy cái này, nên em pót lên đây nhờ các bác xem giúp. Các bác xem rồi, có nhận xét gì vui lòng cho em vài dòng. Cám ơn
        if(!bit_test(PIN_C5))
        bạn viết như vậy bị sai cú pháp.
        viết lại như sau:if(!input(PIN_C5)
        hoặc:if(!bit_test(PORTC,rc5))//portc đã được khai báo trong <def_877a.h>
        Last edited by tdm; 28-07-2011, 14:47.
        |

        Comment


        • #5
          Nguyên văn bởi duong_act Xem bài viết
          Bắt lỗi đê ê ê ê ê ê.............

          Từ trên xuống nhé.
          *****Line7,8,9
          Bạn khai báo 3 biến tr,ch,dv sai cấu trúc dẫn tới sai 1 loạt bên dưới do nó ko biết cái RC5,RC6,RC7 nó là cái gì.
          Phải là #bit tr = portC.5
          ....
          Nếu có lỗi phải tạo 1 file register và include vào chương trình.
          ***** Không có #int_timer0 mà chỉ có #int_rtcc. Trong main cũng chưa khai báo enable_interrupts(int_rtcc);
          ***** Else if(condition) chứ ko phải Else. Hơn nữa cấu trúc condition bị sai.
          ***** Không có portD=maled[dvi] mà là output_d(maled[dvi]);
          ***** Bạn không khai báo hàm hien_thi() mà đã gọi nó vào thì lỗi là đương nhiên.
          RC5,RC6,RC7,portD vẫn dùng được vì đã khai báo cái này rồi(<def_877a.h>)
          |

          Comment


          • #6
            hiz, sửa được hết mấy cái lỗi rồi các bác ak, nhưng mạch vẫn không chạy, em up file proteus lên các bác kiểm tra mạch em vẽ đã đc chưa nhé
            Code:
            #include <16F877a.h>
            #INCLUDE <DEF_877A.H>
            #device PIC16F877a*=16 ADC=8
            #fuses XT,NOWDT,NOPROTECT,NOLVP
            #use delay(clock=4000000)
            #use fast_io(b)
            #use fast_io(c)
            int maled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
            int a, tram , chuc , dvi , SL_ngat, n ;
            int16 sovong ;
            
            int tam, temp ;
            #int_EXT
            void  ngat_ngoai() 
            {
            if(a==0)
            {
            a=1;
            RB1=0;
               // khi nhan B0 thi dao chieu dong co
            }
            else
            {
               RB1=1;
               a=0;
            
            }
            }
            
            #int_timer0
            void  ngat_timer0() 
            {
            SL_ngat++ ;
            set_timer0(0);
            }
            
            void hien_thi() 
             {
               sovong=((SL_ngat/256)+ tam )/10 ;
               tram=sovong/100;
               temp=sovong%100;
               chuc=temp/10;
               dvi=temp%10;
               // hien thi ra led7 
               switch(n)
              {
               case 0:
                  {
                  RC5=0;
                  RC6=1;
                  RC7=1;
                  portD=maled[tram];
                  break;
                  n=1;
                  }
               case 1:
                  {
                  RC6=0;
                  RC7=1;
                  RC5=1;
                  portD=maled[chuc];
                  break;
                  n=2;
                  }
               
               case 2 :
                  {
                  RC7=0;
                  RC6=1;
                  RC5=1;
                  portD=maled[dvi];
                  break;
                  n=0;
                  }
              }
             }
            
            void main()
            {
             int8 value ; 
              
             // thiet lap vao ra//
             TRISC=0 ; 
             TRISA=0xff ; 
             TRISB=0X01 ; 
             TRISD=0;
             
             // Thiet lap PWM, tan so gan 4kHz//
            
               setup_timer_2(T2_DIV_BY_4,62,1);
               setup_ccp1(CCP_PWM);
               set_pwm1_duty(128);
               
             // thiet lap ADC
               setup_adc_ports(ALL_ANALOG) ;
               setup_adc(ADC_CLOCK_INTERNAL) ;
               set_adc_channel(0) ;
               delay_us(10);
            
             // cai dat timer0
            
             setup_timer_0(RTCC_ext_h_to_l);
            
             // thiet lap gia tri ban dau
             
             a= 0; 
             n=0;
             tram=0 ;
             chuc=0 ;
             dvi=0 ;
             SL_ngat=0;
             tam = get_timer0();
            
             // cai dat ngat ngoai
               enable_interrupts(INT_EXT);
               enable_interrupts(int_timer0);
               ext_int_edge(H_to_L);
               enable_interrupts(GLOBAL);
             // cai dat timer0
              
             
            while(1)
              {
              if(input(pin_b0)==0)
              {
               while(input(pin_b0)==0) 
               {;}
                delay_ms(5);
                  if(a==0)
                     {
                     a=1;
                     RB1=0;
                     }
                  else
                       {
                              RB1=1;
                              a=0;
            
                       }
            
               }      
              value = read_adc();
              delay_ms(5);
              set_pwm1_duty(value);
              hien_thi();
              
              }
            
            }

            mo phong.zip


            Comment

            Về tác giả

            Collapse

            mrsalem Tìm hiểu thêm về mrsalem

            Bài viết mới nhất

            Collapse

            Đang tải...
            X