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



Teraz jest 17 mar 2026, o 01:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 28 lis 2013, o 18:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 108
Pomógł: 0

W książce BB Mirka są przykłady jak sterować diodą na różne sposoby , ale zboczem narastającym , a jak sterować zboczem opadającym?. Jakieś wskazówki. Z góry dzięki i Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Mozesz przez przerwanie zewnetrzne reagujace na zbocze opadajace i w przerwaniu bawic sie ledem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 18:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 266
Lokalizacja: Szczecin
Pomógł: 9

Tak bardzo ogólnie:

Sprawdzasz stan wejścia w chwili T, zapamiętujesz go [Stan aktualny na wejściu]

Sprawdzasz stan wejścia w chwili T-Tp (Tp - czas próbkowania) [Stan jaki był na wejściu]

Załóżmy:
1- wejście naruszone
0- brak naruszenia

Jeżeli(Stan_w_chwili(T)==0 AND Stan_w_chwili(T-Tp)==0) Stan niski
Jeżeli(Stan_w_chwili(T)==1 AND Stan_w_chwili(T-Tp)==0) Zbocze narastające
Jeżeli(Stan_w_chwili(T)==1 AND Stan_w_chwili(T-Tp)==1) Stan wysoki
Jeżeli(Stan_w_chwili(T)==0 AND Stan_w_chwili(T-Tp)==1) Zbocze opadające

Każde wejście może mieć 4 stany (Stan niski, zbocze narastające, stan wysoki, zbocze opadające) Każdy z tych stanów można oprogramować.

Podczas badania aktualnego stanu wejścia wprowadź "mały" Timer programowy aby wyeliminować drgania styków.

_________________
www.gryfsmart.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 20:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 108
Pomógł: 0

Zaraz , zaraz czy ja dobrze zrozumiałem , tworze funkcję zmiany stanu wejścia z dwoma argumentami jeden to stan aktualny , drugi stan jaki był przed naciśnięciem klawisza a w ciele funkcji załatwić sprawe instrukcjami warunkowymi if i else , a Tp zrealizować na Timer0 .Jeżeli się mylę to mnie popraw bardzo proszę . Dzieki z góry.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 21:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 266
Lokalizacja: Szczecin
Pomógł: 9

Na podstawie Mirkowych poradników i swoich przemyśleń napisałem taki programik. Jest on wycięty z owiele wiekszego wiec może być coś nie tak :) Wszystko miałem w różnych plikach ale w skrócie powinno to tak chodzić.

Jest struktura która opisuje właściwości wejścia:
Typ wejścia: NO/NC
Czas krótkiego naciśnięcia:xxx[ms]
Czas długiego naciśnięcia: xxx[ms]

Podczas wywołania krótkiego naciśnięcia jest wywoływana jedna akcja, Jak naciśniesz długo to inna akcja i krótkie naciśnięcie jest pomijane.

Jezeli wejscie jest typu NO to stan aktywny jest zwarciem wejscia, jezeli wejscie jest typu NC to stanem aktywnym jest rozwarcie wejscia.

Funkcja rozpoznaje zbocza narastające i opadające :) Prześledź listing a na pewno znadzjdziesz odpowiedz na swoje pytanie :)

Funkcje nie są za bardzo elastyczne tak jak to robi zawsze Mirek albo bardzij doswiadczeni koledzy :) Ale wszystko działa :)

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


Funkcja opisująca akcje związane z przyciskiem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Możesz zmodygikować funkcję i użyć callback, wówczas byś wpisywał wskaźnik do funkcji...

Na listingu akcję ze zboczem opadającym masz w mijscu, gdzie jest opis:
//ZBOCZE OPADAJACE - koniec "stanu aktywnego" wejścia NC

------------------------ [ Dodano po: 6 minutach ]

Rysunki pomagające zrozumieć kod :)

Obrazek


Obrazek

Obrazek

------------------------ [ Dodano po: 15 minutach ]

AndreAs napisał(a):
Zaraz , zaraz czy ja dobrze zrozumiałem , tworze funkcję zmiany stanu wejścia z dwoma argumentami jeden to stan aktualny , drugi stan jaki był przed naciśnięciem klawisza a w ciele funkcji załatwić sprawe instrukcjami warunkowymi if i else , a Tp zrealizować na Timer0 .Jeżeli się mylę to mnie popraw bardzo proszę . Dzieki z góry.


Dobrze mówisz :D

Poniżej przedstawiem pseudokod dla wejścia Typu NO (Normal Open).

Jeżeli przycisk jest naciśnięty i zostanie puszczony to funkcja zwróci 1, w przeciwnym wypadku będzie zwracała 0;


FunkcjaZmianyStanu()
{
Stan_aktualny= stan_chwila(T);
Stan_wczesnijszy=Stan_aktualny;

if (Stan_aktualny==0 AND Stan_wczesnijszy==1) return 1; else return 0;
}



while()
{
If( FunkcjaZmianyStanu() ) DIODA_TOG; // Jeżeli zbocze opadające zmień stan diody na przeciwny
}

------------------------ [ Dodano po: 19 minutach ]

W tym pseudokodzie nie uwzględniłem drgań styków. Masz to bardzo dobrze opisane w Mirkowych poradnikach. Muszisz powprowadzać małe Timerki.

Próbkowanie wejść możesz zrobić w przerwaniach od Timera jest to lepsze rozwiązania ponieważ czasy próbkowania będą stałe niezależne od pętli głównej while i jej obiegów.

_________________
www.gryfsmart.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 108
Pomógł: 0

Kurcze stary to bardziej skomplikowane niż myslałem , ale spokojnie troche czasu i to rozgryze . A na razie wielkie dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 266
Lokalizacja: Szczecin
Pomógł: 9

To nie jest skomplikowane, tylko ja za bardzo naplątałem!!! To jest wycinek z większego programu i dlatego jest nie czytelny, niektóre rzeczy są do niczego nie potrzebne:)

Najważniejsze w tym wszystkim jest to:
Próbkujesz wejście co określony czas np Tp. Robisz to albo na timerze lub w pętli while(). No i badasz jaki był stan wcześnijszy a jaki jest obecnie i na tej podstawie stwierdzasz, czy jest to zbocze opadające czy narastające.

Musisz jeszcze wyeliminować drgania styków. Przykładowa eliminacja. Jeżeli próbkowanie jest "częste" to badasz np 3 próbki. Jeżeli każda z tych próbek jest taka sama to masz np stan wysoki lub niski. Jeżeli chodz jedna z próbek ma inny stan to znaczy, że próbkowanie odbyło się podczas zmiany stanu. Taki mały buforek :)


Autor postu otrzymał pochwałę

_________________
www.gryfsmart.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2013, o 22:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 lis 2013
Posty: 108
Pomógł: 0

Wiem widzę , że to są fragmenty jakiegoś programu , ważne że dają wyobrażenie i od czegoś można zacząć naukę .Jeszcze raz dzięki.



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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 397 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO