PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Đếm xung encoder cho 2 động cơ (http://www.picvietnam.com/forum/showthread.php?t=12421)

ElecTel 28-12-2011 06:14 PM

Đếm xung encoder cho 2 động cơ
 
Chào các anh ! em đang tìm hiểu điều khiển động cơ .... đọc tài liệu cũng nhiều .... Em có thắc mắc thế này : nhiều người sử dụng ngắt ngoài để đếm xung từ 1 encoder của 1 động cơ .... mà trong PIC16F877a thì chỉ có 1 chân B0 ... vậy khi sử dụng từ 2 động cơ muốn đọc xung từ 2 động cơ thì phải làm thế nào ???

daokhanhvimaru 28-12-2011 10:03 PM

Trích:

Nguyên văn bởi ElecTel (Post 52808)
Chào các anh ! em đang tìm hiểu điều khiển động cơ .... đọc tài liệu cũng nhiều .... Em có thắc mắc thế này : nhiều người sử dụng ngắt ngoài để đếm xung từ 1 encoder của 1 động cơ .... mà trong PIC16F877a thì chỉ có 1 chân B0 ... vậy khi sử dụng từ 2 động cơ muốn đọc xung từ 2 động cơ thì phải làm thế nào ???

ở Pic 16F877a chỉ có 1 chân ngắt ngoài theo cạnh nhưng cả cổng B có chế độ ngắt khi có sự thay đổi trên chân . Như vậy vậy có thể sử dụng ngắt cổng B khi có sự thay đổi nhưng chú ý 1 sự thay đổi chỉ ứng với T/2 không phải T như như ngắt ngoài .
chúc bạn thành công !

ElecTel 29-12-2011 01:54 AM

Trích:

Nguyên văn bởi daokhanhvimaru (Post 52814)
ở Pic 16F877a chỉ có 1 chân ngắt ngoài theo cạnh nhưng cả cổng B có chế độ ngắt khi có sự thay đổi trên chân . Như vậy vậy có thể sử dụng ngắt cổng B khi có sự thay đổi nhưng chú ý 1 sự thay đổi chỉ ứng với T/2 không phải T như như ngắt ngoài .
chúc bạn thành công !

Cảm ơn anh ! Đây là ý tưởng cho chương trình của em ...... rất mong ý kiến đánh giá của anh !

Code:

#byte portb=0x06
#byte intcon=0x000B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int ec1=0; int ec2=0;// Chuong trinh ngat
#int_RB void ngat_RB()
  {     if((RBIF)&&(RBIE))
        {
          {
            if(RB4==1)
      // // doc ec1
            {  
                if(ec1==255)
                ec1=0;

                ec1 ++;
              }
            }
        {
            if(RB5==1)
    ///// doc ec2
            {
                if(ec2==255)
                ec2=0;

                ec2 ++;
              }
            RBIF=0; //Xoa co ngat RB
            }
    }

Trong đoạn code trên dùng ngắt ngoài trên portB vậy lỡ khi 2 xung đồng thời tới trên 2 chân thì có ảnh hưởng gì tới việc đọc được xung ???
Em vẫn chưa hiểu về T với T/2 ..... em nghĩ ngắt ngoài thì khi nào có tác động ngoài thì ngắt mới hoặt động chứ nhỉ ???


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam