Witam serdecznie.
Pisze programik do sterowanie silnikiem krokowym. Sterowanie odbywa sie przez driver z wejściami STEP i DIR. Do generowania impulsów na wejściu STEP drivera używam Timera1 w trybie Phase and Frequency Correct w którym wartością TOP jest wartość przechowywana w rejestrze OCR1A (bity WGM13:0 = 9). Mój przypadek polega na tym że częstotliwość jaką otrzymuje na wyjściu OC1A jest dokładnie 2 razy mniejsza niż wynika z moich obliczeń. Kwarc ma 16MHz i procek nie jest ustawiony na wewnętrzne 8MHz.
Według powyższego powinienem uzyskać częstotliwość 100Hz bo
16Mhz/(1024(preskaler) * 2 (bo licznik liczy w gore a potem w doł) * 78 (wartosc TOP z OCR1A))
daje ok. 100Hz. Tymczasem na wyjściu OC1A mam 50Hz. W zasadzie problem jest rozwiązany bo wpisuje po prostu 2 razy mniejsza wartość do OCR1A ale zastanawia mnie jaka jest przyczyna takiego stanu rzeczy. Czy ktoś ma podobne doświadczenia czy ja czegoś nie zrozumiałem z dokumentacji czy może jest w niej jakiś błąd?
Pozdrawiam
Pisze programik do sterowanie silnikiem krokowym. Sterowanie odbywa sie przez driver z wejściami STEP i DIR. Do generowania impulsów na wejściu STEP drivera używam Timera1 w trybie Phase and Frequency Correct w którym wartością TOP jest wartość przechowywana w rejestrze OCR1A (bity WGM13:0 = 9). Mój przypadek polega na tym że częstotliwość jaką otrzymuje na wyjściu OC1A jest dokładnie 2 razy mniejsza niż wynika z moich obliczeń. Kwarc ma 16MHz i procek nie jest ustawiony na wewnętrzne 8MHz.
TCCR1A |= (1<<WGM10);
TCCR1B |= (1<<WGM13)|(1<<CS12)|(1<<CS10); //preskaler 1024
OCR1A = 78;
TCCR1A |= (1<<COM1A0);
Według powyższego powinienem uzyskać częstotliwość 100Hz bo
16Mhz/(1024(preskaler) * 2 (bo licznik liczy w gore a potem w doł) * 78 (wartosc TOP z OCR1A))
daje ok. 100Hz. Tymczasem na wyjściu OC1A mam 50Hz. W zasadzie problem jest rozwiązany bo wpisuje po prostu 2 razy mniejsza wartość do OCR1A ale zastanawia mnie jaka jest przyczyna takiego stanu rzeczy. Czy ktoś ma podobne doświadczenia czy ja czegoś nie zrozumiałem z dokumentacji czy może jest w niej jakiś błąd?
Pozdrawiam