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



Teraz jest 29 mar 2024, o 11:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 8 maja 2022, o 16:28 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

Cześć,
przerabiam poradnik "Analizator, debuger - jak sprawdzić ile czasu trwa funkcja w C" i mam problem z niewłaściwą częstotliwością przerwania. Zamiast pożądanych 100 Hz, uzyskuję 10 Hz.

Mikrokontroler: Atmega644P (16 MHz)
Kanał 1: PB4 (zmiana stanu w pętli głównej co 5 ms)
Kanał 2: PB6 (zmiana stanu w przerwaniu TIMER0) - i tu jest problem

Poniżej zamieszczam kod oraz zrzuty ekranu z Saleae wraz z odczytami.
Proszę o wskazówkę, bo nie mam koncepcji co jest nie tak.

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


ObrazekObrazekObrazekObrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 16:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Po pierwsze, skąd wziąłeś te 5 ms w pętli głównej? Przecież jak w pętli głównej dopiszesz cokolwiek, to czas się wydłuży.
Po drugie co to jest "OCR0A = F_CPU / 1024 / 100; //ok 100 Hz"? Gdzie w kodzie masz zmienną lub makro F_CPU? Bierzesz to z makefile?
Zapisz to tak:" OCR0A=16000000/1024/100" albo wylicz i zapisz jako zmienna.
Mogę się mylić ale do OCR0A jak ja przypisuję, to wyliczoną wartość albo przypisuję ją do jakiegoś makra albo do jakiejś zmiennej, zależy co chcę uzyskać.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 17:17 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

mario2015 napisał(a):
Po pierwsze, skąd wziąłeś te 5 ms w pętli głównej? Przecież jak w pętli głównej dopiszesz cokolwiek, to czas się wydłuży.
Po drugie co to jest "OCR0A = F_CPU / 1024 / 100; //ok 100 Hz"? Gdzie w kodzie masz zmienną lub makro F_CPU? Bierzesz to z makefile?
Zapisz to tak:" OCR0A=16000000/1024/100" albo wylicz i zapisz jako zmienna.
Mogę się mylić ale do OCR0A jak ja przypisuję, to wyliczoną wartość albo przypisuję ją do jakiegoś makra albo do jakiejś zmiennej, zależy co chcę uzyskać.


Raczej się mylisz, kolego. Program jest wprost z poradnika i te 5 ms w pętli głównej ma tam być. Mimo to, próbowałem zakomentować zawartość pętli - nadal na kanale 2 jest 10 Hz.

Nie muszę nigdzie definiować zmiennej F_CPU, bo się tego nie robi. Wartość ta pobierana jest z ustawień procesora w Eclipse (i tam znajduje się właściwy wpis, właśnie 16000000). Gdy do rejestru OCR0A wpiszę wartość 156 (czyli dokładnie 16000000UL / 1024UL / 100UL), jest to samo: 10 Hz na kanale 2.

Spójrz jak to wygląda na analizatorze u Mirka (wklejam screen z analizatora i programu):
ObrazekObrazek

------------------------ [ Dodano po: 36 minutach ]

Gdy zmienię zawartość obsługi przerwania jak niżej (XOR), wówczas uzyskuję poprawne dla takiego zapisu wartości. Stan PB6 zmienia się z częstotliwością 100 Hz, naprzemiennie: co 10 ms mamy stan niski i wysoki.

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


Zrzut ekranu z analizatora:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 17:54 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

mtbchn napisał(a):
mario2015 napisał(a):
Po pierwsze, skąd wziąłeś te 5 ms w pętli głównej? Przecież jak w pętli głównej dopiszesz cokolwiek, to czas się wydłuży.
Po drugie co to jest "OCR0A = F_CPU / 1024 / 100; //ok 100 Hz"? Gdzie w kodzie masz zmienną lub makro F_CPU? Bierzesz to z makefile?
Zapisz to tak:" OCR0A=16000000/1024/100" albo wylicz i zapisz jako zmienna.
Mogę się mylić ale do OCR0A jak ja przypisuję, to wyliczoną wartość albo przypisuję ją do jakiegoś makra albo do jakiejś zmiennej, zależy co chcę uzyskać.


Raczej się mylisz, kolego. Program jest wprost z poradnika i te 5 ms w pętli głównej ma tam być. Mimo to, próbowałem zakomentować zawartość pętli - nadal na kanale 2 jest 10 Hz.

Nie muszę nigdzie definiować zmiennej F_CPU, bo się tego nie robi. Wartość ta pobierana jest z ustawień procesora w Eclipse (i tam znajduje się właściwy wpis, właśnie 16000000). Gdy do rejestru OCR0A wpiszę wartość 156 (czyli dokładnie 16000000UL / 1024UL / 100UL), jest to samo: 10 Hz na kanale 2.

Spójrz jak to wygląda na analizatorze u Mirka (wklejam screen z analizatora i programu):
ObrazekObrazek
Hmmm, a Mirek jaki kwarc używa w swoich testach? Bo ulubiony Mirka to 11059200hz i może dla tego kwarca wartości u Mirka są takie jakie są.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 18:06 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

Cytuj:
Hmmm, a Mirek jaki kwarc używa w swoich testach? Bo ulubiony Mirka to 11059200hz i może dla tego kwarca wartości u Mirka są takie jakie są.
Pozdrawiam.


Generalnie nie ma to większego znaczenia, bo jeśli korzystamy ze wzoru dla OCR0A = F_CPU / 1024 UL / 100 UL to wartość w ten sposób uzyskana zawsze będzie poprawna (a na pewno taka będzie dla rezonatorów 16 MHz i niższych).

Wspomniałem wyżej, że gdy obsługę przerwania zmodyfikuję jak niżej (XOR), to uzyskuję pożądaną częstotliwość. Równo co 10 ms stan PB6 ulega zmianie.

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


Obrazek

Generalnie, ideą tego ćwiczenia jest sprawdzenie czasu trwania funkcji. W przypadku wyjściowym, chcemy sprawdzić ile wykonuje się zmiana stanu na PB6, stąd zapis:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 18:13 
Offline
Moderator
Avatar użytkownika

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

czytam czytam i nie rozumiem w czym twój problem. (mówię o pierwszym poście)

------------------------ [ Dodano po: 1 minucie ]

mtbchn napisał(a):
Kanał 2: PB6 (zmiana stanu w przerwaniu TIMER0) - i tu jest problem

Zamiast opisać JAKI problem, to wstawiasz zagadkę "I TU JEST PROBLEM" ... ale jaki? ... no to już niech się ludzie domyślają tak ? ;)

_________________
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: 8 maja 2022, o 18:25 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

mirekk36 napisał(a):
czytam czytam i nie rozumiem w czym twój problem. (mówię o pierwszym poście)

------------------------ [ Dodano po: 1 minucie ]

mtbchn napisał(a):
Kanał 2: PB6 (zmiana stanu w przerwaniu TIMER0) - i tu jest problem

Zamiast opisać JAKI problem, to wstawiasz zagadkę "I TU JEST PROBLEM" ... ale jaki? ... no to już niech się ludzie domyślają tak ? ;)


Nie. Napisałem w pierwszej wiadomości: "przerabiam poradnik "Analizator, debuger - jak sprawdzić ile czasu trwa funkcja w C" i mam problem z niewłaściwą częstotliwością przerwania. Zamiast pożądanych 100 Hz, uzyskuję 10 Hz."

Problem: "Zamiast pożądanych 100 Hz, uzyskuję 10 Hz."

Dołączyłem również zrzut ekranu, by to zobrazować (stan z analizatora).

Dokładnie tak to wygląda:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Z analizatora:
Obrazek

Wyżej pokazałem, że Timer i odczyt w analizatorze, działa poprawnie, gdy dokonam zapisu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wówczas, zgodnie z założeniem uzyskuję zmianę stanu PB6 cyklicznie co 10 ms.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 18:42 
Offline
Moderator
Avatar użytkownika

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

pokaż jak masz ustawione fusebity w procku

_________________
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: 8 maja 2022, o 19:22 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

Fusebity:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2022, o 19:44 
Offline
Moderator
Avatar użytkownika

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

myślałem że może nie wyłączyłeć CKDIV8 .... ale nie masz go wyłączonego - no to coś jest nie tak - może fizycznie kwarc inny ? bo powinieneś mieć taki przebieg

Obrazek

_________________
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: 8 maja 2022, o 20:06 
Offline
Użytkownik

Dołączył(a): 25 lut 2022
Posty: 38
Pomógł: 5

Zwiększ próbkowanie Saleae do maksimum.



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

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

Dopiero dziś wróciłem do dalszych zmagań. Winowajcą okazał się hub USB. Analizator podłączony bezpośrednio do portu USB, działa już poprawnie.

Przy okazji, czy ktoś z Was może polecić jakiś sprawdzony hub USB w rozsądnej cenie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2022, o 16:33 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Saleae nie lubi hubów - analizator lepiej podpinać bezpośrednio



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: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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