Strona 1 z 1

Enkoder z INT1 na INT0

: 28 mar 2025, 19:38
autor: alex
Pytanie do autora drugiego kodu z tego linku, napisanego pod przerwanie INT1:
https://bart-projects.pl/encoders.html

Czy chcąc użyć przerwania INT0 wystarczy zamienić wszystkie wystąpienia INT1 na INT0, czy konieczne jest również dokonanie zmian w kodzie ASM?

Z góry dziękuję ! Serdecznie pozdrawiam.
Alex

Re: Enkoder z INT1 na INT0

: 29 mar 2025, 6:00
autor: niveasoft
A nie szybciej sprawdzic samemu :D Tak sobie żartuję bo czasami odpowiedź przychodzi później.
Kod asm był wygenerowany przez program NoSave Tool do tego uzytego procesora. Chodzi o to że to kompilator Bascom uzył tych rejestrów w przerwaniu a ten mój program tylko je wylistował z kodu. Jeżeli z jakiegoś powodu kompilator uzyje innych rejestrów to wtedy klapa. Nalezy to zawsze sprawdzić przy uzycu NoSave Tool albo na piechotę w Miccrochip Studio. Można też nie używać dyrektywy Nosave i odłożyć wszystkie rejestry jak to robi Bascom standardowo - jesli program nie jest jakoś ściśle czasowo zależny.

Re: Enkoder z INT1 na INT0

: 29 mar 2025, 20:29
autor: alex
Sprawdziłem, zanim napisałem posta, niemniej jednak nie chciałem sugerować odpowiedzi. Na tę chwilę wygląda to tak, że ten konkretny kod działa tylko na przerwaniu pierwszym :(

Faktycznie, na płytce prototypowej miałem enkoder podłączony do tego przerwania (1) i działało całkiem fajnie. Przy projektowaniu PCB musiałem podłączyć enkoder do INT0, ponieważ INT1 został wykorzystany do komunikacji... i sprawa się skomplikowała :) szkoda pcb...

Jeśli nie sprawiałoby to zbytniego kłopotu, czy mógłbyś opublikować ten sam kod, ale uwzględniający zmianę na INT0 (przy zachowaniu wykorzystania INT1 do komunikacji) ?

Z góry dziękuję!

Resztę wyslalem PW (PM).

Re: Enkoder z INT1 na INT0

: 30 mar 2025, 16:25
autor: niveasoft
To chyba nieskomplikowane. Wystarczy w Bascom zaznaczyć INT1 i wcisnąć CTRL+R czyli replace i zamienić wszystkie wystąpienia INT1 na INT0.
Na samym końcu w przerwaniu prawdopodobnie trzeba zamienić "Encoder_a = 1" na "Encoder_b = 1"

Skoro juz masz PCB to trudno. Osobiście juz dawno tak enkodera nie obsługuję. Wolę ustawić przerwanie na "Change" albo użyć PCINT.
Taki kod to mnie jeszcze nie zawiódł -> viewtopic.php?f=13&t=360&p=2971&hilit=encoder+by#p2971