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 17 maja 2025, o 00:23


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
    Autor Wiadomość
    PostNapisane: 27 maja 2013, o 13:33 
    Offline
    Nowy

    Dołączył(a): 03 paź 2012
    Posty: 14
    Pomógł: 0

    Witam,
    używam timera 16bit CTC i gdy następuje przerwanie to wykonywany jest określony podprogram i czy w tym momencie timer jest zatrzymany? I czy zlicza dopiero ponownie po wykonaniu podprogramu? Czy w C idzie zrobić tak żeby timer cały czas pracował i generował cyklicznie te przerwania?

    pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 13:44 
    Offline
    Użytkownik

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

    Pomógł: 23

    Licznik idzie cały czas na okrętkę zgodnie z wybranym trybem bez względu na to jaka i czy w ogóle jest procedura obsługująca przerwanie. Trzeba tylko uważać, aby procedura obsługi przerwania wykonała się szybciej niż nastąpi kolejne zgłoszenie przerwania, bo zaraz po jej zakończeniu zostanie ponownie wykonana nie dając szans na zrobienie czegokolwiek innego.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 13:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 sty 2013
    Posty: 844
    Lokalizacja: Przemyśl
    Zbananowany użytkownik

    Pomógł: 43

    topic2875.html#p34423
    też miałem z tym problem ;)

    Czyli: w procedurze przerwania jak masz jakiś "podprogram" przerwanie jest wyłączone do czasu jego zakończenia.

    _________________
    Klimatyzacja Przemyśl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 14:19 
    Offline
    Moderator
    Avatar użytkownika

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

    Cytuj:
    używam timera 16bit CTC i gdy następuje przerwanie to wykonywany jest określony podprogram i czy w tym momencie timer jest zatrzymany? I czy zlicza dopiero ponownie po wykonaniu podprogramu?


    Ja się zawsze zastanawiam skąd biorą się pomysły o tym, że timer miałby się zatrzymać ... a niby z jakiej to okazji ? Timer sprzętowy to Timer ... i albo go wystartujesz (ty programista) albo go sam zatrzymasz (ty programista) .... on sam z siebie się nigdy nie zatrzyma ....

    W trybie CTC zlicza do zadanej przez ciebie wartości, po czym się zeruje i znowu do niej zlicza ....

    Cytuj:
    ... Czy w C idzie zrobić tak żeby timer cały czas pracował i generował cyklicznie te przerwania?


    Więc w C nic się nie robi żeby cały czas pracował i generował przerwania CTC ;) po jego wystartowaniu to się dzieje wciąż automatycznie

    _________________
    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: 27 maja 2013, o 14:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 gru 2012
    Posty: 146
    Lokalizacja: Racibórz
    Zbananowany użytkownik

    Pomógł: 0

    Też miałem z tym problem w ATMega 8 o czym już pisałem. Dałem sobie z tym spokój i przeszedłem na ATmega 16. Tutaj timer i przerwania działają mi prawidłowo. Jaka przyczyna tego zjawiska to niestety nie wiem. I chyba nikt nie wie bo brak konkretnej odpowiedzi na post.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 15:14 
    Offline
    Moderator
    Avatar użytkownika

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

    stachn napisał(a):
    Też miałem z tym problem w ATMega 8 o czym już pisałem. Dałem sobie z tym spokój i przeszedłem na ATmega 16.


    Czyli nie rozwiązałeś problemu tylko go obszedłeś dookoła .... niestety

    stachn napisał(a):
    Tutaj timer i przerwania działają mi prawidłowo


    W Atmega8 także wszystkie przerwania działają dobrze, zastanów się - bo pisząc to wygląda jakbyś odkrył tajemnicę, o której przez TYLE lat ile istnieje biedna m8 na rynku - nikt nie wiedział :(

    stachn napisał(a):
    Jaka przyczyna tego zjawiska to niestety nie wiem. I chyba nikt nie wie bo brak konkretnej odpowiedzi na post.


    Pewnie, że nie ma odpowiedzi jednoznacznej bo ty tam sobie coś powymyślałeś że ci nie działa - i szukałeś raczej potwierdzenia, że komuś innemu też nie działa :( ..... zamiast zbadać problem swojego kodu źródłowego a w nim masz kłopot

    napisałeś tam tak:

    stachn napisał(a):
    Natomiast ATmega 8 reaguje na narastające zbocza prawidłowo tzn wykrywa je ale nie uruchamia timera0 w przerwaniu.


    nie ma takich zjawisk .... ewidentnie coś źle robisz programowo i to wszystko na ten temat. A taki sposób "obchodzenia" problemu zamiast jego rozwiązywania niestety jeszcze nie raz przyprawi ci tzw siwych włosów na głowie

    Piszę to ponieważ nie chcę żeby w tym wątku ktoś przeczytał poradę - że jeśli mu ATmega8 nie działa to lepiej wziąć inny procek ? bo co to za porada ? no przykro mi ale żadna - bardziej wprowadza w błąd innych ...

    _________________
    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: 27 maja 2013, o 20:50 
    Offline
    Nowy

    Dołączył(a): 03 paź 2012
    Posty: 14
    Pomógł: 0

    No właśnie trochę to dziwne, wykorzystuję timer jako czasomierz i gdy stosuję taką metodę że mam przerwanie co 1ms zliczam do 1000 i to traktuję jako 1s to zegar mi się spóźnia a gdy zrobię to przerwanie co 1 sekundę to działa prawidłowo. Wychodzi mi na to że jakby timer się zatrzymywał wykonał podprogram i startował dalej i nigdzie nie mogę się doczytać jak to dokładnie jest. Wcześniej jak pracowałem na ST7 to było coś takiego że mógł się zatrzymywać lub nie.
    Zależy mi jednak na przerwaniu co 1ms i jak to ugryźć :-/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 20:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 sty 2013
    Posty: 844
    Lokalizacja: Przemyśl
    Zbananowany użytkownik

    Pomógł: 43

    W samym przerwaniu zwiększ tylko licznik ms, ewentualnie jak jeszcze do czegoś Ci jest to potrzebne to ustaw flagę.

    _________________
    Klimatyzacja Przemyśl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 21:06 
    Offline
    Moderator
    Avatar użytkownika

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

    CeBe napisał(a):
    No właśnie trochę to dziwne, wykorzystuję timer jako czasomierz i gdy stosuję taką metodę że mam przerwanie co 1ms zliczam do 1000 i to traktuję jako 1s to zegar mi się spóźnia


    Do robienia zegarów są układy RTC a nie takie zabawy niestety. Poza tym kto wie co ty w kodzie tego przerwania robisz. 1ms to niewiele dla takiego AVR'ka w porównaniu do popędzanego np 2x większym taktowaniem ARM'a/STM'a

    _________________
    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: 27 maja 2013, o 21:14 
    Offline
    Nowy

    Dołączył(a): 03 paź 2012
    Posty: 14
    Pomógł: 0

    No właśnie wiem że są RTC, buduję zegar na DCF i w przerwaniu zliczam także czas trwania sygnału DCF i jak zegar będzie mi się spóźniał kilka sekund na dobę to nie będzie źle jak złapie sygnał DCF to się zsynchronizuje. A teraz przy takiej metodzie to dużo się spóźnia około 15 sekund na godzinę. I moim problemem jest właśnie prawdopodobnie zatrzymywanie się timera. Przerwanie co 1 sekundę działa ok.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 maja 2013, o 22:23 
    Offline
    Moderator
    Avatar użytkownika

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

    jeszcze raz ci mówię odpuść sobie robienie w ten sposób zegarka bo to totalna pomyłka jakaś :(

    mówiąc układ RTC mam na myśli np PCF8583

    a jeszcze raz powtórzę zainteresuj się ile zajmuje ci procedura obsługi przerwania bo to w niej się nie wyrabiasz a jak masz jeszcze inne przerwania odpalone to zapomnij już w ogóle o robieniu zegarka tą metodą

    _________________
    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: 29 maja 2013, o 11:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 mar 2013
    Posty: 39
    Pomógł: 0

    Czytając ten wątek i inne pochodne odnośnie programowania zegarków wszelakiej maści. Nasunęło mi się pytanie:

    Jeśli chciał bym zaprogramować "czasomierz", który miał by odmierzać czas od np. 5 minut do zera to czy warto oprzeć się wtedy na wewnętrznym oscylatorze procesora? Jeśli taki zegarek ma służyć do odmierzania czasu np. tury w grze planszowej, to nie musi być super dokładny.

    Dodatkowo zastanawia mnie:
    Przy użyciu jednego systemu przerwania do multipleksowania wyświetlaczy siedmiosegmentowych, warto jest "zaprzęgnąć" do pracy drugi w celu taktowania zmiany czasu? Czy po prostu oprzeć się na delayach w programie głównym? (dla 5 minut chyba nie będzie tragedii).

    Dodam, że bluebooka już czytałem ale na razie tylko raz, więc mogę jeszcze nie do końca wszystko rozumieć i coś przekręcać.

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 11:40 
    Offline
    Moderator
    Avatar użytkownika

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

    oczywiście że do takiego celu można wykorzystać wewn. oscylator - toż w tej grze czy minie 5 min i 10 s to chyba nikt głowy ci nie urwie i nie będzie mierzył z taką dokładnością tego czasu\

    oczywiście że jako podstawę do liczenia tego czasu można spokojnie wykorzystać przerwanie od multipleksowania

    ale dalsze dywagacje o delayach - to już w tym przypadku zgroza ;) .... po co delaye, skoro masz ten czas w przerwaniu odliczać ?

    _________________
    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: 29 maja 2013, o 11:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 mar 2013
    Posty: 39
    Pomógł: 0

    mirekk36 napisał(a):
    oczywiście że jako podstawę do liczenia tego czasu można spokojnie wykorzystać przerwanie od multipleksowania

    ale dalsze dywagacje o delayach - to już w tym przypadku zgroza ;) .... po co delaye, skoro masz ten czas w przerwaniu odliczać ?


    Hmmmm... chciał bym to dobrze zrozumieć. Czyli musiał bym to zrealizować np. w postaci: ustawić taktowanie w przerwaniu na np. 50hz po czym musiał napisać podprogram licznika, który po policzeniu do 50 zmieniał by czas (ustawiał kolejną wartość dla sekundy) po czym uległ by wyzerowaniu i zliczał dalej do 50?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 12:14 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    @Markus
    W rozdziale 8.4 jest dokładnie to o co pytasz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2013, o 12:17 
    Offline
    Moderator
    Avatar użytkownika

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

    #ciamciak# napisał(a):
    @Markus
    W rozdziale 8.4 jest dokładnie to o co pytasz.


    No dokładnie w książce i na DVD są na to przykłady - najprostsze z możliwych - bez jakichś optymalizacji i udziwnień - po to tylko aby zrozumieć o co chodzi i załapać ideę .... bo to jest najważniejsze - jak do tego podchodzić. A pisanie kodu to sprawa drugorzędna ....

    dlatego proszę książkę przeczytać jeszcze raz tzn chociaż te wszystkie rozdziały z ćwiczeniami praktycznymi a nie na wyrywki, to od razu sporo rozwiązań się w głowie pojawi ;)

    a jak coś będzie niezrozumiałe - to BACH i pytanie na forum i pomagamy zrozumieć

    _________________
    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: 29 maja 2013, o 12:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 mar 2013
    Posty: 39
    Pomógł: 0

    Dzięki wielkie, zatem wracam do czytania :D



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