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



Teraz jest 28 mar 2024, o 15:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 22 maja 2023, o 09:51 
Offline
Użytkownik

Dołączył(a): 22 lip 2018
Posty: 31
Pomógł: 0

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 .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2023, o 10:02 
Offline
Moderator
Avatar użytkownika

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

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.

_________________
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: 22 maja 2023, o 23:38 
Offline
Nowy

Dołączył(a): 13 kwi 2016
Posty: 22
Pomógł: 1

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 maja 2023, o 09:59 
Offline
Użytkownik

Dołączył(a): 22 lip 2018
Posty: 31
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 maja 2023, o 12:34 
Offline
Użytkownik

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

Sprobuj zrobic clean projektu i wtedy kompilację


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 maja 2023, o 12:41 
Offline
Moderator
Avatar użytkownika

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

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

_________________
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: 24 maja 2023, o 23:02 
Offline
Użytkownik

Dołączył(a): 22 lip 2018
Posty: 31
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2023, o 01:02 
Offline
Moderator
Avatar użytkownika

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

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?

_________________
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: 25 maja 2023, o 17:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2023, o 22:23 
Offline
Użytkownik

Dołączył(a): 22 lip 2018
Posty: 31
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2023, o 09:05 
Offline
Użytkownik

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

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.



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