Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 lis 2024, o 11:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 30 gru 2015, o 07:48 
Offline
Nowy

Dołączył(a): 19 sty 2013
Posty: 22
Lokalizacja: Pruszcz Gdański
Pomógł: 0

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?



Ostatnio edytowano 5 sty 2016, o 09:35 przez Bras, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 11:55 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3203
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 90

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 12:12 
Offline
Nowy

Dołączył(a): 19 sty 2013
Posty: 22
Lokalizacja: Pruszcz Gdański
Pomógł: 0

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO