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? 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 26 lip 2025, o 01:39


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 10 kwi 2021, o 16:17 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 14 wrz 2012
    Posty: 24
    Pomógł: 0

    Prośba o odpowiedź w żołnierskich słowach.
    Timer po inicjalizacji mruga sobie na skutek zgłoszenia przerwania CTC diodą podłączona do wyjścia OC1(PD5). Jednocześnie obsługa przerwania zarządza miganiem innej diody podłączonej do pinu PC1. Według mojego rozumowania, które ni msi być właściwie, obie diody powinny mrugać synchronicznie, mozliwe ze ta w obsłudze przerwania może być lekko opóźniona, ale to opóźnienie powinno być stałe, natomiast w rzeczywistości diody sie rozjeżdząja z upływem czasu, raz migaja naprzemiennie, a raz synchronicznie. Dlaczego?
    Przerwanie wywoływane jest ok. 8 razy na sekundę.
    Poniżej zarządzający tym miganiem kod.

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

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 18:37 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Wygląda na to, że częstotliwość diody podłączonej do PC1 jest 2 razy mniejsza od częstotliwości z OC1.

    ------------------------ [ Dodano po: 42 minutach ]

    Jednak to nie to.
    Czy w pętli main masz jeszcze jakiś kod?
    Bo to on może być przyczyną.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 21:34 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 14 wrz 2012
    Posty: 24
    Pomógł: 0

    Owszem w Pętli jest kod, ale przecież obsługa przerwania ma priorytet, a miganie obu diod jest z nim powiązane. Generalnie chodzi mi o to jaki to ma wpływ na precyzje odmierzania czasu, bo jeśli pierwsza dioda, ta na OC1A jest obsługiwana wyłącznie sprzętowo, to można chyba uznać, że jej miganie jest precyzyjne, co natomiast z miganiem w obsłudze przerwania. Korci mnie żeby napisać jakąś funkcję porównującą liczbę mignięć obu diod w funkcji czasu. Biorę pod uwagę, ze w przypadku drugiej diody, mogą to być oscylacje wokół punktu odniesienia, a nie gubienie zdarzeń.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 21:41 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Jak nie namieszasz w pętli głównej to obie diody migają prawidłowo.
    Mam podejrzenia co do twojego problemu, ale nie pokazałeś co masz w kodzie, to tylko mogę wróżyć ze szklanej kuli, ale niech będzie.
    Robisz jakąś inną operację na porcie C poza przerwaniem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 21:51 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 14 wrz 2012
    Posty: 24
    Pomógł: 0

    W pętli głównej mam tylko polecenie wywołanie timer1_ini(), i niestety rozjeżdża się jeszcze bardziej, nawet sei() wywaliłem przed pętlę i obsługę diod w sensie kierunku portu.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 22:00 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Masz w kodzie coś co wpływa na te diody poza częścią którą już pokazałeś.
    Uruchomiłem ten kod u siebie i diody chodzą równiutko jak w zegarku.
    Mogę Ci nawet zrzut z analizatora zrobić.
    Natomiast łatwo je nieświadomie "rozjechać".



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 22:02 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 14 wrz 2012
    Posty: 24
    Pomógł: 0

    Hmmm, wygląda na to jakby obsługa przerwania spowalniała działanie, to pewnie sprawa stosu, tak cos czuje..... jak pozostawiłem tylko miganie w obsłudze przerwania, to działa zacnie, a przynajmniej nie widać róznicy, jak dodam zliczanie, to się zaczyna spóźniac

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 22:23 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    To nie stos.
    Jakiego typu są te f1.
    Robisz z tym coś jeszcze?
    Najlepiej pokaż cały kod który Ci źle działa.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 14:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 324
    Lokalizacja: Rybnik
    Pomógł: 23

    Funkcji inicjalizującej timer
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    nie możesz używać w pętli głównej, tylko w funkcji main.
    A funkcję
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    najlepiej jest umieszczać bezpośrednio przed pętlą główną
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Inaczej cały kod ci się rozjedzie.

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 19:55 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 14 wrz 2012
    Posty: 24
    Pomógł: 0

    Dzięki mario2015, wywaliłem przed pętlę i stał się cud - obie diody migają razem. Na razie do końca nie rozumiem dlaczego tak jest, sądziłem ,ze w zależności od rozmiarów pętli i miejsca w którym program akurat się znajduje gdy nadejdzie żądanie przerwania zależy czas startu obsługi tego przerwania, ale umieściłem timer_ini w pustej pętli i diody niemal zwariowały, znaczy ta druga, czasami widać było że gubi mrugnięcia. Posiedzę nad tym kiedyś, żeby to pojąć dogłębnie, a na razie przerwania przed pętlę i tyle!
    Cały kod działał dobrze, tylko zastanawiało mnie dlaczego miganie diod się rozjeżdża. Te diody stanowią tylko pomoc przy zabawach z timerami. Jak się okazało bardzo cenną, gdyby nie one nie zauważyłbym że cos nie jest ok, przynajmniej na tym etapie. Jeszcze raz dzięki!

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:53 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Wstaw cały swój program przed ostatnią zmianą. Wtedy na pewno ktoś wyjaśni, gdzie popełniłeś błą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: 11 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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