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



Teraz jest 28 mar 2024, o 17:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 28 sie 2021, o 14:28 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Witam, chciałbym aby ktoś podpowiedział, jak jako początkujący podejść do tego tematu, wykonywania kilku procesów w tle. Np: robię sobie prosty wiatrak,sterowany PWM, może kręcić się wolno,srednio,maksymalnie,wlaczyc,wylaczyc. Zrobiłem to na klawiszach i zwykłej instrukcji IF. Chciałem, żeby servo mi też go obracało. No i tu się zaczyna właśnie problem :D Wiem, że temat bardzo często wałkowany, czytam że takie rzeczy robi się w przerwaniach itp. Piszą też o maszynach stanu ale trochę ciężko mi przejść przez ten gąszcz informacji. Wielozadaniowość jest poruszana w bluebooku ale pod koniec, jeszcze nie dotarłem tam, tzn czytałem trochę, ale jeszcze średnio to rozumiem. Pytanie, czy na tak poczatkowym etapie jestem w stanie to wg zrobić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2021, o 14:31 
Offline
Moderator
Avatar użytkownika

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

krawi92 napisał(a):
Wielozadaniowość jest poruszana w bluebooku ale pod koniec


Dokładnie i to w najprostszy możliwy i wiele mówiący sposób - łącznie z przykładowym kodem do tego

krawi92 napisał(a):
jeszcze nie dotarłem tam, tzn czytałem trochę, ale jeszcze średnio to rozumiem

No niestety bez podstaw C ciężko - ale ... zacznij czytać ten rozdział na spokojnie i zacznij notować po KOLEI tego czego nie rozumiesz i takie gotowe pytania po kolei publikuj na forum - ale nie że w jednym wątku milion pytań - tylko jeden wątek - krótko jedno, dwa, max 3 pytanka

_________________
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: 29 sie 2021, o 06:46 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Troche odejdę od tematu, czytałem 2 cz art i drganiu styków i obsludze klawisza, w pewnym momencie powinien pojawić się kod, do którego potem odnosi się artykuł a żadnego kodu tam nie ma tylko dwie kreski.. Można wiedzieć czemu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2021, o 10:11 
Offline
Moderator
Avatar użytkownika

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

być może korzystasz z jakiejś kociej przeglądarki niestety - bo normalnie wszystko widać, właśnie sprawdziłem - ja zawsze działam na google chrome

Obrazek

_________________
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: 29 sie 2021, o 10:27 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 13 gru 2017
Posty: 12
Pomógł: 0

W przeglądarce Mozilla Firefox też wyświetla się poprawnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2021, o 18:47 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Ok, dziś na spokojnie usiadłem i skleiłem coś, co działa prawie tak jakbym chciał. Nie ma tu programowo wielozadaniowości, ale fizycznie mogę zmieniać prędkość silnika w trakcie obrotu servem itp. Wkleję kod, jak ja to sobie wymyśliłem.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jest tu dużo microswitchy, ale na razie nie chciałem się bawić w obsługę kilku instrukcji za pomocą jednego klawisza, ale będę starał się to poprawić. Jednak jest problem, za który nie bardzo wiem, jak się zabrać. Po wcisnieciu klawisza servo_on następuje obrót,raz w jedną raz w drugą. Gdy wciskamy servo_off to servo zatrzymuje się w danej pozycji i to jest OK, tak to ma wyglądać. Jednak gdy znowu wcisnę servo_on servo szybko się skręca do pozycji 0 i zaczyna się pętla od nowa. Nie jest to pożądany dla mnie efekt, ale rozumiem czemu tak się dzieje, bo pętla w funkcji liczy od 0 więc nic dziwnego, że się tak dzieje. Tylko teraz pytanie jak to zrobić, żeby po zatrzymaniu serva, pętla zaczeła liczyć od momentu zatrzymania? Tą wartość trzeba by zapamiętać i podstawić do pętli for. Nie bardzo wiem jak tu zakombinować.
Ps. wiem, że pewnie forma tak napisanego programu jest tragiczna pewnie, ale nie mialem pomyslu jak pewne rzeczy rozwiązać. Jeśli chodzi o zmianę prędkości silnika w trakcie pracy serva pomyslalem o przerwaniach zewnętrznych, ale jak sobie pomyslalem, że jeden klawisz pod INT0,drugi pod INT1 a trzeci co, pod PCINT któryś ? Stwierdziłem, że chyba jednak nie tędy droga. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2021, o 19:00 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Pokombinowałem trochę ze zmiennymi, żeby zapamiętać po wyjściu stan OCR1A, servo po zatrzymaniu i ponownym uruchomieniu wznawia ruch od miejsca zatrzymania, jednak działa to tylko w jedną stronę. Wszystko jest dla mnie zrozumiałe dlaczego, ponieważ funkcja rozpoczyna się od zwiększania wartości, dlatego obojętnie w którym miejscu wyjdę z funkcji, jej ponownie wywołanie spowoduje zwiększanie się wypełnienia. Ja główkowałem jak to zrobić, aby po wyjściu z funkcji w momencie zmniejszania się wypełnienia, gdy servo obraca sie w lewo, po ponownym jej wywołaniu kontynuować ten ruch w lewo, czyli jakby funkcja musiała się zacząć od środka(Wiem, namieszałem i sam widzę że to głupio brzmi) Dlatego zastanawiam się, czy w tak napisanym programie, w takiej formie jestem w stanie to zrobić.

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: 4 wrz 2021, o 02:46 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Podpowie coś ktoś? :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 07:18 
Offline
Moderator
Avatar użytkownika

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

krawi92 napisał(a):
czy w tak napisanym programie, w takiej formie jestem w stanie to zrobić.

Nie, bo to praktycznie wciąż programowanie liniowe ...

poczytaj sobie o timerach programowych w Bluebooku

_________________
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: 4 wrz 2021, o 11:50 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Tzn tak, zrobienie timerow programowych w oparciu o sprzętowy timer ogarniam. Tylko wciąż mnie zastanawia jak zrobić jakby pauzę w programie. Myślałem o wykorzystaniu trybu pharse correct, który zlicza od 0 w górę i potem z góry na dół (przebieg trójkątny) nie musiałbym się bawić w jakieś pętle czy inkrementacje i dekrementacje wypełnienia. Jedyne co mi przychodzi do głowy co na chwilę wstrzymuje pracę to przerwanie.. Przerywa program, odkłada adres, wykonuje procedurę i wraca tam gdzie przerwał. Tu bym chciał zrobić podobnie. Z tym że przerwanie zwykle trwa bardzo krótko, a moje wstrzymanie pracy serva jest na nieokreślony czas.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 12:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Zapisuj wartość i kierunek. Tylko musisz trochę zmienić funkcję do serwa. Dodać warunek, który sprawdzi, czy ma się kręcić w prawo czy w lewo.
Jak konkretnie, nie podpowiem, trochę zgubiłem się w Twoim programie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 16:21 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

No domyślam się. Sprawdzam tam dużo warunków bo dużo switchy jest heh. Ale faktycznie ogarnąłem, dodam zmienna do kierunku obrotu, z resztą sobie powinienem poradzić



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 16:55 
Offline
Moderator
Avatar użytkownika

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

krawi92 napisał(a):
Tylko wciąż mnie zastanawia jak zrobić jakby pauzę w programie.

To jest bodajże NAJGORSZY moment do przejścia dla początkujących - bo sobie wyobrażają, że timer programowy ma zastąpić DELAYA - a to w 100% nieprawda i ZŁA droga. Trzeba ABSOLUTNIE inaczej podejść do programowania - pisania kodu

krawi92 napisał(a):
Tzn tak, zrobienie timerow programowych w oparciu o sprzętowy timer ogarniam.

Dlatego muszę powiedzieć, że jednak nie ogarniasz - i broń Boże nie ma to być przytyk! tylko zachęcenie do ćwiczenia z tymi timerami programowymi - bo czuję, że tak troszkę po łepkach nad tym tematem przeszedłeś - no i to pokutuje.

------------------------ [ Dodano po: 2 minutach ]

Marhef napisał(a):
trochę zgubiłem się w Twoim programie

Przecież tu kolega autor leci na MAXA delajami okrutnymi w pętlach - dlatego ciężko to ogarnąć a autor niestety ugrzęźnie w tym na amen, chyba że zacznie jednak ostrzej ćwiczyć programowanie z użyciem 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: 4 wrz 2021, o 18:18 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Co mam rozumieć przez zmianę podejścia do programowania? Chciałbym sobie zaczac to powoli jakoś układać w głowie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 21:04 
Offline
Moderator
Avatar użytkownika

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

No właśnie to, żeby nie traktować np timerów programowych jako delay. Przejrzyj parę przykładów z książki gdzie są one używane, a jak coś nawet nie będziesz wiedział to dopytaj tutaj.

_________________
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: 4 wrz 2021, o 21:33 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

W sumie jeśli chodzi o te timery programowe to nie myślałem o nich jako zamiennik delayow, bardziej to rozumiem jak takie np 2-3 niezależne procesy które wykonują się z określoną częstotliwością jaką ustalę. Ale postaram się przećwiczyć je dobrze. W BB jestem na etapie gruntownego czytania teorii bo od rozdziału funkcji no pewne rzeczy jeszcze sprawiają problem ze zrozumieniem :) a to w sumie podstawy podstaw



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2021, o 22:54 
Offline
Moderator
Avatar użytkownika

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

No to teraz zamiast tych swoich pętli ;) zastosuj właśnie timer programowy

_________________
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: 17 wrz 2021, o 22:45 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

No więc posłuchałem i trochę się douczyłem, postanowiłem na nowo napisać "sterownik" do wiatraka. Założenia jak poprzednio, sterowanie silnikiem DC(3 tryby szybkosci) sterowanie servem, obsluga 3 przycisków wlaczajaca silnik,servo, i wylaczajaca wszystko. Teraz użyłem już tylko 3 przycisków wykorzystując zwaną dumnie szumnie maszynę stanów. Rozbiłem projekt na 3 pliki, wykorzystałem strukturę i pola bitowe w ramach testu, jak to działa. Teraz wszystko działa tak jak chciałem. Wrzucam kod, żeby ktoś ocenił, lub nawet dla porównania z poprzednim. Chętnie wysłucham uwag co tu mogłem zrobić lepiej, co spaproszyłem itp. Będę miał jeszcze kilka pytań ogólnych ale to potem. Gdyby coś w kodzie było niejasne to napisze, czemu cos tak rozwiązałem.

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


pwm.c

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


pwm.h

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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO