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

LPC1768 - Timer TIM0 wolne odliczanie, zmiana stanu P3.25 co 1s, dioda

mariuszterba 31 Maj 2014 13:57 1374 5
REKLAMA
  • #1 13650797
    mariuszterba
    Poziom 10  
    Posty: 53
    Ocena: 1
    Napisałem program bez użycia LPC175x_6x CMSIS-Compliant Standard Peripheral Firmware Driver Library, który co 1 s ma zmieniać stan P3.25 na przeciwny. Do pinu P3.25 podpięta jest dioda dzięki czemu mogłem zaobserwować zmiany i zmierzyć czas. Jednak moje obliczenia nie pokrywają się z wynikiem wykonywanego programu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    LPC1768 taktowany jest 100 MHz, korzystam ze wzoru CLK/PR/MR0 czyli 100 000 000 Hz / 10 000 / 10 000 = 1 Hz = 1 s.
    Z mojego pomiaru (zegarek z sekundnikiem :) wychodzi znacznie ponad 1s, czas dochodzi do ~4 s. Gdzie popełniam błąd ?
  • REKLAMA
  • #2 13650960
    mi14chal
    Poziom 28  
    Posty: 1021
    Pomógł: 112
    Ocena: 23
    Pewnie dlatego że zegar do timera jest 4 razy wolniej taktowany niż taktowanie uC.
  • REKLAMA
  • #3 13651046
    mariuszterba
    Poziom 10  
    Posty: 53
    Ocena: 1
    Tzn., co masz na myśli ?
  • REKLAMA
  • #4 13651331
    mi14chal
    Poziom 28  
    Posty: 1021
    Pomógł: 112
    Ocena: 23
    To że jest inny zegar który taktuje peryferia w uC.
  • REKLAMA
  • Pomocny post
    #5 13651452
    KamilCWK
    Poziom 11  
    Posty: 68
    Pomógł: 5
    Ocena: 2
    Spójrz na rysunek
    LPC1768 - Timer TIM0 wolne odliczanie, zmiana stanu P3.25 co 1s, dioda

    na czerwono zaznaczyłem jak cclk jest dzielone i dociera do peryferiów uC. Są dwa rejestry, które decydują ile razy będzie dzielony cclk PCLKSEL0 i PCLKSEL1. Dwa tylko dlatego, że w jednym niae zmieściło się by pomieścić wszystkie podziały dla peryferiów. Oto wycinek rejestru PCLKSEL0
    LPC1768 - Timer TIM0 wolne odliczanie, zmiana stanu P3.25 co 1s, dioda

    dla TIMER0 ustawiasz odpowiednio bity 2 i 3, jak widzisz po resecie bity są wyzerowane a to oznacza CCLK/4
    LPC1768 - Timer TIM0 wolne odliczanie, zmiana stanu P3.25 co 1s, dioda

    Jeżeli chcesz żeby timer był identycznie taktowany jak uC musisz wpisać 01. Dodaj na początku swojego programu
    LPC_SC->PCLKSEL0 |= (1<<2);

    Jeżeli nie ma specjalnej potrzeby nie należy na maksa popędzać peryferiów, gdyż ma to wpływ na pobór prądu.
  • #6 13656312
    mariuszterba
    Poziom 10  
    Posty: 53
    Ocena: 1
    Dzięki za wyjaśnienie. Timer teraz taktowany jest z częstotliwością mikrokotrolera i ma swoją 1 s
REKLAMA