Witam;
mam program, w którym używam kilku przerwań (timery, 4xUART).
Niestety, muszę kontrolować encoder o bardzo dużej ilości impulsów.
Wszystko działa prawidłowo, ale przy dużej prędkości obrotowej encodera, czasem procesor źle zinterpretuje dane i pojawi się bład w liczeniu impulsów.
Jak wiadono Encoder wysyła dwa przesunięte impulsy A i B. Problem w tym, że jeśli powstanie kolejka przerwań to zanim procesor wejdzie w procedurę obsługi przerwania dla INT0 (tu jest podpięty encoder), to w tym czasie stan tego drugiego kanału ulega zmianie i zamiast dodać procesor odejmie impuls.
Takie mam przypuszczenia.
Nie mogę zwiększyć czestotliwości takowania, bo mam na 14.74Mhz, a procesor to AMEGA 2560. Czyli max jest 16MHz.
I teraz pytanie - czy mógłbym odblokować w innych procedurach tylko to jedno przerwania od tego encodera , które byłoby bardzo krótkie (sprawdzenie stanu kanału B i ustawienie flagi)?
Czy to jest bezpiecznie?
pozdrawiam
mam program, w którym używam kilku przerwań (timery, 4xUART).
Niestety, muszę kontrolować encoder o bardzo dużej ilości impulsów.
Wszystko działa prawidłowo, ale przy dużej prędkości obrotowej encodera, czasem procesor źle zinterpretuje dane i pojawi się bład w liczeniu impulsów.
Jak wiadono Encoder wysyła dwa przesunięte impulsy A i B. Problem w tym, że jeśli powstanie kolejka przerwań to zanim procesor wejdzie w procedurę obsługi przerwania dla INT0 (tu jest podpięty encoder), to w tym czasie stan tego drugiego kanału ulega zmianie i zamiast dodać procesor odejmie impuls.
Takie mam przypuszczenia.
Nie mogę zwiększyć czestotliwości takowania, bo mam na 14.74Mhz, a procesor to AMEGA 2560. Czyli max jest 16MHz.
I teraz pytanie - czy mógłbym odblokować w innych procedurach tylko to jedno przerwania od tego encodera , które byłoby bardzo krótkie (sprawdzenie stanu kanału B i ustawienie flagi)?
Czy to jest bezpiecznie?
pozdrawiam