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



Teraz jest 3 kwi 2026, o 04:34


Strefa czasowa: UTC + 1





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

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Witam wszystkich
Przy pomocy niebieskiej ksiazki udało mi się przygotować program sterujący silnikami dc przez podczerwień. program działa w ten sposób że po wciśnieciu któregoś z klawiszy wykonuje się podana komenda - np. dc1_prawo, dc1_lewo, sterowanie PWM itp. Problem w tym że próbowałem zmienić go na działanie silników wtedy gdy klawisz pilota jest wciśnięty, a gdy puszczony silniki same się zatrzymują co ułatwia spraw zdalnego sterowania pojazdem. Gdy by mi odjechał poza zasięg zwyczajnie by sie zatrzymał w miejscu, a obecny program działa tak ze gdy strace zasięg pojazd bedzie dalej jechał. Poniżej przedstawiam napisany program i z góry dziękuje za pomoc w jego modyfikacji.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2015, o 12:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Ja wykorzystałbym jakiś Timer programowy. Każde odebranie poprawnej komendy ustawiało by Timer, który liczył by w dół. Jeśli w jakimś czasie, np. 0,5s nie nadleciała by poprawna komenda, Timer doliczył by do zera i wyłączył silniki.

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


Oprócz tego musiałbyś jeszcze skonfigurować któryś z Timerów programowych aby zgłaszał przerwanie co ok. 10ms np. Timer2 ustawiony w tryb CTC. A w funkcji obsługi przerwania napisać mechanizm Timera programowego. W jednym przerwaniu można mieć kilka Timerów programowych. A te mogą się przydać do innych celów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2015, o 13:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Proponuję zrobić tak, żeby komenda odebrana z pilota była aktywna przez określony czas. A po tym czasie silniki zostały zatrzymane. Czas na jaki należy podtrzymać komendę, nie może być krótszy od czasu pomiędzy kolejnymi ramkami wysyłanymi z pilota.
Zamieszczam obrazek przedstawiający przebieg transmisji danych w standardzie RC5:

Obrazek

Widzimy, że ramka wysyłana jest co 114 ms. (Nie wiem jak to jest w konkretnych pilotach. Myślę, że jakieś uniwersalne piloty mogą mieć ten czas dłuższy). Aby działało to tak jak napisałem, spróbuj dodać w twoim kodzie, po linii 152 ten fragment:

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

Spowoduje on to, że po wykonaniu komendy i wyzerowaniu flagi Ir_key_press_flag program odczeka 200 ms i sprawdzi czy w tym czasie nadleciała kolejna ramka. Jeżeli nie nadleciała, oznacza to, że pościłeś przycisk lub pilot jest poza zasięgiem i należy zatrzymać silniki.
Oczywiście umieszczony delay jest tylko w celach testu. Należało by pomyśleć jak zrealizować oczekiwanie za pomocą timera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2015, o 13:11 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

wojtekr51 napisał(a):
spróbuj dodać w twoim kodzie, po linii 152 ten fragment:

Od razu podpowiadam, że użycie tutaj jakiegokolwiek _delaya jest niestety nieszczęściem, bo z marszu tracimy nieblokujący charakter działania pętli głównej. Do celu timeouta warto zaprząc timery programowe, również opisane w Bluebooku

oczywiście sama idea przedstawiona przez kolegę jest słuszna (jedna z wielu różnych możliwości)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2016, o 20:48 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Po dość długiej przerwie od pracy z podczerwienią wracam do tematu, staram sie zrobic timer programowy, ponieważ wszystkie timery sprzetowe mam już zajete na procku atmega 16. Moje pytanie czy to jest poprawne rozwiązanie?
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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2016, o 21:07 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Pomyśl sobie masz w przerwaniu zmienną statyczną cnt, którą inkrementujesz i nie jest ona nigdzie widoczna poza przerwaniem, nawet w kodzie jej nie użyłeś - więc co to ma wspólnego z timerem programowym ?

A tymczasem w Bluebooku masz przecież przykłady jak używać timerów programowych

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 11:04 
Offline
Nowy

Dołączył(a): 04 sty 2016
Posty: 7
Pomógł: 0

Przyda się taki skrypt nie ma problemu z tym warto właśnie sobie zdalnesterowanie ogarnąć tym bo cięzko żeby na taką odległosc podchodzić

_________________
tworzenie stron internetowych



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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