Skocz do zawartości

Arduino i timery - problem ze zrozumieniem preskalerów


Pomocna odpowiedź

11 minut temu, Peposh napisał:

 

 ale mruganie jest zbyt wolne(kilka sekund dla clk/256). Podejrzewam, że jest to kwestia dopasowania wartości x w ifach.

"x" nie wiele ma do rzeczy...im nizszy preskaler tym szybciej ma migac...przy 8 to juz ma swiecic "ciagle"..hmm

 

14 minut temu, Peposh napisał:

 

 

@farmaceuta Skupiałem się głównie na tym, że dioda miga wolniej na 8 niż na 64 😉.

Dokladnie tej odpowiedzi potrzebowalem...czyli dziala to dokladnie jak u mnie...czyli zle...to pewnke jak zmierzysz czasy to tez bedzie jechalo jak z 8Mhz...prubowalem z Arduino 1.8.8, ale rowniez wersja 1.8.13 tak ze raczej w dwoch nie grzebanych wersjach raczej prockow nie pomylili...po tych timerach to psychiatra na mnie zarobi...he🤕

@farmaceuta Jeśli używasz kodu w stylu:

TCCR2B |= (1 << CS21);  //preskaler na 8
	

to oże warto najpierw sprawdzić, jaka wartość jest w TCCR2B przed wykonaniem tej instrukcji?

Załóżmy że bit CS22 jest ustawiony na 1, czy wtedy faktycznie tym kodem ustawiasz preskaler na 8?

  • Pomogłeś! 1
3 minuty temu, Elvis napisał:

 

to oże warto najpierw sprawdzić, jaka wartość jest w TCCR2B przed wykonaniem tej instrukcji?

Podobno ten rejestr  jest wypelniony zerami z automatu...(ale sprawdzic moge jak najbardziej)

14 minut temu, Elvis napisał:

 

Załóżmy że bit CS22 jest ustawiony na 1, czy wtedy faktycznie tym kodem ustawiasz preskaler na 8?

Nie no jesli chce 8 to ustawiam tylko CS21 na 1 i tyle...byc moze chcialem mi tu cos wiecej przekazac a ja nie lapie do konca..😢

4 minuty temu, farmaceuta napisał:

Podobno ten rejestr  jest wypelniony zerami z automatu...(ale sprawdzic moge jak najbardziej)

Po prostu sprawdź, wtedy będziesz wiedział, czy jest czy nie jest. Ja sprawdzałem i u mnie CS22 jest ustawiony.

A jeśli będzie ustawiony, to wtedy warto wrócić do programu i przeanalizować jak on działa - to bardzo dobre ćwiczenie. Bo błąd jest w linijce:

TCCR2B |= (1 << CS21);  //preskaler na 8
	

 

  • Pomogłeś! 1
3 minuty temu, farmaceuta napisał:

Nie no jesli chce 8 to ustawiam tylko CS21 na 1 i tyle...byc moze chcialem mi tu cos wiecej przekazac a ja nie lapie do konca..😢

Chodzi o to że gdy używasz bootloadera to bity nie są zerowane. Łatwo można sprawdzić: gdy masz załadowany program przez bootloader a program nieprawidłowo się wykonuje to spróbuj go zresetować ręcznie.

Dlatego też u mnie problem nie występował gdyż po wgraniu wsadu przez isp mikrokontroler jest resetowany sprzętowo 

29 minut temu, Elvis napisał:jaka wartość jest w TCCR2B przed wykonaniem tej instrukcji?

 

Załóżmy że bit CS22 jest ustawiony na 1, czy wtedy faktycznie tym kodem ustawiasz preskaler na 8?

Jestes geniuszem!...😅 dziala!! No szkurde komu by do glowy przyszlo ze tam cos napaprane jest...obilo mi sie o oczy ze tam sa zera domyslnie w tym preskalerze itp..😈 ale ale...zeby nie bylo tak kolorowo to problem jeszcze nie zazegnany bo..

 

16 minut temu, Peposh napisał:

Częstotliwości dla 32: ok 16[Hz] , dla 8 ok 66 [Hz]

Powinna byc dwa razy wieksza!..dla 32/32....8/128...o ile teraz to nie problem sobie przeskalowac to jednak powinienem miec tych przerwan dwa razy wiecej a tak to mi rozdzielczosc ucieka...

(edytowany)
43 minuty temu, _LM_ napisał:

Chodzi o to że gdy używasz bootloadera to bity nie są zerowane. Łatwo można sprawdzić: gdy masz załadowany program przez bootloader a program nieprawidłowo się wykonuje to spróbuj go zresetować ręcznie.

niestety reczny reset nie pomagal...widocznie ardu cos sobie tam ustawia na start i tyle...az z ciekawosci sprawdze pozniej co tam sie dzieje na start, teraz tylko dojsc z ta czestotliwoscia no i ponownie sprawdze tryb CTC bo wczesniej nie chodzil wcale...

ps. dziekuje WSZYSTKIM! za pomoc😉

Edytowano przez farmaceuta
7 godzin temu, _LM_ napisał:

Tak z tym że nie potrzebujesz AVR studio, wystarczy zwykły programik do ładowania wsadu.

Np. Jaki? Bo ten AS to tylko chyba stk500 lyka( w kazdym razie icsp mi nie lyka) a avrdude nie chce mi die zainstalowac...😕 no chcialbym tam z ciekawosci na te fusy luknac.. 

W środowisku Arduino niema? Ja używam MkAVRcalc z tym że wersja demo chyba nie obsługuje m328, no ja mam pełną. W sumie nie wiem co Ci doradzić. Szukaj czegoś w rodzaju AVR fusebit programator itd... 

 

Kombinowałem z tymi rejestrami i zauważyłem, że timer jest domyślnie ustawiony w trybie "PWM, phase correct". Po ustawieniu trybu normalnego udało się podwoić częstotliwość mrugania. Problem bardzo podobny do poprzedniego 😀 

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(115200);
  Serial.println("///////");

  TCCR2A &= !(1 << WGM20) | !(1 << WGM21);
  TCCR2B &= !(1 << WGM22);                              //ustawianie timera w tryb normalny- bity WGM20, WGM21, WGM22 równe zero

  TCCR2B &= !(1 << CS22) | !(1 << CS21) | !(1 << CS20); //zerowanie bitów prescalera

  // TCCR2B |= (1 << CS22) | (1 << CS21) | (1 << CS20); //preskaler na 1024
  //TCCR2B |=  (1 << CS22) | (1 << CS21); //preskaler na 256
  // TCCR2B |=  (1<<CS22) | (1<<CS20);    //128
  //  TCCR2B |= (1 << CS22); //preskaler na 64
  // TCCR2B |= (1 << CS21) | (1 << CS20); //32
  TCCR2B |= (1 << CS21); //preskaler na 8
  // TCCR2B |= (1 << CS20); //preskaler na 1

  TIMSK2 |= (1 << TOIE2);  //wlaczenie przerwania od przepelnienia
  // TIFR2 |= (1 << TOV2);

  sei();                 // przerwania globalne wlacz
}

//reszta bez zmian

 

  • Lubię! 1
  • Pomogłeś! 1
(edytowany)
36 minut temu, Peposh napisał:

Kombinowałem z tymi rejestrami i zauważyłem, że timer jest domyślnie ustawiony w trybie "PWM, phase correct".

Juz sie kapnalem pol godziny temu...😂haha...i z ciekawosci zajrzalem do TCCR2A...no i wlasnie WGM20 ustawiony na 1 (bit nr. 0) jeden z trzech ustawiajacych tryb...po wyzerowaniu hula jak ma hulac...szok poprostu!! to juz chyba 4 dzien timerowy byl na dwa watki a taka pierdola...😅 na przyszlosc juz czlowiek bedzie madrzejszy i bedzie zagladal do tych rejestrow...dziekuje bardzo wszystkim za pomoc i cierpliwosc do mnie!!

dodam tylko ze tryb CTC w cudowny sposob rowniez zaczal dzialac..😉

Edytowano przez farmaceuta
  • Lubię! 2

No i temu przeważnie "pluję" na to całe Arduino, niby fajne ale jak przyjdzie do zrobienia czegoś konkretniejszego to musisz się przebijać przez dokumentację żeby znaleźć co tam gdzie ktoś sobie poustawiał. Fajnie że udało się rozwiązać palące problemy sądzę że nauka nie pójdzie w las 🙂 

  • Lubię! 2

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...