PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 30-08-2008, 12:29 AM   #11
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
Đo tốc độ phản hồi về Lcd

Chào các bác.Có chút vướng mắc,các bác giúp em với.
Mục đích:Điều khiển động cơ phản hồi tốc độ về LCD
Thực hiện:Điều khiển được động cơ nhưng chưa phản hồi đc.
Em không biết sau mỗi lần gọi ngắt có cần phải để 1 vòng while() để đợi ngắt không.
Em dùng 16F877A,bây giờ điều khiển 1 kênh đã phải cần:TIMER2-PWM,TIMER 0:Đếm xung,TIMER1:Đếm thời gian,dùng để tính toán vận tốc.
Vậy nếu em dùng động cơ thứ 2 phải làm thế nào,có thuật toán nào ko ạ.
Có đoạn code và chương trình mô phỏng,các bác xem cho em:
Code:
#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=8000000)
#include <lcd_lib_4bit.c>
int16 cnt,cnt2,xung,v;
int8 a,b,c;
#int_TIMER0
void  TIMER0_isr(void) //TIMER0 dem xung ve
{
set_timer0(255);
if(tmr0if==1)
 {
 cnt++;
 tmr0if=0;
 }
}
#int_TIMER1           //TIMER1 dem tgian,tinh van toc
void  TIMER1_isr(void) 
 {
 set_timer1(5565);
 if(tmr1if==1)
   {
    xung=get_timer0()*4;   
    v=(xung*60)/((100*60*0.001));
     tmr1if=0;  
  }
 }
void Lcd()
{
while(1)
   {
   a=(int)v/100;
   b=(int)(v-a*100)/10;
   c=(int)v%10;
   LCD_putcmd(0xC0);
   LCD_putchar("xung encoder");
   LCD_putcmd(0x80);
   LCD_putchar(a+48);
   LCD_putcmd(0x81);
   LCD_putchar(b+48);
    LCD_putcmd(0x82);
    LCD_putchar(c+48);
   }   
}
void Ngat()
{
   set_timer0(255);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4);
   enable_interrupts(INT_TIMER0);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
   set_timer1(5565);
   enable_interrupts(INT_TIMER1);
  enable_interrupts(GLOBAL);
  }
void PWM()
{
   setup_timer_2(T2_DIV_BY_16,255,1);
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   set_pwm1_duty(1000);
   set_pwm2_duty(1022);  
}
void main()
{
   set_tris_d(0);
   set_tris_a(0xff);    //Cho tin hieu di vao RA4
   set_tris_c(0);
   LCD_Init();
   PWM();
   Ngat();
   Lcd();
   delay_ms(100);
}
Hình Kèm Theo
File Type: jpg PWM.JPG (265.2 KB, 32 lần tải)

thay đổi nội dung bởi: popeye_ts22, 31-08-2008 lúc 12:56 AM. Lý do: Edit
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 08:23 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam