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



Teraz jest 27 lut 2025, o 07:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 22 mar 2015, o 12:27 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Witam sekciarską brać! :)

Zabrałem się ostatnio za projeky wielozadaniowe na AVR i czas zastąpić okrutne _delay_ms ale ciągle mam jakieś problemy :/

Potrzebuje w jednej funkcji wywołać kilka operacji przesłania danych do UARTA z tym że pomiędzy nimi powinien nastąpić niewielki delay rzędu 100ms. Wszystko działa super gdy używam standardowych _delay_ms ale gdy próbuję zastosować do tego Timery programowe opisane w BB zaczynają się schody. Kompletnie nie potrafię zrozumieć jak to zastosować przy kilku operacjach. O ile zastosowanie tego Timera do migania diodą wydaje się być łatwe to przy 5 operacjach które muszą być w wykonane w określonej kolejności zaczynają się schody

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


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


No i funkcja która ma być wykonana w odpowiedniej kolejności

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: 22 mar 2015, o 15:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Raczej bym spróbował w ten sposób i wykorzystał pięć timerów programowych, każdy przecież ma wysyłać komendy w różnym czasie.
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: 22 mar 2015, o 17:04 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

No ale chyba to

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



To nei bardzo nadaje się na projekt wielozadaniowy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2015, o 17:36 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

anshar napisał(a):
Raczej bym spróbował w ten sposób i wykorzystał pięć timerów programowych, każdy przecież ma wysyłać komendy w różnym czasie.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Niestety to nic nie zmieniło. Wysyła pierwszą komende i koniec



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2015, o 20:06 
Offline
Moderator
Avatar użytkownika

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

eeeeh panowie panowie .... przecież - po pierwsze POKAZUJĘ I OMAWIAM DOKŁADNIE TO ZAGADNIENIE w Bluebooku - przy okazji ćwiczenia z pomiarem temperatury ... gdzie w jednym kroku, procek wysyła rozkaz pomiaru, w drugim, odczytuje temperaturę z jednego czujnika, w kolejnym z kolejnego a jeszcze w innym kroku sprawdza ilość czujników ...

przy czym tam mechanizm timerów programowych pokazuję jeszcze troszkę inaczej niż w tym przykładzie ale zasada jest IDENTYCZNA!

dlaczego nie rozgryzacie ćwiczeń z Bluebooka. Ja tyle razy piszę - że jak rozdział o multipleksowaniu LED to nie po to przecież ten rozdział żeby ogłaszać światu że to są NAJLEPSZE WYŚWIETLACZE ŚWIATA! ;) tylko żeby na prostym przykładzie pokazać kilka prostych technik programowania - żeby sobie ćwiczyć - ćwiczyć ćwiczyć

tak samo z przykładem o 1wire - IDENTYCZNA sytuacja .... czy kolega Willu88 pochylił się nad tym ? chyba nie - a szkoda

może żeby za dużo znowu nie ględzić - pokażę JAK MEGA TO PROSTE i aż wstyd będzie - mam nadzieję - że ktoś tego nie zrobił - bo to nie jest żadna jakaś tam TAJEMNICZA technika programistyczna ....


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


proszę bardzo powyżej przykład np dla cyklicznie wykonujących się czterech kroków ? trudne ? ... łatwe ? .... ciężko przerobić to dla 8 kroków ? dla 50 kroków ? dla 2 kroków - dla innych kombinacji jeszcze łącznie np z zatrzymywaniem Timera1 po iluś tam krokach ?


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: 22 mar 2015, o 20:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Człowiek cały czas się uczy! Można to zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Patrzę, a tu p. Mirek już napisał gotową odpowiedź, no ale jak już napisałem to zamieszczę. Może się komuś przyda? :D

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

Szczerze p. Mirku? To mi jest osobiście wstyd, że takie głupoty wcześniej wypisywałem! :D Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2015, o 20:41 
Offline
Moderator
Avatar użytkownika

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

anshar napisał(a):
że takie głupoty wcześniej wypisywałem!

Proszę nie pisz tak - KAŻDY kto próbuje podpowiadać sam się uczy - ja także - a to że popełniamy czasem błędy to co ? to grzech ? ... NIE! ... dzięki temu sam przyznaj ... udaje nam się uczyć szybciej ? ...

to jest właśnie tajny i mega szybki sposób uczenia się - takie właśnie pomaganie i udzielanie się ... bo nawet jak robimy błąd to ktoś inny poprawi i LECIMY DO PRZODU! ;)

_________________
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: 22 mar 2015, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

:D Zgadza się! Jest to super metoda! A NO LECIMY! :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2015, o 21:59 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Tak to jest jak człowiek przez tyle godzin walczy z tym szukając coraz dziwniejszych pomysłów. Najlepsze jest to że próbowałem pomysłu z BB z tematu o DS18B20 ale tak samo jak tam bazowałem na dzieleniu modulo sekund z RTC ale problemem był fakt że wysyłanie nie zawsze rozpoczynało się od zerowej sekundy. Jak zawsze Mirek w prosty sposób rozjaśnił wszystko :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2015, o 22:09 
Offline
Moderator
Avatar użytkownika

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

Wilu88 napisał(a):
ale problemem był fakt że wysyłanie nie zawsze rozpoczynało się od zerowej sekundy

A dlaczego problemem ? dlaczego MUSIAŁO się zaczynać od zerowej ? ;) mogło od 13-tej do 15-tej ;) jak widzisz i po tym przykładzie ;)

Wilu88 napisał(a):
Jak zawsze Mirek w prosty sposób rozjaśnił wszystko

Oczywiście to jest JEDEN z BARDZO prostych sposobów i warto myśleć nad lepszymi - ale .... ciężko myśleć nad bardziej skomplikowanymi jeśli się nie zaskoczy tego najprostszego - prawda ?

Poza tym ja też powtarzam - ten sposób nie jest JEDYNIE NAJLEPSZY - bo sposobów na to są tysiące ;)

_________________
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: 23 mar 2015, o 01:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Jest tylko jeden mały problem w przypadku %5. Dla wartości uint8_t i; gdy i=255 otrzymamy 0, oraz dla wartości i=0 otrzymamy 0, czyli dwa razy pod rząd zostanie wywołana ta sama funkcja. Jeśli to nie ma znaczenia no to fajnie, jednak gdy ma to zamiast:

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


lepiej chyba zrobić tak:

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


Analizowałem kilka przykładów i wszystko było OK przy i%4, jednak przy i%5 nie działa to już tak dobrze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2015, o 10:12 
Offline
Moderator
Avatar użytkownika

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

anshar napisał(a):
Jest tylko jeden mały problem w przypadku %5.

To nie jest problem - trzeba tylko zrozumieć jak działa "modulo" .... Pomyśl sobie co by było gdyby ktoś w takim przykładzie chciał np zrobić 140 kroków i miał 140 IF'ów :lol:

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


toż roki powyżej 140 wykonałyby się w pierwszym obiegu zmiennej i od 0 do 140 a później w w kolejnych krokach od 141 do 255 ? ... to by była dziura ;)

No wiadomo przecież że warunki graniczne w takim przykładzie trzeba sobie jakoś dobrać ... czyli np wyzerować zmienną kroki gdy wykonają się wszystkie nam potrzebne - tak jak to próbujesz dalej robić ... ;)

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

anshar napisał(a):
jednak przy i%5 nie działa to już tak dobrze.

a co to oznacza wg ciebie ?

toż przy i % 5 masz nie 4 a pięć kroków ;) i co tu może działać źle ? lepiej ? albo gorzej ? ;)

_________________
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: 23 mar 2015, o 10:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

No chyba źle się wyraziłem. Już się poprawiam. Chodziło mi o to, że musimy wyzerować zmienną kroki, bo gdy tego nie zrobimy to tak jak pisałem dla kroki % 5 będą dla (kroki = 255) % 5 = 0 i dla (kroki = 0) % 5 = 0. A to będzie błąd.
Chodzi mi o to, że jednak warto pamiętać o zerowaniu zmiennej kroki. Reszta panie Mirku jasna jak słońce! :D

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: 23 mar 2015, o 12:32 
Offline
Moderator
Avatar użytkownika

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

anshar napisał(a):
Chodzi mi o to, że jednak warto pamiętać o zerowaniu zmiennej kroki.

No warto warto ;) tyle że to mi się wydawało może zbyt jasne ;) ... a przykład miał być MEGA PROSTY dla zrozumienia idei działania dla KAŻDEGO.

Jak widzisz - nawet taka rzecz jak to że kroki trzeba zerować - jest też już dzięki ogarnięciu tak prostego sposobu oczywista po kilku chwilach. Ale hmm o to chodzi mi zawsze - żeby wytłumaczyć coś NAJPROŚCIEJ JAK SIĘ TYLKO DA ... bo zawsze wierzę, że później to już każdy sobie poradzi ... i będzie sobie i optymalizował kod, i usprawniał a co ważniejsze - wymyślał coraz lepsze i bardziej zaawansowane sposoby w miarę uczenia się dalej ...

Jak widzisz - TO działa - tzn takie podejście z mojej strony - ważne żeby dać IMPULS! ;) .... a później to już wszystko robi się proste - nieprawdaż ? Najtrudniej zwykle jest po prostu zacząć, zrozumieć - zaskoczyć ... i ja się na tym skupiam ... później pobudzone mózgi działają już same i lepiej nawet od mojego starego :lol:

_________________
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: 23 mar 2015, o 20:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Dać IMPULS? To nie impuls, to bomba atomowa!
Panie Mirku zgadzam się z panem w 100 procentach, ba nawet w 200 procentach ze wszystkim oprócz jednego:
Cytuj:
mojego starego
. :D
Tutaj to chyba wiek nie ma żadnego znaczenia, a doświadczenie i to coś, czego wielu wykładowców czy nauczycieli nie posiada. Za to pan ma to wszystko, przeogromną wiedzę i dar jej przekazywania!
Co do oczywistego dla wielu zerowania zmiennej i (kroki) pomyślałem sobie, że może komuś się to przyda, komuś kto tego jeszcze nie załapał (lub nie do końca, tak jak np ja). :D
Uczę się języka C bardzo krótko i często łapię się na tym, że te najbardziej oczywiste zagadnienia, na które się z regóły nie zwraca uwagi zaczynają się prędzej czy później mścić. :D No ale po to między innymi mamy to forum prawda?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2015, o 20:52 
Offline
Moderator
Avatar użytkownika

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

anshar napisał(a):
Co do oczywistego dla wielu zerowania zmiennej i (kroki) pomyślałem sobie, że może komuś się to przyda, komuś kto tego jeszcze nie załapał (lub nie do końca, tak jak np ja).

No i BARDZO dobrze - po to jest to forum .... teraz jak ktoś poczyta całość to będzie miał fajny obraz całoś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: 23 mar 2015, o 23:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

to jeszcze jedna metoda dla timera 100Hz ;)

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

i 1 bajt statycznej RAM oszczedzony :)

ewentualnie parametrem funkcji można uczynić wskaźnik do zmiennej u16, jeśli jeszcze nie wiesz, z którego timera będziesz korzystał ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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