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



Teraz jest 18 kwi 2026, o 18:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 11 gru 2013, o 21:26 
Offline
Nowy

Dołączył(a): 11 gru 2013
Posty: 8
Pomógł: 0

Witam,
czy jest możliwość użycia dwóch timerów sprzętowych do obsługi dwóch timerów programowych o różnej rozdzielczości?
Jeden standardowy 10ms, a drugi 1ms lub mniej?
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2013, o 21:35 
Offline
Moderator
Avatar użytkownika

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

a czemu by nie - ale zawsze powtórzę - UWAGA! ... rozdzielczość 1 ms w C ... może cię zgubić .... nie rób tego - no 5 ms to już bywa za mało ... chyba że mamy taktowanie 20MHz ... bezpiecznie i optymalnie jest startować od 10 ms

a do innych celów wykorzystywać timery sprzętowe ...

_________________
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: 11 gru 2013, o 21:37 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Odpowiedź : TAK ale chyba cię to nie zadowoli. Może dokładniej sprecyzuj osochozi.
Dodam, że dwa timery programowe 1ms i 10ms można teoretycznie obsłużyć jednym timerem sprzętowym tykającym co 1ms. Tylko wtedy jaki ma sens timer programowy 1ms?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2013, o 21:44 
Offline
Moderator
Avatar użytkownika

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

perlon napisał(a):
Dodam, że dwa timery programowe 1ms i 10ms można teoretycznie obsłużyć jednym timerem sprzętowym tykającym co 1ms


I bardzo słuszna uwaga ;) tylko warto też wziąć to co napisałem wyżej odnośnie czasu 1 ms ;)

_________________
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: 11 gru 2013, o 21:48 
Offline
Nowy

Dołączył(a): 11 gru 2013
Posty: 8
Pomógł: 0

10ms używam praktycznie do wszystkiego, ale do obsługi silnika krokowego bipolarnego to trochę za dużo (nierówno pracuje), a przy 1ms już całkiem ładnie pracuje.
ATMega16, kwarc 16MHz.

Czyli lepiej użyć do tego celu timer sprzętowy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2013, o 22:04 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Zerkam tęsknie w kierunku DIY frezarki CNC. Oglądając wykonywane konstrukcje sterowników silników krokowych często widziałem rozwiązania: jedna mega8 na jeden silnik + jednostka zarządzająca. Dlaczego? Żeby nie robić timerów programowych i puszczać na nich trzech silników, a wykorzystywać wyłącznie sprzętowe. Chyba coś w tym jest.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2013, o 23:26 
Offline
Moderator
Avatar użytkownika

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

Batat napisał(a):
Czyli lepiej użyć do tego celu timer sprzętowy?


Wszystko jeszcze zależy jak napiszesz kod w takim timerze programowym. 1ms to mało - jak się pisze w asemblerze, dobrze w asemblerze to wtedy 1 ms to może być ok tak jak 10 ms w C ... no ale pisać wszystko w asm ??? no chyba że na jakimś ATtiny13

_________________
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: 11 gru 2013, o 23:31 
Offline
Nowy

Dołączył(a): 06 gru 2013
Posty: 11
Pomógł: 0

Witam

Panie Mirku nibył by jakiś poranik na temat TIMERY ?
Bardzo mi te poradniki pomagajom



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2013, o 23:45 
Offline
Nowy

Dołączył(a): 11 gru 2013
Posty: 8
Pomógł: 0

W assemblerze to nie :P

Włączyłem drugi timer (Timer0) i coś nie działa mi teraz nawet ten do timerów programowych (Timer2)... nie bardzo wiem czemu, czy coś źle zrobiłem?
Na razie Timer0 w przerwaniu robi "nic".

Część kodu odpowiedzialna za inicjację i obsługę przerwań:
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: 12 gru 2013, o 07:43 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Batat napisał(a):
W assemblerze to nie :P

Włączyłem drugi timer (Timer0) i coś nie działa mi teraz nawet ten do timerów programowych (Timer2)... nie bardzo wiem czemu, czy coś źle zrobiłem?
Na razie Timer0 w przerwaniu robi "nic".

Część kodu odpowiedzialna za inicjację i obsługę przerwań:

Brak komentarzy w kodzie to nie jest dobry styl programowania...
A w BB i na forum tyle już o tym napisano :-(

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 10:58 
Offline
Nowy

Dołączył(a): 11 gru 2013
Posty: 8
Pomógł: 0

MirkoT napisał(a):
Brak komentarzy w kodzie to nie jest dobry styl programowania...
A w BB i na forum tyle już o tym napisano :-(

To był tylko wycinek kodu, bez komentarzy.

squeez napisał(a):
@Batat - nadpisujesz rejestr TIMSK i pewnie tu jest problem (reszty nie analizowałem).

I tu był błąd, rejestr TIMSK trzeba ustawić za jednym razem, dzięki za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 11:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Wykorzystywanie dwóch timerów sprzętowych dla zrealizowania zwykłych opóźnień to moim zdaniem jawne marnotrawstwo. Oczywiście kolega Mirek ma rację, że programowe odliczacze przy wysokiej częstotliwości są bardzo ryzykowne i 10ms wystarcza w 90% przypadków. Wspomnieć jednak warto, że ryzyko gęstego wywoływania przede wszystkim dotyczy budowy timerów 16-o bitowych i większych. Może wtedy nastąpić sytuacja, która napsuje nerwów ile wlezie z jaką się osobiście ostatnio spotkałem (jak zwykle przez przypadek ;) ). Otóż przy jakimś tam programie mój 16-o bitowy timer, był aktualizowany w przerwaniu (co 1ms) tylko, że to co dostawałem w zamian to była jakaś loteria!. Okazało się, że zmienna licznikowa do timera w przerwaniu dochodziła tam w ...kawałkach co w efekcie dawało różnej długości odcinki czasowe. I to jest właśnie to wspomniane ryzyko!
No ale nie demonizujmy, nie jest tak do końca źle jak by się wydawało ;) . Oczywiście jeśli dobrze wszystko zaplanujesz i same przerwania nie będą zajęte jakimiś ciężkimi obliczeniami, a w pętli głównej prawidłowo odczytasz to co zawartość przerwań przekaże to możesz zagęścić częstotliwość tylko pamiętaj o tych 16-u bitach (i większych liczbach też oczywiście). Dla przykładu niech posłuży jeden z moich projektów (bascomowych co warto wspomnieć). Mam tam timer w przerwaniu wywoływanym z częstotliwością 25kHz (czyli co 40us) przy zegarze 16MHz i wszystko działa jak należy. Tyle, że przerwanie było naprawdę dobrze zaplanowane i nie było mowy o jego nadwyrężaniu. Dla pętli głównej zostało bardzo dużo czasu i wszystko pięknie działa bez czkawki :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2013, o 13:02 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
I to jest właśnie to wspomniane ryzyko!


Tzn ja bym zwrócił uwagę - że ryzyko wiąże się jeszcze z czym innym równie ważnym ... tzn ryzyko w tych przypadkach to może za duże słowo - bo jak się dobrze wszystko przemyśli to można sporo wycisnąć ale ...

oczywiście jeśli chodzi o timery programowe ....

odpalanie ich co 1 ms (i nie ważne w oparciu o jaki timer sprzętowy) ... niesie za sobą już ŚCISŁĄ kontrolę tego tzn tych funkcji, które są odpalane co 1 ms ;) .... bo czas nagle mega krótki - a rzadko kto, nie znający jeszcze asemblera - sprawdzi sobie ile czasu zajmuje mu funkcja wywoływana co 1 ms!. Tymczasem dość łatwo przekroczyć czas 1 ms w takim przypadku - a wtedy co mamy ? ;) .... wtedy mamy extra sieczkarnię ;)

efekty są nieco podobne jak w sytuacji gdy np w przerwaniach sprzętowych ktoś korzysta z _delay_ms() albo obsługi LCD czy innych dłuższych procesów. Wtedy przerwania się nakładają i efekt jest taki - że wygląda jakby przerwania działały w miarę ok ale program główny prawie nie żyje ...

Niestety w przypadku timerów programowych efekt będzie nieco bardziej koszmarny i ciężko będzie nawet nieraz w ogóle dojść co jest powodem takiego a nie innego zachowania programu. To już prawie takie efekty specjalne jak przy problemach ze stosem ;) o których wspominam w Greenbooku, tyle że tu przy timerach programowych nawet tego wprost nie sprawdzimy takim narzędziem jakie opisałem w książce :(

otóż nakładające się wywołania (zbyt częste a zbyt długie) timerów programowych co 1 ms ... będą obleśnie rozciągały (że użyję takiego kociego określenia) ;) ... wszystko w programie głównym ... wtedy nie dość że zacznie się sypać wszystko co ma działać co 1 ms to jeszcze się okaże - że zacznie mieć to wpływ także nawet na inne timery programowe .... efekty więc będą przedziwne w zależności od tego co kto spłodzi jeśli chodzi o kod źródłowy ;) i nie do opisania w jakiś prosty sposób - żeby podpowiedzieć że np ..... jak źle zrobisz to możesz spotkać się z problemem X albo Y albo Z

_________________
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  
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 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