logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Dlaczego _delay_ms generuje za długie opóźnienia przy F_CPU 1MHz?

tata_tasiemka 25 Lut 2012 14:11 1755 15
REKLAMA
  • #1 10596403
    tata_tasiemka
    Poziom 10  
    Dzię dobry,
    czy ktoś z Państwa orientuje się dlaczego funkcja _delay_ms generuje opóźnienie nieadekwatne do żądanego?

    W programie diody podpięte do portu c powinny zapalać się i gasić co sekundę, tymczasem one zapalają sie i gasną co 5 sekund. W momencie gdy zmienię częstotliwość taktowania zegara z 1MHz na 200kHz wtedy dopiero gasną i zapalają się co 1 sekundę.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Za cenne uwagi z góry serdecznie dziękuję i pozdrawiam. Tata.
  • REKLAMA
  • REKLAMA
  • #3 10596563
    mirekk36
    Poziom 42  
    Zamiast kompilować to w AVR Studio 5 - zrób sobie tak dla testu:

    1. odpal AVR Studio 4.xx
    2. wykasuj z tego kodu linijkę z #define F_CPU !!! (bo tego się nigdy nie robi)
    3. ustaw częstotliwość taktowania we właściwościach projektu
    4. skompiluj i wgraj do procka

    okaże się że w cudowny sposób wszystko działa - a potem poczytaj na forum dlaczego w kocim AVR Sudio5 są z tym problemy.

    Chyba że źle zgadłem i nie robisz tego w AVR Studio - to wtedy sprawdź dokładnie czy dobrze masz ustawione taktowanie procka ale za pomocą FUSEBITÓW bo za pomocą #define F_CPU tego nie zrobisz.
  • #4 10596580
    tata_tasiemka
    Poziom 10  
    mikrokontroler to atmega8, natomiast jeśli chodzi o fusebity to pojęcia nie mam bo takowych nie ustawiałem. mniemam że tu leży pies pogrzebany. jak odczytam to napiszę.
  • #5 10596588
    dondu
    Moderator na urlopie...
    tata_tasiemka napisał:
    natomiast jeśli chodzi o fusebity to pojęcia nie mam bo takowych nie ustawiałem. mniemam że tu leży pies pogrzebany. jak odczytam to napiszę.

    to jak zmieniałeś to:

    tata_tasiemka napisał:
    W momencie gdy zmienię częstotliwość taktowania zegara z 1MHz na 200kHz ...

    ... pomijam już skąd 200kHz?
  • REKLAMA
  • #6 10596597
    mirekk36
    Poziom 42  
    tata_tasiemka napisał:
    mikrokontroler to atmega8, natomiast jeśli chodzi o fusebity to pojęcia nie mam bo takowych nie ustawiałem. mniemam że tu leży pies pogrzebany. jak odczytam to napiszę.


    No no - dokładnie ;) z tym pogrzebanym psem tak może być. Tyle że jeśli to nowy procek ze sklepu - to na pewno jest taktowany 1MHz z wew. oscylatora skoro nie zmieniałeś - zatem jeśli we właściwościach projektu ustawiasz sobie 1MHz to musi ci _delay_ms(1000); dobrze działać.
  • REKLAMA
  • #8 10596621
    tata_tasiemka
    Poziom 10  
    mirekk36, robie to w avr studio 4 i bez wzgledu na to czy pisze #define F_CPU..., czy ustawiam częstotliwość taktowania we właściwościach projektu opóźnienia są inne niż zamierzone. to musi chodzić o ustawienie fusebitów. a tak na marginesie zapytam dlaczego uważasz nie definiuje się częstotliwości mikrokontrolera w linii kodu?

    Dodano po 1 [minuty]:

    dondu, dziękuję Ci z link'a.
  • #9 10596629
    dondu
    Moderator na urlopie...
    tata_tasiemka napisał:
    ... a tak na marginesie zapytam dlaczego uważasz nie definiuje się częstotliwości mikrokontrolera w linii kodu?

    Dlatego: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    tata_tasiemka napisał:
    dondu, dziękuję Ci z link'a.

    Podziękuj Mirkowi bo to jego program i darmowy dla tego mikrokontrolera :)
  • #10 10596638
    Naimad_86
    Poziom 16  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    nie prościej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Po co mieszać w to pętle jak i tak to zostanie przetworzone automatycznie...
  • #11 10596695
    szyko1
    Poziom 15  
    Że tak odbiegnę od tematu, czy to w ogóle możliwe?
    mirekk36 napisał:

    _delay_ms(1000); .

    jeśli dokumentacja tej funkcji mówi że
    The maximal possible delay is 262.14 ms / F_CPU in MHz.
  • #13 10596723
    szyko1
    Poziom 15  
    Wielkie dzięki, nie wiedziałem.
    Pozdrawiam
  • #15 10596750
    gaskoin
    Poziom 38  
    Żeby dobrze generować ten czas niezbędne jest włączenie optymalizacji. Masz takową włączoną ?
  • #16 10597520
    tata_tasiemka
    Poziom 10  
    Tak. Rozumiem że chodzi Ci o parametr -Os w poleceniu kompilacji.
REKLAMA