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



Teraz jest 29 cze 2024, o 01:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 12 lis 2013, o 18:45 
Offline
Użytkownik

Dołączył(a): 10 lis 2013
Posty: 48
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 18:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 18:55 
Offline
Użytkownik

Dołączył(a): 10 lis 2013
Posty: 48
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 19:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 19:05 
Offline
Użytkownik

Dołączył(a): 10 lis 2013
Posty: 48
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 19:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 19:27 
Offline
Użytkownik

Dołączył(a): 10 lis 2013
Posty: 48
Pomógł: 0

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

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 19:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 20:04 
Offline
Użytkownik

Dołączył(a): 10 lis 2013
Posty: 48
Pomógł: 0

dioda led jak dam na 8mhz to miga jak szalona



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 21:26 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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ć.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 22:17 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2013, o 22:40 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 14:07 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 15:08 
Offline
Użytkownik

Dołączył(a): 15 cze 2013
Posty: 599
Lokalizacja: Lubin
Zbananowany użytkownik

Pomógł: 35

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.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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