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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 18 kwi 2025, o 03:14


    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: 27373
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ś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: 27373
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO