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


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
    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 ] [ Zaznacz wszystko ]
    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: 323
    Lokalizacja: Rybnik
    Pomógł: 23

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

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

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

    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: 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: 2595
    Pomógł: 128

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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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