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



Teraz jest 30 mar 2026, o 20:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 16 lut 2016, o 20:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Powiedzmy, że Timer1 dojdzie do zera, warunek spełniony, nadpisujesz go wartością i w następnym obiegu znów będzie niespełniony.
Tylko jakim cudem wykonywał Ci się Timer 3? No tak, wykonywały Ci się wszystkie Timery, bo akurat tak Ci się poszczęściło. Jakby Timer1 był 49, to dłuugo byś czekał na mignięcie diody.

Powinno być:

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


--------------------------------
Nie, to jednak też nie będzie działało jak trzeba. Timery będą pracować równolegle.. Czyli ostatecznie będzie wykonywał się znów tylko Timer3.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2016, o 21:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Wykombinowałem coś takiego jak poniżej. Wydaje mi się, że będzie działało tak, jak Ty chcesz.
Chodzi o to, że przez dodanie dodatkowych warunków, uruchamiamy sobie kolejne Timery dopiero po tym jak poprzednie skończą się odliczać. Teraz nie będą się równolegle zliczały.
Pewnie da się to bardziej elegancko zrobić. Ja to tak trochę topornie, łopatologicznie, chałupniczo zrobiłem.. ;)
Chętnie bym zobaczył jakieś ładniejsze rozwiązanie tego, może ktoś jeszcze podrzuci.

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2016, o 00:22 
Offline
Użytkownik
Avatar użytkownika

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

Witam
W.g mnie zastosowanie trzech timerów programowych do obsługi zdarzeń szeregowych (słownictwo moje) mija się z celem. Wystarczy tylko w przerwaniu "tykać" jednostką czasu, po 250 - zerować a pętli gł. dać warunki:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

...no chyba, że głębiej w programie jest konieczne posługiwanie się trzema timerami.
zoom napisał(a):
... chałupniczo zrobiłem..

...a ja wręcz prostacko :)

edit:
Tych "tyknięć" musi być oczywiście więcej, tzn. mają być sumą poszcz. przedziałów czasowych... zresztą i tak nie wiadomo jakie są założenia.

Pozdr.


Autor postu otrzymał pochwałę


Ostatnio edytowano 18 lut 2016, o 12:41 przez kicajek, łącznie edytowano 1 raz

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

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

Ja tak patrzę na ten wątek i sorki ale ręce załamuję - bo tak to zwykle jest gdy ktoś zada nieprecyzyjne pytanie, w tym wypadku kompletnie nie opisany dobrze problem albo założenie .... (jak się ma kłopot ze sformułowaniem pytania to warto np opisać co się chce uzyskać zamiast pisać, że zrobiłem tak i siak timery i źle działają) .....

I wtedy gdy następne osoby próbują do tego dorobić teorię to zaczyna się MEGA MISZ-MASZ ;) ... a jeszcze na koniec autor pisze:

1Yokoon napisał(a):
Dioda mruga zgodnie z trzecią instrukcją if(!Timer3) nie są brane poprzednie Timery.


przecież tu nie ma ani przecinka ani kropki ... więc już masakra - w ogóle nie wiadomo o co chodzi w tym zdaniu albo o co chodzi autorowi ...

---------------------------

Dlatego panie autor proponuję - opisz ogólnie w kilku zdaniach co chcesz zrealizować, ale proszę użyj jakichś znaków interpunkcyjnych, podziel to na wyraźne zdania - aby z opisu można było domyśleć się co chcesz uzyskać i nawet o timerach programowych nie musisz pisać bo patrząc na podejmowane tu próby przez wszystkich to idzie to w jakimś mega przedziwnym kierunku ...\

Podsumowując - przedstaw prosty algorytm tego co ma się dziać w twoim programie i sam zawsze od tego zaczynaj przemyślenia ok?

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

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

A skąd wiesz, że pozostałe nie działają? Nawet ich nie sprawdzasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2016, o 15:37 
Offline
Moderator
Avatar użytkownika

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

1Yokoon napisał(a):
Dioda mruga zgodnie z trzecią instrukcją if(!Timer3) nie są brane poprzednie Timery.

To jest moja odpowiedź do kolegi zoom, na jego kod.

No to bawcie się dalej ;)

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

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Ja tak zrozumiałem:

Najpierw ma się wykonać Timer1.
Wtedy włącza się Timer2.
Kiedy Timer2 się wykona, włącza się Timer3 i zmieniamy stan diody.

Wobec tego ostatecznie - dla tego konkretnego kolegi programu dioda powinna migać co sumę okresów wszystkich Timerów (czyli co Timer1+Timer2+Timer3).
Według takich założeń naskrobałem ten mój "krzywy" kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2016, o 07:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

50+150+250=450, może masz przerwanie faktycznie co 1ms, a nie jak jak sądzisz co 10?
Reszty kodu nie wrzuciłeś, toteż ciężko komuś coś poradzić.
Bo nie wiadomo ani na jakim procesorze, ani jak skonfigurowane timery, ani nawet jak wygląda obsługa przerwania.
A z domyślania się to może kaszanka wyjść ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2016, o 08:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Ok, ale co do samej pętli while(1) jeszcze - toś namieszał teraz zupełnie :D

-----

Timery wyglądają na poprawnie skonfigurowane.
Rozumiem, że pętla while(1) to już Twoja twórczość? A nie pomieszany mój kod?

Nie mam możliwości teraz bawić się na "żywym organizmie".

Kurcze, sam byłem ciekawy jak to można sprytnie zrobić, miałem nadzieję, że ktoś oblatany pokaże.
Może jeszcze ktoś się odezwie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2016, o 12:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Sprawdź dokładnie - to w pętli while to na pewno nie mój kod! Źle coś wkleiłeś chyba, przecież to się rzuca w oczy.
Nie mówię, że mój kod dobry, to tylko moje próby, ale tak jak masz teraz to zupełnie sensu nie ma...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2016, o 17:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Ok, po prostu w kodzie, który podałeś było co innego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2016, o 22:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Chłopie - ten kod, który wrzuciłeś, to jakiś żart - to miało działać?
I jeszcze piszesz, że tam mój fragment siedzi. To masakra!
Jak coś wklejasz, to sprawdzaj czy dobrze. A nie, że masz dwie pętle while(1), do tego mój kod pomieszany... ;)
Masz tu całość, poprawioną. Taki kod wklej i skompiluj. Dodałem w swoim fragmencie tylko a=0; b=0; po spełnieniu Timera3, bo tak faktycznie wszystkie timery działały tylko za pierwszym razem, a potem działał już tylko Timer3. Teraz za każdym razem działają wszystkie po kolei.
Więc proszę, sprawdź:

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: 20 lut 2016, o 15:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Spoko, nie denerwuję się ;)
Wkleiłeś po prostu jakiś dziwny kod i nie mówię wcale o zakomentowanym kodzie. Dwa while(), do tego dwa razy if(Timer3) i już nie patrzyłem nawet czy coś jeszcze, to nie mogło działać jak trzeba. No ale dość już o tym ;)
Błąd w 49? Czyli? Bo coś mi się nie zgadza. U mnie nie było błędów. Na pewno popraw linię 48, bo ja miałem diodę wpiętą pod PB0, a teraz widzę że zapomniałem zmienić na Twój pin.
A jak wyskakuje Ci jakiś błąd i piszesz o tym na forum, to napisz co to za błąd. W przeciwnym wypadku na pewno nikt Ci nie pomoże.
Więc jak, działa jak miało?



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

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