Generator przerwań PCINT Arduino tworzy kod Pin Change Interrupt dla wybranych pinów Arduino UNO, Nano oraz Mega 2560. Wybierz płytkę i wejścia, a narzędzie skonfiguruje rejestry PCICR, PCMSK oraz odpowiednie funkcje ISR.
PCINT reaguje na każdą zmianę stanu pinu — zarówno LOW → HIGH, jak i HIGH → LOW — i pozwala obsługiwać więcej wejść niż standardowe attachInterrupt().
Szybki generator PCINT:
Wybierz płytkę i piny Arduino, dla których chcesz włączyć przerwanie Pin Change Interrupt.
Zaznacz co najmniej jeden pin, aby wygenerować kod PCINT.
Jak używać generatora PCINT?
- Wybierz Arduino UNO/Nano lub Arduino Mega 2560.
- Zaznacz wszystkie piny, których zmianę ma wykrywać mikrokontroler.
- Opcjonalnie włącz inicjalizację portu szeregowego. Na UNO piny D0 i D1 są jednocześnie używane przez UART.
- Skopiuj wygenerowany kod do Arduino IDE i wpisz własną, możliwie krótką obsługę zdarzenia w funkcji ISR.
Co to jest przerwanie PCINT?
PCINT, czyli Pin Change Interrupt, jest sprzętowym przerwaniem wywoływanym przez zmianę poziomu logicznego na pinie. W ATmega328P wejścia są podzielone na trzy grupy. Każda grupa ma wspólny wektor przerwania, dlatego program powinien porównać bieżący stan portu z poprzednim i ustalić, który pin się zmienił.
Piny PCINT w Arduino UNO i Nano
| Piny Arduino | Port AVR | Grupa | Wektor ISR |
|---|---|---|---|
| D8–D13 | PORTB | PCINT0–5 | PCINT0_vect |
| A0–A5 | PORTC | PCINT8–13 | PCINT1_vect |
| D0–D7 | PORTD | PCINT16–23 | PCINT2_vect |
Na Arduino UNO i klasycznym Nano z ATmega328P generator pozwala wybrać wszystkie wyprowadzone piny cyfrowe D0–D13 oraz analogowe A0–A5. Wejścia analogowe mogą pełnić także funkcję cyfrową.
PCINT a attachInterrupt() — czym się różnią?
| Cecha | PCINT | attachInterrupt() |
|---|---|---|
| Dostępne piny UNO | D0–D13 i A0–A5 | D2 i D3 |
| Rodzaj wyzwalania | Każda zmiana stanu | LOW, CHANGE, RISING albo FALLING |
| Wektory | Wspólne dla grup pinów | Osobny wektor dla INT0 i INT1 |
| Poziom obsługi | Bezpośrednia konfiguracja rejestrów AVR | Prostsza funkcja Arduino |
Jak bezpiecznie pisać kod ISR?
- W funkcji ISR wykonuj tylko krótkie operacje, na przykład zapisz stan lub ustaw flagę.
- Zmienne współdzielone między ISR i
loop()oznaczaj jakovolatile. - Nie używaj w ISR funkcji
delay()i unikaj wysyłania długich komunikatów przez Serial. - Dla przycisków uwzględnij drgania styków. Jedno fizyczne naciśnięcie może spowodować kilka zmian stanu.
- Gdy kilka pinów należy do tego samego wektora, ustal źródło przerwania przez porównanie poprzedniego i bieżącego stanu portu.
Kiedy warto użyć PCINT?
PCINT przydaje się do klawiatur z wieloma przyciskami, enkoderów, liczników impulsów o umiarkowanej częstotliwości oraz wybudzania mikrokontrolera po zmianie stanu wejścia. Jeśli potrzebujesz cyklicznego zdarzenia niezależnego od pinów, użyj sprzętowego przerwania timera Arduino.
Najczęściej zadawane pytania
Czy PCINT działa na każdym pinie Arduino UNO?
Na UNO z ATmega328P funkcję PCINT mają wszystkie wyprowadzone piny D0–D13 oraz A0–A5. Należą jednak do trzech wspólnych grup przerwań.
Czy PCINT wykrywa zbocze narastające i opadające?
Tak. Sprzęt wywołuje przerwanie po każdej zmianie. Kierunek zmiany trzeba rozpoznać w kodzie.
Dlaczego przycisk wywołuje kilka przerwań?
Najczęściej odpowiadają za to drgania styków. Zastosuj eliminację drgań programową albo sprzętową.
Powiązane materiały
- Klawiatura obsługiwana przez PCINT — praktyczny przykład kilku przycisków.
- Arduino UNO pinout — funkcje wszystkich pinów i grupy przerwań.
- Generator przerwań zegara Arduino — cykliczne zdarzenia z timerów sprzętowych.
- Generatory i kalkulatory Arduino — wszystkie narzędzia online.
Źródła techniczne: dokumentacja ATmega328P i ATmega2560 firmy Microchip.
Generator przerwań Arduino w praktyce – przykład wykorzystania:
Klawiatura na pcint