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



Teraz jest 28 mar 2024, o 18:29


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 ]
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: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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: 1146
Lokalizacja: Kraków
Pomógł: 93

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