Cần giúp Sự khác nhau giữa ngắt INT và PCINT của atmega32

Thảo luận trong 'Họ AVR'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

Moderators: mta_cdt
  1. co_dien_tu

    co_dien_tu Học sinh trung cấp

    Tham gia ngày:
    5/7/14
    Bài viết:
    52
    Đã được thích:
    6
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Nghề nghiệp:
    Student
    Nơi ở:
    Ha Noi
    Như mình đã nêu, vấn đề ở đây mình muốn làm rõ sự khác nhau giữa 2 ngắt của atmega32
    Ngắt INT thì mình đã biết cách sử dụng, nhưng còn ngắt PCINT(pin chanel int) mình thấy nó không giống INT
    Mong mọi người giúp mình nha!! &[]
     
  2. Minh Nghi

    Minh Nghi Học sinh trung cấp

    Tham gia ngày:
    16/2/15
    Bài viết:
    32
    Đã được thích:
    13
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Xin trích dẫn từ datasheet bằng tiếng anh: "The External Interrupts are triggered by the INT0 and INT1 pins or any of the PCINT23...0 pins. Observe that, if enabled, the interrupts will trigger even if the INT0 and INT1 or PCINT23...0 pins are configured as outputs. This feature provides a way of generating a software interrupt. The pin change interrupt PCI2 will trigger if any enabled PCINT[23:16] pin toggles. The pin change interrupt PCI1 will trigger if any enabled PCINT[14:8] pin toggles. The pin change interrupt PCI0 will trigger if any enabled PCINT[7:0] pin toggles. The PCMSK2, PCMSK1 and PCMSK0 Registers control which pins contribute to the pin change interrupts. Pin change interrupts on PCINT23...0 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode. The External Interrupts can be triggered by a falling or rising edge or a low level. This is set up as indicated in the specification for the External Interrupt Control Registers – EICRA (INT2:0). When the external interrupt is enabled and is configured as level triggered, the interrupt will trigger as long as the pin is held low. Low level interrupts and the edge interrupt on INT2:0 are detected asynchronously. " Sau đây là kết quả từ google dịch, chịu khó suy nghĩ một chút ta cũng có thể hiểu : Các ngắt ngoài được kích hoạt bởi các chân INT0 và INT1 hoặc bất kỳ của các PCINT23 ... 0 chân. Quan sát rằng, nếu được kích hoạt, các ngắt sẽ kích hoạt ngay cả khi INT0 và INT1 hoặc PCINT23 ... 0 chân được cấu hình như là kết quả đầu ra. Tính năng này cung cấp một cách để tạo ra một phần mềm gián đoạn. Sự thay đổi pin ngắt PCI2 sẽ kích hoạt nếu có kích hoạt PCINT [23:16] pin Toggles. Sự thay đổi pin ngắt PCI1 sẽ kích hoạt nếu có PCINT kích hoạt [14: 8] Toggles pin. Sự thay đổi pin ngắt PCI0 sẽ kích hoạt nếu có PCINT kích hoạt [7: 0] Toggles pin. Các PCMSK2, PCMSK1 và PCMSK0 Đăng ký kiểm soát mà ghim đóng góp vào sự ngắt thay đổi pin. Ngắt thay đổi pin trên PCINT23 ... 0 được phát hiện không đồng bộ. Điều này ngụ ý rằng các ngắt có thể được sử dụng để đánh thức phần còn từ chế độ ngủ khác với chế độ Idle. Các ngắt ngoài có thể được kích hoạt bởi một cạnh rơi xuống hoặc tăng hoặc một mức độ thấp. Đây là thiết lập như được chỉ ra trong các đặc điểm kỹ thuật cho các ngắt ngoài điều khiển Đăng ký - EICRA (INT2: 0). Khi ngắt bên ngoài được kích hoạt và được cấu hình như là mức độ kích
     
    co_dien_tu thích bài này.
  3. co_dien_tu

    co_dien_tu Học sinh trung cấp

    Tham gia ngày:
    5/7/14
    Bài viết:
    52
    Đã được thích:
    6
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Nghề nghiệp:
    Student
    Nơi ở:
    Ha Noi
    Đây là google dịch ak bạn, mình vẫn chưa hiểu nó khác PCINT khác với INT ở chỗ nào kia
    Khi dùng ngắt PCINT để đếm sự kiện mình thấy nó có đến 2 lần ngắt khi có 1 xung vào chứ không phải là 1 như ngắt INT, bạn có cách nào sử dụng PCINT đơn giản như INT không,thank!
     
  4. sulerhy

    sulerhy Học sinh phổ thông

    Tham gia ngày:
    13/12/14
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Theo kiến thức của mình, thì INT là ngắt ngoài thông thường mình hay dùng, hầu hết các bạn đều biết. Còn PCINT có thể được điều khiển bằng nhiều pin trên ATmega, nhưng lệnh ngắt thì ra một lệnh ngắt thôi. Ví dụ trên Atmega328, có rất nhiều pin PCINT0,1,2,3,4,5.... nhưng nếu bạn kích hoạt tất cả các PCINT này bằng thanh ghi PCICR và PCMSK0, thì ngắt ISR(PCINT0_vect) xảy ra bất cứ khi nào các pin PCINT thay đổi trạng thái. Nếu bạn muốn ngắt này hoạt động như các ngắt INT thì bạn nên lưu giá trị trước của nó vào,để mình biết là lần sau là sườn lên hay xuống. hi vọng bạn sẽ hiểu :) , kiến thức mình còn hạn hẹp mong ae chỉ bảo.
     
  5. mta_cdt

    mta_cdt Super Moderator Staff Member

    Tham gia ngày:
    10/8/12
    Bài viết:
    2,905
    Đã được thích:
    3,591
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Theo mình hiểu nó thế này INT là ngắt ngoài bạn có thể điều khiển dùng sườn lên, sườn xuống hoặc là cả lên cả xuống hoặc là mức. Còn PCINT là ngắt được kích hoạt do thay đổi mức tín hiệu trên bất kỳ 1 chân nào của PORT. Là bit 7 đến bit 0 thì bất kỳ thay đổi nào đều có thể gây ra cùng 1 sự kiện ngắt.
     
    mbedyeuthichdientu thích bài này.
  6. eva

    eva Kỹ sư

    Tham gia ngày:
    5/2/13
    Bài viết:
    393
    Đã được thích:
    442
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Nó tương tự như ngắt ngoài và ngắt onchange của PIC thôi ... ngắt ngoài thì có thể bắt sườn xung lên xuống, ngắt onchange thì cứ khi pin đó thay đổi mức logic là nó nhảy vào ngắt ... do đó khi dùng ngắt on change để không bị loạn thì hay cần thêm cờ nhớ hoặc kiểm tra mức logic trên chính chân ấy để xử lý.
     
    mbedyeuthichdientu thích bài này.
  7. longma

    longma Kỹ sư Banned

    Tham gia ngày:
    29/9/13
    Bài viết:
    242
    Đã được thích:
    171
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Khi xung vào thì chân PCint thay đổi trạng thái 2 lần, 0-1----1-0(toggle) nên nó nhảy ngắt 2 lần.
    Chắc không phải ai điên mà làm thêm pCint khi đã có int. Với ứng dụng như đếm sự kiện thì ngắt int cũng đủ rồi.
    Nếu cần xem sự kiện đó diễn ra trong bao lâu và cần bắt ở nhiều vị trí (giăng lưới) có thể xảy ra ngắt thì nên dùng Pcint. Có thể thích hợp cho việc tính tốc độ, tần số xảy ra sự kiện. :-) Quá tốt.
     
Moderators: mta_cdt

Chia sẻ trang này