Muszę zweryfikować sygnał wejściowy PWM - obecność/wypełnienie, i w zależności od wyniku dalsze operacje.
Pytanie tyczy się czy robię to prawidłowo i czy są prostsze sposoby, jeżeli tak to czy mogę liczyć na podpowiedź.
W dotychczas budowanych układach robiłem to tak:
Sygnał wejściowy to PWM 100Hz z wypełnieniem 80% (8ms=1, 2ms=0) - jeżeli pojawi się taki sygnał to
wykonuję dalsze operacje, jeżeli pojawi się pojedynczy impuls (diagnostyka)
trwający 3ms nie podejmuję dalszych czynności.
Kod:
If PIND.1=1 AND A=0 THEN 'sprawdzam czy pojawia się sygnał wejściowy
A=1 'zmienna A służy do określenia stanu operacji
AL=0 'zmienna AL to licznik czasu, inkrementacja odbywa się
END IF 'w przerwaniu co 1ms
IF PIND.1=0 AND A=1 THEN A=0 'jeżeli sygnał jest zbyt krótki zeruję procedurę - A=0
If PIND.1=1 AND A=1 AND AL>4 THEN 'jeżeli sygnał wejściowy jest dłuższy od 6ms to uruchamiam
A=2 'dalsze procedury
PORTC.1=1 'włączam przykładowy kanał C.1
END IF
IF PIND.1=0 AND A=2 THEN 'sprawdzam czy nie zanika sygnał PWM
A=3
AL=0 'zeruję licznik AL
END IF
IF PIND.1=1 AND A=3 THEN A=2 'jeżeli występuje PWM wracam do poziomu A=2
IF PIND.1=0 AND A=3 AND AL>4 THEN 'jeżeli sygnał wejściowy na D.1=0 powyżej 6 ms
A=0
PORTC.1=0 'wyłączam kanał C.1
END IF
Mam nadzieję że jest to zrozumiałe i w miarę przejrzyste.
Do kontroli jednego wejścia z PWM wykorzystuję dwie zmienne i zaprzęgam przerwanie do inkrementacji
licznika AL. W sytuacji gdy mam pięć kanałów do obróbki to robi się 10 zmiennych do samej ich obsługi.
Czy jest jakiś prosty sposób na realizację takich operacji?