(02-09-2018, 12:36)kaczakat napisał(a): Dla Arduino UNO są tylko na pinach 2 i 3. Jak Pan może polecić jakąś "arduinową" funkcję/bibliotekę do PCINT to proszę od razu wrzucać i opisać jakie są ograniczenia, bo to nie jest taki sam mechanizm.
Gotowej biblioteki nie znam, nie będę szukał, bo dla mnie praktycznie wszystko co Arduinowe jest złe. Zresztą, po co biblioteka dla kilu linijek kodu? Mogę dać gotowce na "normalne" AVR, Mega328 nie używam, bo prawie do niczego sensownego się nie nadaje. Podążając za nota katalogową:
W PCICR ustawiamy zezwolenie na przerwania od grupy GPIO (PCIE2, PCIE1, PCIE0)
W PCMSK0, PCMSK1, PCMSK2 ustawiamy maskę GPIO, które mają wywołać przerwanie.
Deklarujemy wektor przerwania
Kod:
ISR( PCINT0_vect )
{
}
i/lub PCINT1_vect, PCINT2_vect
Przerwanie takie reaguje na oba zbocza i jeśli jest więcej niz jedno GPIO trzeba programowo określić, które wejscie wywołało przerwanie ewentualnie, które zbocze.
Ot i cała filozofia. Używałem tego bardzo często, naturalnie należy zapomnieć (jeśli chcemy określać zbocze czy nr wejścia a impuls przerwania jest krótki) o zawieszaniu przerwań na zbyt długi czas (jak to robi "genialna" biblioteki onewire i podobne, jakby nie można do tego użyć USART).