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? 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 10 lip 2025, o 09:17


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