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



Teraz jest 28 paź 2024, o 12:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
 Tytuł: Przerwanie...
PostNapisane: 23 kwi 2012, o 14:58 
Offline
Nowy

Dołączył(a): 23 kwi 2012
Posty: 5
Pomógł: 0

Jak Pan Mirek zaznacza przerwania powinny wykonywać się jak najszybciej.
Ja mam pytanie: czy w często zachodzącym przerwaniu warunek logiczny ma znaczący wpływ na opóźnienie?
Korzystam z zestawu ATB 1.03 i postanowiłem napisać prosty zegarek z wykorzystaniem LCD i biblioteki z płyty załączonej do książki.
Po kilku godzinach od uruchomienia opóźnienie wynosiło kilka sekund(porównywałem z zegarkiem PC synchronizowanym z serwerem czasu)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Odliczanie do przepełnienia licznika obliczałem tak:
2^16 - F_CPU / preskaler / żądana_częstotliwość_przerwania =>
65536 - 11 059 200 / 1024 / 1 = 65536 - 10800 = 54736

_________________
ATB rev:1.03



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2012, o 15:25 
Offline
Moderator
Avatar użytkownika

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

Święta prawda z tym jak najszybszym wykonywaniem się przerwań ;) ale....

.... po pierwsze gdybyś już aż tak bardzo potrzebował wyżyłować przerwanie tzn jego czas (chociaż w tym przypadku nie ma to już większego sensu o czym za chwilę) to skorzystałbyś z trybu CTC Timera1 a nie tak jak teraz z przerwania od przepełnienia przez co w przerwaniu MUSISZ wpisywać wartość TCNT1 .... ;) w razie czego to pamiętaj że tu tracisz już kilka cykli zegara ;) .... tym bardziej dla Timera1 gdzie trzeba liczbę 16-bitową wpisać

po drugie - oczywiście że taki warunek IF nie ma większego znaczenia - chodzi raczej o to żeby nie wpaść na pomysł np wyświetlania czegoś na LCD w przerwaniu albo stosowania jakichś pętli itp ....

po trzecie - nie jesteś pierwszym i na pewno nie ostatnim, który spróbował zrobić sobie SUPER dokładny zegarek - chociaż i tak kilka sekund na kilka godzin to niezły wynik :) .... Ale to dlatego że korzystasz z kwarca a nie z wen. oscylatora

OK co byś nie robił - to i tak nigdy nie uzyskasz SUPER wyniku tą metodą i nawet nie idź w tym kierunku ;)

jakbyś nie wiedział to kwarce też mają swoją tolerancję no i na dodatek wraz z upływem czasu potrafi się ona zmieniać (pogarszać) .....

Jak chcesz zrobić dokładniejszy zegarek to zrób go na kwarcu zegarkowym 32,768kHz podpiętym pod wejścia asynchroniczne Timera2 - ale to też nie da ci w żadnym wypadku atomowego wzorca czasu ;)

--------

odnośnie czasu wykonywania twojego przerwania - to nie ma ONO NAJMNIEJSZEGO wpływu w takiej postaci jak jest na to że zegarek się późni bądź śpieszy bo i tak czas pomiędzy przerwaniami jest ogromny - masz bardzo krótką obsługę przerwania ;) ..... a ta niedokładność która ci wychodzi spowodowana jest wprost niedokładnością kwarca

próba robienia super dokładnych zegarków na prockach to jak poszukiwanie świętego grala - nie uda się. Nawet specjalizowane układy RTC mają pewne tolerancje niedokładności

..... aha i jeszcze weź pod uwagę że taki zegarek jaki próbujesz robić tzn może to odmierzanie czasu jest zależne od temperatury otoczenia

zamiast więc - siedzieć godzinami i obserwować czy procek dokładnie odmierza sekundy - weź lepiej zrób coś innego ;) albo jakiś zegarek na kwarcu zegarkowym - one dają szansę uzyskać nieco większą dokładność i co więcej można sobie go nawet programowo korygować nieco..... Zresztą ten też ;) .... skoro co 5 godzin późni ci się np o 3 sekundy to co 5 godzin odejmuj 3 sekundy i już będzie dużo dużo lepiej

_________________
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 kwi 2012, o 16:23 
Offline
Nowy

Dołączył(a): 23 kwi 2012
Posty: 5
Pomógł: 0

Jak to pięknie wygląda - pytanie, a pod spodem wyczerpująca odpowiedź :) Tak powinny wyglądać wszystkie tematy na elektrodzie! ;)
Zapytam jeszcze o drobny szczegół.
Timer 16-bitowy pomieści max. liczbę 2^16-1= 65535, a więc przepełnienie nastąpi z 65536-tym tyknięciem zegara, a za kolejnym przejście do obsługi przerwania?
Pytam z ciekawości bo zastanawiałem się czy odjąć te 10800 od liczby 65536 czy 65535, chociaż to raczej bez znaczenia

_________________
ATB rev:1.03



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 kwi 2012, o 19:34 
Offline
Moderator
Avatar użytkownika

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

Timer tyknie zawsze 65536 razy ;) ale ..... ale uwaga - przyzwyczaj się do myślenia że to oznacza zliczenie od 0 do 65535 a nie do 65536 ;)

a tą wyliczoną liczbę jak mówiłem lepiej na przyszłość wpisuj do rejestru OCRx ustawiając tryb CTC timera - wtedy nie będziesz się w ogóle borykał z jakimś tam odejmowaniem. Jak chcesz żeby zliczył ci 15 impulsów to wpiszesz 15 jak chcesz żeby odliczył 25800 to wpiszesz 25800

rozumiesz ? ;)

_________________
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: 4 ] 

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