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

Programowanie AVR w C. Jak napisać funkcję opóźniającą?

piwcci 23 Sie 2006 11:07 1959 5
REKLAMA
  • #1 2943967
    piwcci
    Poziom 12  
    Posty: 81
    Ocena: 2
    Witam serdecznie,
    mój probelm dotyczy programowania mikrokontrolerów w C. Problem dość banalny ale nei moge nigdize znalezc informacji.
    Mam mikrokontroler Atmega 128, pod niego został podłącony zewnętrzny rezoanator kwarcowy 14.7456 MHz. Musze napisać program do obługi LCD i z tym nei bede miła wiekszego problemu niestety nie wiem jak napisać prostą funkcje opóżniająca o 1ms. Czy ktoś moze mi wyjaśnic w jaki sposób przy uzyciu petli for napisac tak funkcje??? i ile cykli zegara potrzeba na wykonanie takiej petli???
    Z gór wielkie dzieki za pomoc:)
  • REKLAMA
  • #2 2944082
    sp3uqw
    Poziom 12  
    Posty: 12
    Pomógł: 1
    Zainteresuj sie plikiem delay.h w WinAVR, tam są gotowce realizujące pętle opóźniające o zadanej długiości w ms i us.

    Przykład
    
    #include <util/delay.h>
    ...
    delayms(100); 
    



    szczegóły patrz delay.h
  • REKLAMA
  • #3 2944336
    SnowBizz
    Poziom 15  
    Posty: 134
    Pomógł: 9
    Ocena: 4
    Witam. podepne sie do pytania kolegi, żeby nie pisać nowego posta.
    Otóż chciałem się dowiedzieć na ile dokładne jest takie opóźnienie czasowe..? Bo robiąc przecież jakiś zegar na kwarcu 8MHz i wbudowanym timerze nie da sie uzyskać równej sekundy... Czy pisząc więc program z użyciem delayms da się uzyskać czas równy dokładnie 1s?
  • REKLAMA
  • #4 2944536
    piwcci
    Poziom 12  
    Posty: 81
    Ocena: 2
    O bibliotece nie wiedzialem wiec dzieki bardzo za info. do do poprzedniego posta to równiez jestem ciekawa na ile dokladne sa takie funkce opózniające.

    Pozdrawiam:)
  • REKLAMA
  • #5 2944839
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    SnowBizz napisał:

    ...Bo robiąc przecież jakiś zegar na kwarcu 8MHz i wbudowanym timerze nie da sie uzyskać równej sekundy...

    A kto Ci naopowiadał takich głupot :?:
    Timer1 w trybie CTC,OCR1A=31250,preskaler=256 i masz zegarek , o niebo dokładniejszy od pętli delay , jednak nie super dokładny , bo zakładając idealny kwarc , to taki zegarek opóźni się o 1 s po odmierzeniu 8000000 sekund.

    Piotrek
  • #6 2948774
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Hej

    Jeżeli chodzi o funkcje opóźniające w C to warto jeszcze zerknąć do dokumentacji kompilatora ponieważ mają one swoje ograniczenia. Tu cytat odnośnie funkcji _delay_ms

    "The maximal possible delay is 262.14 ms / F_CPU in MHz."

    Pozdrawiam!
REKLAMA