ATNEL tech-forum
https://forum.atnel.pl/

Funkcja delay ms a taktowanie procesora.
https://forum.atnel.pl/topic24485.html
Strona 1 z 1

Autor:  elektrykapradnietyka [ 22 maja 2023, o 09:51 ]
Tytuł:  Funkcja delay ms a taktowanie procesora.

Witam.

Czy to jest normalne, że w zależności od taktowania uC funkcja _delay_ms zmienia swoje działanie?
U mnie działa to w ten sposób, że przy f=1MHz, dealy działa poprawnie, czyli 1 s to 1 s.
Natomiast zmieniając na taktowanie 8MHz, wówczas 1 s to 1/8 s .

Autor:  mirekk36 [ 22 maja 2023, o 10:02 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

Bo opcją zmiany taktowania w eclipse nie zmieniasz fizycznie taktowania procka. Masz procka domyślnie taktowanego 1MHz i dlatego tu ci przypadkowo dobrze działa. Zainteresuj się fusebitami, bo one są do zmiany taktowania.

Autor:  skandal_obyczajowy [ 22 maja 2023, o 23:38 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

elektrykapradnietyka napisał(a):
Czy to jest normalne, że w zależności od taktowania uC funkcja _delay_ms zmienia swoje działanie?


Tak, to jest normalne. W opcjach projektu masz zadeklarowaną prędkość działania procesora (częstotliwość taktowania). Dajmy na to, że masz 1MHz. Twój procek, załóżmy, działa z fabrycznym ustawieniem, czyli taktowanie z wewnętrznego źródła o częstotliwości 1MHz. Ok, czyli ustawienie w projekcie jest zgodne ze stanem faktycznym. Piszesz jakiś programik, testujesz sobie _delay_ms(100) i faktycznie opóźnienie wynosi 100ms. Jeśli jednak w ustawieniach projektu zadeklarujesz, że prędkość wynosi 8MHz, a NIE ZMIENISZ TEGO RÓWNIEŻ W PROCKU, to program "będzie myślał, że procek działa osiem razy szybciej i inaczej "zbuduje sobie" funkcję delay. Oczywiście wtedy _delay_ms(100); będzie trwał 800ms, bo procek nadal działa tylko na 1MHz

Autor:  elektrykapradnietyka [ 23 maja 2023, o 09:59 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

mirekk36 napisał(a):
Bo opcją zmiany taktowania w eclipse nie zmieniasz fizycznie taktowania procka. Masz procka domyślnie taktowanego 1MHz i dlatego tu ci przypadkowo dobrze działa. Zainteresuj się fusebitami, bo one są do zmiany taktowania.


Ja właśnie zmieniałem częstotliwość w oparciu o fusebity.

Próbowałem też robić tak, że zmieniałem częstotliwość z 1 MHz na 8 MHz w projekcie w zakłądce properties i częstotliwość w procku w oparciu o fusebity. Tak z czystej ciekawości, co się stanie.

Mimo tego, funkcja _delay_ms i tak przyspieszała.

Czy w tym przypadku tak też powinno się stać z funkcją delay??

Autor:  micky [ 23 maja 2023, o 12:34 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

Sprobuj zrobic clean projektu i wtedy kompilację

Autor:  mirekk36 [ 23 maja 2023, o 12:41 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

elektrykapradnietyka napisał(a):
Próbowałem też robić tak, że zmieniałem częstotliwość z 1 MHz na 8 MHz w projekcie w zakłądce properties i

do tego masz MkAvrCalculator

Autor:  elektrykapradnietyka [ 24 maja 2023, o 23:02 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

mirekk36 napisał(a):
do tego masz MkAvrCalculator


Jak do tej pory byłem przekonany że częstotliwość ustawiona w eclipse musi się zgadzać z tą, ustawioną we fusebitach, do prawidłowego działania projektu.
W takim razie, po co ustawia się częstotliwość w eclipse, skoro to nic mi nie daje, a przynajmniej w moim przypadku??
Pytam z czystej ciekawości.

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

Cytuj:
Sprobuj zrobic clean projektu i wtedy kompilację


Zrobiłem, ale to nic nie dało.

------------------------ [ Dodano po: 18 minutach ]

Tak swoją drogą, jestem w tym momencie przy ćwiczeniu PWM z Bluebooka.
Kolejny mój problem do rozwiązania jest taki, że przy taktowaniu 1MHz diody się rozjaśniają i ściemniają, ale widać jeszcze ich mruganie.
Czy dobrze teraz powiem, że w tym przypadku muszę coś zrobić z częstotliwością występowania przerwań ??
Oczywiście, jestem jeszcze zielony i nie wiem jak się za to zabrać.

Czy koledzy znają rozwiązanie problemu??

Autor:  mirekk36 [ 25 maja 2023, o 01:02 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

elektrykapradnietyka napisał(a):
Czy koledzy znają rozwiązanie problemu??

Ja znam i jest oczywiste jak drut i słońce i już ci je podałem - ustaw fusebity w mkavrcalculatorze. Ale ty czytasz i nie słuchasz - piszesz później coś swojego - to jak ci pomóc?

Autor:  xentis [ 25 maja 2023, o 17:40 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

elektrykapradnietyka napisał(a):
Czy koledzy znają rozwiązanie problemu??
Mam wrażenie że nie rozumiesz podstaw działania uC.
To z jaką prędkością działa mikrokontroler zależy tylko i wyłącznie od fusebitów.
Natomiast w eclipse, w propertisach projektu dla porządku ustawia się tę samą wartość, ale NIE dla tego że tak trzeba i bez tego nie będzie wogule działać. Chodzi o, że niektóre funkcje/makra są w oparciu o tę ustawioną wartość przeliczane podczas kompilacji.
Weźmy tę wspomnianą funkcję (a bardziej makro) _delay_ms. To nie jest typowa funkcja do której możesz przekazać zmienna. Wartość wpisywana w nawiasie musi być stałą dosłowną, czyli taką która w momencie kompilacji ma konkretną namacalną wartość.
I tu ważne jest by zrozumieć dla czego. Otóż uC nie ma żadnego stopera, zegarka czy innych takich gadżetów. Ma tylko zegar taktujący, który tyka ze stałą ustaloną wartością. Sam uC ma listę rozkazów których większość wykonuje w 1 takcie zegara, czyli mamy tu można powiedzieć najmniejszą jednostkę czasu jaką jest takt zegara. I teraz makro _delay_ms działa w ten sposób że jeśli wpiszemy np. _delay_ms(10), to podczas kompilacji zostanie to przeliczone na liczbę pustych rozkazów których sumaryczny czas wykonywania będzie odpowiadał właśnie tym 10ms. Ale żeby to zostało dobrze przeliczone, tzn. by ten dalay trwał rzeczywiste 10ms, to właśnie w propertisach projektu musi być podana wartość zegara taktującego z jaką rzeczywiście jest taktowany procek, eclipse tego z procka NIE odczyta, to programista musi o ten wpis zadbać. A konsekwencją niezgodności tego wpisu z rzeczywistą wartością taktowania są właśnie rozjechane delaye.
A więc jeśli u Ciebie ma miejsce przypadek takich rozjechanych delayów, a twierdzisz że dobrze ustawiasz taktowanie w fusach i tożsamą wartość w projekcie, i robisz clean projektu po zmianach taktowania; to przychodzi mi do głowy jeszcze tylko jedna rzecz która jest przypadłością eclipse, a o której pośrednio Mirek wspomina w poradnikach. A chodzi o kreatora projektu, i o to by podczas kreatora NIE wybierać procka i NIE ustawiać taktowania, tylko przeklikać do końca kreatora i po utworzeniu projektu dopiero wejść w properties i ustawić właściwy procek i taktowanie. Bo jak się to robi podczas kreatora to często się dzieją później dziwne rzeczy.
Sprawdź ten trop i potestuj.

Autor:  elektrykapradnietyka [ 25 maja 2023, o 22:23 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

micky napisał(a):
Sprobuj zrobic clean projektu i wtedy kompilację


Nie wiedzieć czemu, po utworzeniu nowego projektu (kopia starego) i zrobieniu cleana, zarówno jeden jak i drugi projekt zaczęły działać prawidłowo.
Wcześniej też robiłem clean i nic.
Można popaść we frustrację, ale problem rozwiązany.

Dzięki Pany.

Autor:  micky [ 26 maja 2023, o 09:05 ]
Tytuł:  Re: Funkcja delay ms a taktowanie procesora.

No i pięknie.
Tak jak wspominał kolega, procek nie wie z jaką śmiga prędkością i kompilator potrzebuje tych informacji (F_CPU), żeby odpowiednio 'dobrać' czasówki do np. delayów. Z tego też powodu, najprostszym testem czy masz dobrze poustawiane to zapalanie leda co np 10sek i sprawdzenie czy się zgadza ze stoperem.
A najlepiej to mieć najprostszy analizator logiczny (za doslownie 30-50zl) i popatrzeć na przebiegi. Taki analizator przyda sie do wielu, wielu rzeczy w cyfrówce.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/