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

regulacja częstotliwości a program
https://forum.atnel.pl/topic4767.html
Strona 1 z 1

Autor:  alvarofun [ 12 lis 2013, o 18:45 ]
Tytuł:  regulacja częstotliwości a program

Witam,

Napisałem sobie program pomiaru temperatury z DS18B20 z wyświetleniem jej na ekranie 4x20.
Mam atmega8a ustawioną na 1mhz w mcu jak i w projekcie programu
pomiar działa doskonale, postanowiłem zmienić częstotliwość mcu na 8mhz, w projekcie programu też dałem na 8, lecz temperatury już nie pokazuje w zwiazku z tym mam pytanie

Czy wszytskie czasy typu
_delay_ms(300) na czestotliwoscie 1mhz przy zwiększeniu częstotliwości np do 8mhz musiał bym pomnożyć przez osiem żeby dobrze pokazywało temperature???

czyli było by
_delay_ms(2400) ?????

Autor:  arturf209 [ 12 lis 2013, o 18:52 ]
Tytuł:  Re: regulacja częstotliwości a program

Nie. Wlasnie dlatego tak ważna jest zmiana w ustawieniach projektu. Zrób clean przed kompilacja.

Autor:  alvarofun [ 12 lis 2013, o 18:55 ]
Tytuł:  Re: regulacja częstotliwości a program

No ale ja robilem clean wszytskich projektów przed kompilacją, i dalem mlotek poszlo ok dalem avr i juz mi sie na 8mhz temperatura nie pokazala

Autor:  arturf209 [ 12 lis 2013, o 19:03 ]
Tytuł:  Re: regulacja częstotliwości a program

Bez kodu możemy sobie tutaj dyskutować o niczym. ;) czy jak wrocisz do slimaczego tempa to wszystko działa jak należy?

Autor:  alvarofun [ 12 lis 2013, o 19:05 ]
Tytuł:  Re: regulacja częstotliwości a program

no właśnie tak :) na 1mhz jest wszytsko ok

Autor:  xbary [ 12 lis 2013, o 19:20 ]
Tytuł:  Re: regulacja częstotliwości a program

Zapewne F_CPU albo w którymś z przeliczników używasz stałej podanej z palca , przypuszczalnie można tak chyba domniemać.

Autor:  alvarofun [ 12 lis 2013, o 19:27 ]
Tytuł:  Re: regulacja częstotliwości a program

ale to F_CPU ma być w pliku main.c ???

może ktoś poda przykład???

Autor:  Krauser [ 12 lis 2013, o 19:37 ]
Tytuł:  Re: regulacja częstotliwości a program

Nie kombinuj, bo nie potrzeba. Jak pamiętasz przykład z miganiem LEDem to tu też go umieść i masz rozwiązanie problemu.

Autor:  alvarofun [ 12 lis 2013, o 20:04 ]
Tytuł:  Re: regulacja częstotliwości a program

dioda led jak dam na 8mhz to miga jak szalona

Autor:  Krauser [ 12 lis 2013, o 21:26 ]
Tytuł:  Re: regulacja częstotliwości a program

Bo właśnie kompilator obliczył opóźnienia dla 1MHz, a jak fusebitami zwiększysz taktowanie na 8MHz to opóźnienie się skraca i jak już było pisane zmieniacz teraz w opcjach projektu taktowanie na takie jak masz w rzeczywistości. Robisz Clean i Build, wgrywasz i ma działać.

Autor:  Grzegorz... [ 12 lis 2013, o 22:17 ]
Tytuł:  Re: regulacja częstotliwości a program

Krauser napisał(a):
Bo właśnie kompilator obliczył opóźnienia dla 1MHz, a jak fusebitami zwiększysz taktowanie na 8MHz to opóźnienie się skraca i jak już było pisane zmieniacz teraz w opcjach projektu taktowanie na takie jak masz w rzeczywistości. Robisz Clean i Build, wgrywasz i ma działać.


A ja sobie tak myślę, że kolega po prostu nie przestawił procka "fusami" na 8 MHz i dlatego "dioda mruga jak szalona".
Poczytaj i odpowiednio zastosuj fusebity i myślę, że wszystko ruszy.

--
Grzegorz...

Autor:  Krauser [ 12 lis 2013, o 22:40 ]
Tytuł:  Re: regulacja częstotliwości a program

Grzegorz... napisał(a):
A ja sobie tak myślę, że kolega po prostu nie przestawił procka "fusami" na 8 MHz i dlatego "dioda mruga jak szalona".

Nie zgodzę się z kolegą. Tak to sobie tłumaczę:
- Jak mam taktowanie 1MHz to 1 rozkaz zajmuje 1/1MHz = 1us, a jak 8MHz to 1/8us (8 razy krócej)
- Jeśli chcemy mieć opóźnienie o 1ms = 1000us -> _delay_ms(1); to procesor musi wykonać 1000 rozkazów dla 1MHz i 8000 dla 8MHz

Jak kompilator otrzymał informację, że ma skompilować na kwarc 1MHz to _delay_ms(1); zamieni na pętlę która wykona 1000 rozkazów. Jeśli teraz taktowanie jest większe i zamiast 1MHz wynosi 8MHz to 1000 rozkazów nie będzie trwało 1ms tylko 1/8ms. Podsumowując jak LED miga szybciej to należy przestawić opcje projektu.
Drugi przykład jak masz projekt skompilowany dla 8MHz to _delay_ms(1) zostaje zamienione na 8000 rozkazów. Jeśli rzeczywiste taktowanie jest mniejsze i zamiast 8MHz masz 1MHz to 8000 rozkazów trwa dłużej i opóźnienie wynosi 8ms. Podsumowując jak LED miga wolniej niż zakłada program to należy przestawić fusebity.

Autor:  Grzegorz... [ 13 lis 2013, o 14:07 ]
Tytuł:  Re: regulacja częstotliwości a program

Krauser napisał(a):
Grzegorz... napisał(a):
A ja sobie tak myślę, że kolega po prostu nie przestawił procka "fusami" na 8 MHz i dlatego "dioda mruga jak szalona".

Nie zgodzę się z kolegą. Tak to sobie tłumaczę:
- Jak mam taktowanie 1MHz to 1 rozkaz zajmuje 1/1MHz = 1us, a jak 8MHz to 1/8us (8 razy krócej)
- Jeśli chcemy mieć opóźnienie o 1ms = 1000us -> _delay_ms(1); to procesor musi wykonać 1000 rozkazów dla 1MHz i 8000 dla 8MHz

Jak kompilator otrzymał informację, że ma skompilować na kwarc 1MHz to _delay_ms(1); zamieni na pętlę która wykona 1000 rozkazów. Jeśli teraz taktowanie jest większe i zamiast 1MHz wynosi 8MHz to 1000 rozkazów nie będzie trwało 1ms tylko 1/8ms. Podsumowując jak LED miga szybciej to należy przestawić opcje projektu.
Drugi przykład jak masz projekt skompilowany dla 8MHz to _delay_ms(1) zostaje zamienione na 8000 rozkazów. Jeśli rzeczywiste taktowanie jest mniejsze i zamiast 8MHz masz 1MHz to 8000 rozkazów trwa dłużej i opóźnienie wynosi 8ms. Podsumowując jak LED miga wolniej niż zakłada program to należy przestawić fusebity.


No i ja dokładnie o tym napisałem może zbyt lapidarnie.
Jeśli kolega zmienił taktowanie tylko w projekcie, a nie podwyższył fizycznie taktowania mikrokontrolera do 8 MHz to po wgraniu kod _delay_ms(1) wykonuje się 8 razy szybciej i stąd szybsze mruganie diody.

--
Grzegorz...

Autor:  OdeOn [ 13 lis 2013, o 15:08 ]
Tytuł:  Re: regulacja częstotliwości a program

Chyba najprościej jak mkAVRCaluculator sie wypowie po wcisnieciu "Sprawdz podłączony AVR" i zajrzenie w Fusy uproszczone.
wg mnie też to wygląda na pozostawionym procku na 1 mhz.

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