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

            • mèomướp
              Trả lời cho Sửa bộ nguồn DC 60V 45A
              bởi mèomướp
              Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
              hôm nay, 13:11
            • tuyennhan
              Trả lời cho Sửa bộ nguồn DC 60V 45A
              bởi tuyennhan
              Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
              hôm nay, 09:25
            • tuyennhan
              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
              bởi tuyennhan
              Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
              Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
              hôm nay, 09:10
            • Ng.Phuong.5
              Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
              bởi Ng.Phuong.5
              Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
              Mấy con...
              Hôm qua, 19:44
            • viettinh
              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
              bởi viettinh
              Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
              Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
              Hôm qua, 18:12
            • nguyendinhvan
              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
              bởi nguyendinhvan
              Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
              Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
              Cách đơn giản...
              Hôm qua, 00:04
            • mèomướp
              Trả lời cho Sửa bộ nguồn DC 60V 45A
              bởi mèomướp
              Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
              08-01-2025, 19:02
            • tuyennhan
              Trả lời cho Sửa bộ nguồn DC 60V 45A
              bởi tuyennhan
              Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
              08-01-2025, 15:43
            • tuyennhan
              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
              bởi tuyennhan
              Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
              08-01-2025, 15:28
            • mèomướp
              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
              bởi mèomướp
              Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
              08-01-2025, 11:44
            Đang tải...
            X