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



Teraz jest 7 lut 2025, o 12:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
Autor Wiadomość
PostNapisane: 29 lip 2016, o 18:42 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witam szanownych forumowiczów.
Szukam pomocy przy rozwiązaniu problemu z właściwym napisaniem kodu.
Zająłem się uruchomieniem silnika krokowego na zestawie atb. Posiadam oczywiście blubuka i jest tam troche na ten temat, ale.
Postanowiłem w ramach ćwiczeń zrobić " po swojemu ". Silnik podłączony jest przez mostek H na układzie L298N zakupiony na znanej stronce
Alle.....Mała płytka-gotowiec.
Po swojemu polega na tym, że nie mam żadnych przerwań (jeszcze ich nie próbowałem) i kroki zrobiłem na dalayach. Kawałek kodu niżej.
Zrobiłem dwie prędkości silnika:

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


Dorobiłem cztery przyciski. Dzięki nim mogę kręcić silnikiem w lewo i prawo z dwoma prędkościami. Bardzo fajnie to pracowało do momentu, kiedy dołożyłem
do pętli głównej pomiar adc z blubuka. Jest tam opóźnienie 1000ms. Oczywiście wiedziałem, że tak będzie, ale chciałem się przekonać. Zmniejszyłem do 100ms
i pomiary nadal są prawidłowe, ale silnik pracuje zdecydowanie gorzej mimo wszystko.
Ponad to dołożyłem wyświetlanie na lcd wartości adc. To na pewno dołożyło następne opóźnienia.
Wiem, że należy pisać programy nie blokujące, wyświetlanie w przerwaniach.....Pan Mirek zawsze to powtarza, ale u mnie to początki. Słucha i czyta się
fajnie, ale gorzej z zastosowaniem w praktyce na tym etapie znajomości C.

Prosiłbym o jakieś podpowiedzi, co i jak i gdzie...

Przede wszystkim, czy od samego początku nie rzuciłem sobie kłody pod nogi silnikiem z delayami. Powiem szczerze, że wolałbym tak zostawić, ponieważ do tej
pory rozumiem mój kod. Ale jeśli to głupota od samego początku, to co mam robić ?.

Wstawiam moją pętlę główną. Nie ma tam eliminowania drgań styków, ale pomyślałem sobie, że akurat w tym konkretnym przypadku mogę z tego zrezygnować.

Czy to również nie jest pomyłka ?.

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


Proszę, co o tym sądzicie i co dalej ?.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2016, o 19:52 
Offline
Użytkownik

Dołączył(a): 26 cze 2016
Posty: 186
Pomógł: 7

Chyba najlepsza droga to stopniowo zapoznawaj się z przerwaniami. Pomrugaj pojedynczą diodą, a potem dokładaj nowe rzeczy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2016, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
czarekgr napisał(a):
...najlepsza droga to stopniowo zapoznawaj się z przerwaniami

tym bardziej, że posiadasz BB a w dołączonych kodach masz obsługę silników.
Jeśli chcesz pisać własną obsługę, to chociaż zapoznaj się w jaki sposób autor/kol.Mierek wykorzystuje przerwanie do ustawiania flag "czasowych" i zamiast Twojego:
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 zapisać np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ogólnie rzecz biorąc różnica polega na tym, że Ty na czas 100ms zatrzymujesz uC a w tym drugim nie cześciej niż co 100ms możesz dusić przyciskaczki.
Bieg za doskonałością w posługiwaniu się _delay'ami prędzej czy później kończy się ścianą ;)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2016, o 20:12 
Offline
Moderator
Avatar użytkownika

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

Robson napisał(a):
Przede wszystkim, czy od samego początku nie rzuciłem sobie kłody pod nogi silnikiem z delayami.

No a ten _delay_ms(100) to co ? fantom ? ;) Uruchamiałeś to ? A te delaye w twoich funkcjach z krokami ? ....

Uruchom to i zobacz jak działa - wtedy zrozumiesz dlaczego programowanie liniowe z delajami i to w przypadku silników krokowych to istna porażka, mówię odpal i zobacz co się stanie. To ci powie wiele więcej niż niejeden post na ten temat.

Robson napisał(a):
ale u mnie to początki. Słucha i czyta się
fajnie, ale gorzej z zastosowaniem w praktyce na tym etapie znajomości C.

Tym się tak nie przejmuj - każdy musi zacząć i nawet dobrze że to odpalasz i sam widzisz że jest coś mocno nie tak ... Więc tak jak pisał kolega wyżej - spokojnie i powoli .... małymi kroczkami i do przodu

Najpierw zanim dojdziesz do silników krokowych zapoznaj się z przerwaniami - czy wykonywałeś ćwiczenie z multipleksowaniem na wyświetlaczu LED ? Jeśli to pominąłeś to sam zrobiłeś sobie dużą krzywdę bo ja nieprzypadkowo dobierałem panie kolego kolejność rozdziałów i jeśli się skacze na wyrywki bez przećwiczenia i zrozumienia tego przynajmniej w takiej kolejności jak to opowiadam w książce to nie dziw się że i efekty są nie za bardzo ....

Podsumowując
Robson napisał(a):
Po swojemu polega na tym, że nie mam żadnych przerwań (jeszcze ich nie próbowałem)

To najpierw ich spróbuj ;) zacznij jak mówiłem od multipleksowania to ci już sporo wyjaśni

_________________
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 lip 2016, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

cześć,

Widzę że koledzy mnie wyprzedzili, powoli piszę. :)

Niestety nic nie mogę wymyślić z tymi delayami. :(
Najprostszy sposób to chyba zerknąć na rozwiązanie w kodzie z płyty z BB: silnik_bipolarny, silnik_unipolarny.

Tam ładnie widać ustawienia przerwań i co się z nimi dzieje, oraz wystawianie flag i używanie ich do zmiany kierunku.

Tak samo można wyświetlać na lcd, oraz robić pomiar na adc np. co sekundę bez delay.
poza tym tego del..100, możesz usunąć.
Ale to nie wiele da. :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2016, o 20:55 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witam kol. czarekgr, kicajek, mirekk36, Daro69.

Dziękuje wam za chęć pomocy i wskazówki, co robić.
Tak myślałem, że to będzie porażka.
Panie Mirku.Ten delay 100ms, to nie wiem jak go tam wstawiłem i po co , ale to teraz nie ważne. Do samego kręcenia silniczkiem, to te delaye nie
były takie beznadziejne. Zmieniając te wartości mogłem wpłynąć na prędkość obrotów.To oczywiste dla wszystkich.Tylko niestety w początkowej
wersji mój kod miał sens. Po dodaniu wyświetlania na lcd + adc stał się bezużyteczny i z tym się oczywiście zgodzę. Jasne, że odpalałem ten program
i widziałem, co się dzieje. Dlatego założyłem temat.To mnie utwierdziło, że trzeba przerwać projekt i wrócić do książki. Czytałem całą oczywiście, ale przyznam
się, że nie wnikliwie każdy rozdział. Ma Pan zdecydowaną większość czytelników z podobnymi problemami i podejściem do czytania BB, jak w moim przypadku.
Wiem, bo oglądam wiele poradników i czytam posty. Temat czytania po łepkach się powtarza.
Reasumując i żeby nie zabierać cennego czasu proszę tylko o kilka krótkich wskazówek, a ja zabieram się do czytania i jeszcze raz do poradników.
Rozumiem, że jak przetrenuję podstawy, uruchomię przerwania, to powinienem je zastosować do lcd i do pomiaru adc ?.
I jeszcze jedno. Tylko bez krzyków :P .
Pamiętam z poradników, że nie należy umieszczać żadnych delay w przerwaniach, ani obsługi lcd, ponieważ tam też istnieją opóźnienia.
Czy po prostu samo wyświetlenie np. wyniku pomiaru, to już nie skucha ?.
Dziękuje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lip 2016, o 22:25 
Offline
Moderator
Avatar użytkownika

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

Jak dotrzesz w książce (BB) do rozdziału "Wstęp do systemów czasu rzeczywistego" i zobaczysz co to znaczy "timer programowy" to zrozumiesz i się zakochasz (zresztą jak każdy) w takim rozwiązaniu ;)


Autor postu otrzymał pochwałę

_________________
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: 31 lip 2016, o 11:40 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witam ponownie.

Eureka :D :idea: :lol: .
Udało się. Cieszę się, jak łysy z grzebienia (nie mam nic do łysych), ale proszę mi wybaczyć. Poczytełem, pomyślałem i chyba zrozumiałem, o co chodzi z tymi
przerwaniami. Niestety bez wnikliwego i metodycznego czytania blubuka nie da rady. Po łepkach się nie da.

Poniżej, jak zrobiłem. Jeszcze nie przeliczyłem wartości dla rezonatora 8MHz, ale zrobię to i poprawię. Chodziło tylko o pokazanie, jak jest teraz.

Przyznam się, że puki co, kroki silnika są z delayami, ale potrzebuję więcej czasu na zmianę wszystkiego od nowa. Na tym etapie silniczek kręci, jak na poczatku, tzn. bez dodania kodu z pomiarem adc i funkcją wyświetlania.

Proszę o ocenę sytuacji (analizując kod), co jeszcze powinienem poprawić (pomijam na razie nie użycie przerwań do sterowania krokami silnika). Gdzie tkwi ewentualny babol, czy we właściwym miejscu umieściłem przerwanie i zerowanie flagi.

Proszę jeszcze o podpowiedź, jak ewentualnie rozwiązać sytuację, gdzie musiałbym wyświetlać szybkie zmiany na lcd. Tutaj akurat wyświetla się tylko wartość
adc, powiedzmy sobie statycznie. Odświeżanie co 05-1s jest ok. Ale jeśli będzie to jakaś animacja tego adc, to jak to zrobić praktycznie, a żeby nie wpływało to
na prace cilniczka i jednocześnie wyświetlacz reagował na szybkie zmiany na wyświetlaczu.
Szczerze mówiąc nie mam pomysłu na tą chwilę. Nie zamieszczał pełnego kodu do przerwań, bo nie wiem, czy autor nie będzie miał pretensji. Jeśli nie, to zamieszczę.

Dziękuję.

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: 31 lip 2016, o 11:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

cześć,

he.. :) Powoli do przodu. :)
możesz rozbić na dwa co 0,5 sek.
pomiar=pomiar(),
a w następnej 0,5 sek. wyświetl pomiar.

Odciążysz funkcję wyświetlania z pomiarem. To zresztą Twój pomysł. ;)

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

Jeszcze tylko coś z tymi del...w krokach ;) pokombinować z timerem programowym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2016, o 13:17 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witaj Daro69
Widzę, że jesteś stałym bywalcem forum. Dzięki.
Zrozumiałem, że muszę stworzyć funkcję pomiar=pomiar(). a jak to podzielić na dwa ?. Musiałbym zrobić dwa tajmery, tzn jeden do obsługi pomiaru, a drugi do
wyświetlania ?.
Wybacz za tego typu pytania, ale to wszystko jest dla mnie zupełnie czymś nowym i ciężko zatrybić. Żebym kiedyś miał chociaż jakieś zajęcia z informatyki, czy
cokolwiek, a tak to same słownictwo, określenia w C powalają. Ktoś nieraz coś do mnie pisze, albo przeglądam inne posty, czytam i nie rozumiem, o co chodzi.
No ale wiadomo, że to po prostu luki w wiedzy.
Kiedyś miałem taki moment, że chciałem to wszystko rzucić, ale zmieniłem zdanie. Ta cała zabawa w procesory jest tak ciekawa, że nie sposób tego zaprzestać.
Im więcej się wie, tym bardziej wciąga. Nawet zgromadziłem materiały do bascoma, ponieważ często słyszałem, że łatwy itd..., ale zostałem przy C.
Po prostu po mału do przodu, jak napisałeś. Inaczej się nie da :D .
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2016, o 13:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

a w przerwaniu co 5 ms. np. coś tak:
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: 31 lip 2016, o 14:21 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Dzięki Daro69.
Bardzo ciekawa koncepcja. Pokombinuję. Na razie dzięki wielki. Tym razem to mój wątek, a więc mogę dodawać punkty :D .Będę pamiętał.
Dzisiaj odpuszczam, bo mam mieć gości, ale temat cały czas aktualny.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2016, o 14:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Robson napisał(a):
Zrozumiałem, że muszę stworzyć funkcję pomiar=pomiar(). a jak to podzielić na dwa ?

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

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

w przerwaniu co 1ms można wykorzystać licznik, i od niego uzależnić flagi i zmienne. np. coś tak.
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: 31 lip 2016, o 20:50 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Dziękuję Daro za cenną pomoc.
Goście pojechali, ale teraz głowa nie za bardzo do myślenia.... :P
Jutro po pracy biorę się za robotę i postaram się zastosować. Mam też inne zajęcia (to, to tylko hobby) przy domu, tak że jak bym się opóźniał z postami, to
nie znaczy, że zaniechałem tematu. A i odpocząć czasem trzeba, to wtedy lepiej się myśli.
Tak, czy inaczej zanim dokończę ten projekt, to już z góry wielkie dzięki za włożony wkład, poświęcony czas i w ogóle.
Twoje podpowiedzi są dla mnie cenne, pisane w sposób zrozumiały dla mnie i przede wszystkim komentarze. Im jest ich więcej, tym bardziej pomocne.
Mi trzeba jak "krowie na rowie" tłumaczyć. Na jedną linijkę kodu pięć linijek komentarza :lol: . Nie każdy ma tyle cierpliwości.
Ja oczywiście oglądam dużo poradników, czytam książkę, ale kiedy słyszę, że trzeba wykonać jakieś jawne rzutowanie, volatile, extern, specyfikator...itd itd
to ręce opadają. No ale pomału na swój sposób zaczynam pewne rzeczy rozumieć. Programistą nigdy prawdziwym nie będę, ale chciałbym trochę nauczyć.
Dzięki forum i takim ludziom, jak Ty jest to możliwe. Gdyby nie poradniki Pana MIrka, to pewnie bym się dawno poddał.
No ale dosyć tych wywodów.
Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2016, o 21:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Spoko, ;)
Jestem początkujący. A programowanie to też moje hobby, od niecałego roku.
Staram się jak mogę, ale i tak nie zawsze wychodzi dobrze, dlatego fajnie że są jeszcze koledzy chętni do pomocy i korygowania mojego toku rozumowania.
Jest tu kilku sympatycznych pomagierów. :)
-ja podpowiadam na ile potrafię i przy okazji sam się uczę. ;)
Jestem tu często, ale też mam nieraz przerwy - wiadomo codzienne obowiązki .
Potem przeglądam historię postów, wątków i archiwum chat'a , by być trochę na bieżąco.
Teraz ja się rozpisałem :P

Żeby nie było że nie na temat :
Warto przestudiować jak do zagadnienia silników bipolarnych podchodzi Mirek, i w jaki sposób to ogarnia. - BB i kod z płyty -. a resztę po swojemu ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 06:23 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witam.
Co prawda jestem w pracy, ale czasami mogę chwilę poświęcić.Dopisałem swoje komentarze, a żeby się upewnić, czy dobrze myślę.
Wiem, że to podstawy podstaw :D , ale bez zrozumienia i przepisywanie czyjegoś kodu, żeby "zadziałało" to zła droga.

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: 1 sie 2016, o 06:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Też w pracy. ;)
Chodzi o to że kiedy szybko konczy 4-ty krok to wolno przybiera kolejny. Wynikło z Twoich założeń 5ms i 20ms.
Fakt, to też nie jest najlepsze rozwiązanie bo ciężko zmieniać czasy, ale pomaga w zrozumieniu zasady działania w przerwaniach. No i del.. Znika. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 07:27 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Ok.Dzięki.
Żeby nie przeszkadzać w pracy, to tylko napisz w wolnej chwili, czy prawidłowo rozumiem zapis. Muszę dojść do tego, a żeby rozumieć
wszystko, co piszę. Inaczej to nie ma sensu i zawsze będą luki w wiedzy. Ja wiem, że wszystko jest opisane w książce, ale dla jednej osoby
po jednym przeczytaniu jest wszystko jasne, a dla drugiej nie do końca. Nieraz temat wytłumaczony w trochę inny sposób, albo przez inną
osobę łatwiej dociera. Swoją drogą, to piszesz, że niecały rok zajmujesz się C. Nie wiem ile czasu poświęcasz na naukę, ale jak patrzę na posty,
to tak łatwo Tobie te przykłady wychodzą. Jeżeli jesteś na etapie, że sam podejmujesz decyzje, że możesz coś zrobić na kilka sposobów, to
już jest duży sukces. Myślę, że z czasem i ja dam radę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 11:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Wieczorem postaram się rozpisać kod z komentarzami.
Chodzi o to że warunkowe zwiększanie wolnego kroku razem z przypisaniem 1-dynki jest wewnątrz "else" kroku szybkiego, czyli występuje co 4 zmiany kroku szybkiego.
E... Kiepsko się pisze paluchem na małym wyswietlaczu.:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 17:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

może tak jakoś będzie łatwiej. :)

Na marginesie:
Robson napisał(a):
Nie wiem ile czasu poświęcasz na naukę, ale jak patrzę na posty,
to tak łatwo Tobie te przykłady wychodzą.

Uczę się w wolnych chwilach, na początku ~2h dziennie po fajrant, trochę w przerwach w pracy. Teraz mniej - jakoś więcej obowiązków się zrobiło.
Zauważ że to co piszę w kodach opiera się niestety tylko na podstawach. Ja tylko nimi żongluję, czasem bardzo niezgrabnie. :(
Mam jeszcze problemy z wieloma podstawowymi zagadnieniami więc ich na razie nie używam,nie mam do nich wyczucia mimo że wiem jak działają.
To jak z japońskimi pałeczkami :) wiesz jak działają, ale żeby nimi zjeść :lol: to potrzeba wprawy.
No właśnie - WPRAWY. ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 19:51 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Wielkie dzięki Daro za kolejną pomoc.
Muszę trochę Tobie odpuścić i sam popracować. Twoje posty były bardzo pomocne. Dzisiaj napisałem wszystko od nowa. Zmieniłem wszystkie funkcje do obsługi silnika
na takie, jak mi pokazałeś i opierając się na BB i kodach P.Mirka. Wszystkie delaye wywaliłem. Puki co muszę sam pomedytować. Ja pisząc coś bez doświadczenia robię to
na własną logikę, która nie zawsze jest słuszna, ale postępy jakieś są. Na razie chcę porządnie napisać obsługę silnika lewo, prawo, wolno, szybko w przerwaniach.
Wtedy będę dodawał kolejne elementy. Za jakiś czas podeślę Tobie kod do obejrzenia, a może coś Ci się przyda. Wrzuciłbym tutaj, ale wiadomo, że większość nie moja
i ponoć nie wolno.
Tak czy siak istotnie te timery, to super sprawa jest, jak się je zrozumie. W 100% jeszcze nie łapię, ale prawie.
Puki co mam na razie ostatnie pytanie.
Pół godzinki temu odpaliłem programik. Nie mam żadnych alertów. Silnik na timerze kręci,aż miło. Zmieniając wartość OCR0 = 30; na różne wartości zmieniam
prędkość obrotową silnika.
Jest tylko problem, że tylko jeden przycisk działa, tzn. ten pierwszy if od góry pod if(ms2_flag). Następne nie funkcjonują.
Myślałem, że po kolei sprawdzane są przyciski w pętli, i jeśli któryś wcisnę, to wykona się instrukcja do tego przycisku, a tu tylko działa:

if ( !(PINB & silnik_1_prawo_szybko) ) kroki_prawo_silnik_1(); else silnik_1_stop();

Oczywiście trzeba dalej próbować. Może źle myślę i moja logika w tym miejscu jest błędna. Co robię źle ?.

------------------------ [ Dodano po: 1 minucie ]

Zapomniałem wstawić

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: 1 sie 2016, o 20:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

sprawdza wszystkie klawisze i wykonuje wybraną funkcję - dopóki trzymasz klawisz nie zeruje flagi.

dopisałem jeszcze komentarze . :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 21:28 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Witam.
Próbowałem, ale w takim układzie nie kręci. Ale jak wyłączę wszystkie else, to wtedy wszystko działa prawidłowo, poza tym, że silnik pobiera prąd, kiedy zatrzymany. Po prostu za długo siedzę i już bezmyślnie pisze. Trzeba odpocząć.
Poniżej kod, ale sory, że tyle nawstawiane. To tylko testy i jest ogólny bałagan.

Tak wszystkie przyciski pracują, ale do poprawy "na trzeźwo".

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: 1 sie 2016, o 22:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

hm.. jeżeli jest flaga, co 2ms sprawdza klawisze i tym samym
co 2ms wykonuje funkcje kręcenia silnikiem które
co 2ms uaktualniają stan napięć na silniku. -głośno myślę.- :? gdzie ten błąd ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 22:53 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Tak jest dobrze.

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



Pozostaje mi tylko zrobić dwie prędkości silnika. Na razie klawisz wolno i szybko obraca tak samo. Trzeba by zmieniać milisekundy. Jak wcisnę przycisk wolno
to w przerwaniu np. 20ms, a jak wcisnę przycisk szybko, to ms 5 np. Jakoś tak sobie to wyobrażm. Pewnie jest to możliwe

Starczy. Idę spać.
Dzięki i na razie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 09:26 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Mam prośbę.
Nie chcę zakładać nowego tematu dla jednego, czy dwóch pytań, a prosiłbym o odpowiedź.

Czy zapisując dane np. z ram do eprom, np: copy_ram_to_eem(); i podobnym operacjom
powinienem zastosować delay np:

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


Czy procesor potrzebuje czasu na prawidłowe zapisanie danych i po tym delay dopiero może wykonywać kolejne instrukcje, czy też
Ten delay jest zbędny i dane i tak prawidłowo się zapiszą ?.

Pytam, ponieważ wprowadza on opóźnienie w pętli dość znaczne. Jeśli takie opóźnienie jest konieczne, to jak należałoby to zrobić (timer ???).
Pytanie może banalne, ale proszę o radę i ewentualne wyjaśnienie.
Dziękuję z góry za pomoc.


CZY NIE MA OSOBY, KTÓRA ODPOWIEDZIAŁA BY NA MOJE PYTANIE?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 18:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

hejka,
Może koledzy akurat w innych wątkach dyskutują. ;)
Tylko nie _delay :o
Do zabezpieczenia procesu zapisu jest używany pewien sposób.
Poczytaj np tu. http://forum.atnel.pl/post81196.html#p81196
Mam nadzieję że nie próbujesz zapisywać do eeprom danych co sekundę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 18:57 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 108
Pomógł: 0

Dzięki Daro.
Czujny jesteś :D :D :D .
Jak zawsze w takich sytuacjach przeważa niecierpliwość, a przecież nie samym forum ludzie żyją. Muszę się tego nauczyć :) .
Broń Boże co sekundę, czy w pętli. Te info dawno wyczytałem. Zapoznam się z tym, co mi podsunąłeś. Jeszcze raz dziękuję.
Na razie.



Ostatnio edytowano 3 sie 2016, o 20:18 przez Robson, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Tak, nie na 100%, ale masz około 100 000 cykli zapisu do każdej z komórek.

PS. kontroluj PW.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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