Laik Napisano Wrzesień 11, 2009 Udostępnij Napisano Wrzesień 11, 2009 Witam czy jest mozliwosc zrobiena aby dwie czynnosci wykonywaly sie w tym samym czasie ? Tzn chce aby robot jechal do przodu a w tym czasie czekal na wczytanie stanu z przycisku i wykonywal operacje. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Wrzesień 11, 2009 Udostępnij Wrzesień 11, 2009 Tak, poczytaj o przerwaniach. 1 Link do komentarza Share on other sites More sharing options...
Elektryk0 Wrzesień 11, 2009 Udostępnij Wrzesień 11, 2009 Do obsługi przycisków możesz użyć np. przerywań INT0 i INT1. Chodź bez przerywań też da się to zrobić po prostu w pętli sprawdzasz stan przycisków i w zależności od ich stanów zmienisz kierunek jazdy lub nie podejmujesz decyzji i kierunek zostaje taki jak poprzednio czyli np. do przodu, albo gdy żaden przycisk nie jest wciśnięty to robot - jedź do przodu. Robisz robota z czułkami ? Link do komentarza Share on other sites More sharing options...
Le_Cheque Wrzesień 11, 2009 Udostępnij Wrzesień 11, 2009 W mikrokontrolerach nie ma możliwości wykonywania dwóch rzeczy naraz, jedna następuje po drugie, ale zachodzi to w ułamkach sekund, więc dla człowieka jest niezauważalne. Przerwanie polega na tym, że uC zamiast sprawdzać po kolei stan z przycisku (obrazując: uC pyta się czy przycisk jest wciśnięty, ten odpowiada, że nie i uC leci dalej z programem) ustawia się przycisk jako priorytet (obrazując: uC wykonuje program, a gdy przycisk jest wciśnięty, ten woła, że ma zostawić wszystko i zwrócić uwagę na niego). Takie masło maślane, ale mam nadzieję, że zrozumiesz 😃 . Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Elektryk0 Wrzesień 11, 2009 Udostępnij Wrzesień 11, 2009 Przepraszam, że jeszcze raz się wetnę Le_Cheque ma rację ale... ale po pierwsze przy fabrycznym kwarcu to częstotliwość wynosi 1MHz czyli jedna instrukcja trawa 1us co jest bardzo niewielkim czasem tak małym, że dla nas w ogóle to "nie trwa" gdyż nie jesteśmy w stanie zauważać takich odstępów czasu. Więc nie ma obaw, że będą jakieś widoczne opóźnienia. Poza tym może być rzeczywiście tak, że uprocek steruje silnikiem do przodu i w tym samym czasie sprawdza stan przycisku gdyż jeżeli ustawisz przed pętlą np. Pin PB1 jako wyjście w stanie wysokim a twój sterownik silnika będzie zbudowany tak ( hipotetycznie ), że taki stan na PB1 powoduje ruch robota do przodu to będzie on jechał dopóki nie zmienisz stanu na PB1 z racji, że zaraz potem będziesz w pętli sprawdzał stan przycisków i twój program nie będzie modyfikował stanu na PB1 do czasu, aż jakichś przycisk nie zostanie wciśnięty wówczas sądzę, że można powiedzieć,że dwie czynności sprawdzanie stanu przycisków oraz ruch do przodu zachodzą w tym samym czasie. Oczywiście w mikrokontrolerach instrukcje są wykonywane po kolei ale tu sytuacja jest nieco inna więc nie można twierdzić na podstawie tego, że da się zrobić tak by wykonać dwie instrukcje, które normalnie są wykonywane po kolei, w tym samym czasie dlatego Le_Cheque ma rację co do niemożności robienia dwóch instrukcji w tym samym czasie. Mam nadzieje, że wiadomo o co mi chodzi. Link do komentarza Share on other sites More sharing options...
Zuk Wrzesień 11, 2009 Udostępnij Wrzesień 11, 2009 W sumie przy tak postawionym problemie procek może robić 3 rzeczy na raz: - przerwania timera sterują silnikami (PWM) - przerwania zewnętrzne INT0 i INT1 zmieniają kierunek działania robota poprzez zmianę wypełnienia sygnału PWM i/lub zmianę konfiguracji bitów sterujących napędami - w pętli głównej programu może się dziać cokolwiek innego. Link do komentarza Share on other sites More sharing options...
Elvis Wrzesień 12, 2009 Udostępnij Wrzesień 12, 2009 Podłączanie przycisków do przerwań ma swoje wady. Zależnie od procka, przerwań może być ograniczona liczba (szczególnie ARM-y mają tę wadę). Jak zabraknie, trzeba skomplikować układ. Nawet jeśli mamy tyle wejść przerwań co przełączników pozostaje problem drgań styków. Przy drganiach procek zostanie "zasypany" żądaniami przerwań, co więcej trzeba dodać filtrowanie jeśli chcemy wykryć np. kolejne naciśnięcia przycisku. Moim zdaniem obsługa przycisków na przerwaniach jest dla zaawansowanych. Natomiast po treści posta kolegi Laik-a sądzę, że szuka czegoś prostego. Najłatwiej jest w pętli głównej programu kolejno odczytywać stany przycisków, następnie wywoływać procedury sterowania robotem. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Wrzesień 12, 2009 Udostępnij Wrzesień 12, 2009 Laik, opisz dokładniej problem/zastosowanie w robocie, abyśmy mogli odpowiedzieć Ci jasno i jednoznacznie 😉 Link do komentarza Share on other sites More sharing options...
Nawyk Wrzesień 12, 2009 Udostępnij Wrzesień 12, 2009 W mikrokontrolerach nie ma możliwości wykonywania dwóch rzeczy naraz, jedna następuje po drugie, ale zachodzi to w ułamkach sekund, więc dla człowieka jest niezauważalne. Wybaczcie, że się wtrącam, ale jest taka możliwość i nazywa się wielowątkowość 😉 Wielowątkowość może także odnosić się do samych procesorów. W takim wypadku oznacza możliwość jednoczesnego wykonywania wielu wątków sprzętowych na pojedynczej jednostce wykonawczej – rdzeniu (ang. core). Wielowątkowość w procesorach możliwa jest dzięki temu że nie wszystkie części jednostki wykonawczej są w jednakowym stopniu wykorzystywane przez pojedynczy wątek (ciąg instrukcji). Nieaktywne części jednostki wykonawczej mogą w tym czasie wykonywać inny wątek zwiększając efektywność wykorzystania całego procesora. W zależności od rodzaju technik zastosowanych do obsługi dodatkowych wątków sprzętowych spotyka się od 2 (najczęściej) do nawet 8 wątków sprzętowych na pojedynczy rdzeń procesora (core). źródło Wikipedia I już siedzę cicho 😉 Link do komentarza Share on other sites More sharing options...
Le_Cheque Wrzesień 12, 2009 Udostępnij Wrzesień 12, 2009 W sumie przy tak postawionym problemie procek może robić 3 rzeczy na raz:- przerwania timera sterują silnikami (PWM) - przerwania zewnętrzne INT0 i INT1 zmieniają kierunek działania robota poprzez zmianę wypełnienia sygnału PWM i/lub zmianę konfiguracji bitów sterujących napędami - w pętli głównej programu może się dziać cokolwiek innego. Nie do końca. To coś jak z odrabianiem lekcji wieczorem (znowu trochę łopatologiczne podejście 😃), wchodząc do pokoju zapalasz lampę i ona się świeci (żarówka, nie lampa 😃 ), nie musisz co chwilę wstawać i ją ponownie zapalać, więc gdy już się świeci siadasz do biurka i odrabiasz lekcje np. najpierw zadanie z fizyki, a później z matematyki i robisz to po kolei, chyba, że umiesz pisać lewą i prawą ręką na raz i masz podzielność uwagi. To, że w "main" dasz PWM to nie znaczy, że mikrokontroler robi coś naraz z tym co jest później w pętli. On po prostu zaczynając program uruchamia te silniki (czy co tam dasz innego) i już sobie tym głowy nie zawraca, przechodzi do pętli i wykonuje czynności po kolei. EDIT: Rozumiem nawyk, że jest taka możliwość, ale sądząc po pytaniu użytkownika Laik nie będzie on programował jakichś "wypasionych" procków tylko nasze poczciwe AVRy 🙂 . Link do komentarza Share on other sites More sharing options...
Zuk Grudzień 21, 2009 Udostępnij Grudzień 21, 2009 Dawno mnie tu nie było. Dopiszę pewne sprostowanie. A że przechodzimy do obrazowego przedstawiania sprawy i odrabiania lekcji to: Wchodzisz do pokoju, włączasz światło i wyciągasz zeszyty/książki z których będziesz korzystał to jest przygotowanie środowiska pracy. Dodatkowo włanczasz sobie radio/CD, żeby w tle coś grało. W tym momencie zabierasz się do odrabiania lekcji. Ale co jakiś czas mama albo ktoś inny prosi cię o coś np. "wyrzuć śmieci" itd. Lub co jakiś czas zmieniasz płytę lub stację radiową. Analogia do działania uC AVR: zanim wejdziesz do głównej pętli konfigurujesz środowisko pracy, ustawiasz rejestry, deklarujesz i zadajesz wartości początkowe zmiennym itd. Następnie wchodzisz do głównej pętli programowej,z której co jakiś czas wyrywa cię przerwanie zewnętrzne (INT - głos mamy),mało tego timer w AVR da się tak skonfigurować aby generował sygnał PWM bez wykorzystania z przerwań, ale jak chcesz zmienić wypełnienie musisz zmienić wartość w odpowiednim rejestrze. W tym przypadku zewnętrze urządzenie którym jest w procku timer to jest radio z przykładu, w którym co jakiś czas zmieniasz stację, samo radio działa niezależnie od tego co akurat robisz ale jak coś jest nie tak to przerywasz pracę, i zmieniasz stację. Mimo iż w jednej chwili procesor robi tylko jedną rzecz tak na prawdę dzieją się dwie, bo sygnał PWM jest "niezależny" od procesora, procesor albo wykonuje program z pętli głównej lub reaguje na przerwanie. Co do wielowątkowości to jest to pojęcie bardzo rozległe ale dopiero w procesorach wielordzeniowych zadania mogą dziać się równolegle. W procesorach 8bitowych raczej nie stosuje się tego typu rozwiązań bo wymaga to działania programu nadrzędnego, który przełącza wątki, to zadanie realizuje w komputerach system operacyjny. Spotkałem się już z OSem mogącym pracować pod AVRkami nazywa się on FreeRTOS czy jakoś tak, ale nie miałem okazji się nim pobawić. Takie rozumowanie jest odpowiedzią dla użytkownika Laik: Skonfigurować procek tak aby generował sygnał PWM do jazdy robota w przód. A następnie w pętli programowej czekał na naciśnięcie przycisku. Ale myślę, ze po takim czasie już to zadanie zostało rozwiązane. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »