Arduino Polska Forum
Jak zrobić timer - Przejście z Mega na Due - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Jak zrobić timer - Przejście z Mega na Due (/watek-jak-zrobi%C4%87-timer-przej%C5%9Bcie-z-mega-na-due)



Jak zrobić timer - Przejście z Mega na Due - Burakko - 23-03-2017

Pewnie błahy dla tych co się znają ale ja nie wiem od czego zacząć. Zrobiłem komputer spalania na Arduino Mega 2560 do auta ale problem miałem z czasem wyświetlania LCD TFT. Więc zmieniłem na Wyświetlacz sterowany po SPI. Dużo lepiej ale nie rozwiązywało to mojego problemu. Namówili mnie na pewnym forum bym zainwestował w Arduino Due. Rzeczywiście po podpięciu do LCD czas odświeżania wyświetlacza kosmiczny. Super wszystko chodzi... Lecz mam 2 problemy z moim programem. Z jednym mam nadzieje sam sobie poradzić ale drugi to timery i nie wiem od czego zacząć. Oczyściłem kod z lini obliczeń. Sam timer wygląda to tak:

Kod:
int x, counter;

void setup() {

 noInterrupts();          
 
 TCCR1A = 0;
 TCCR1B |= ((1 << CS10) | (1 << CS11));
 TIMSK1 |= (1 << TOIE1);
 TCNT1 = 3036;

 Interrupts();          
}

void loop() {

Serial.print(x);

ISR(TIMER1_OVF_vect) {
 counter++;
   if(counter > 3) {
      x++;
        counter = 0;  
    }
  TCNT1 = 3036
 }


Oczywiście Due posiada timery 32 bitowe i ilość opcji jest potężna jak na moją wiedzę w tej chwili. A manual do bydle księga. Nie wiem od czego zacząć. Proszę pomóżcie. Auto rozgrzebane a wszędzie piszą - przeczytaj manuala. To jak uczyć sie mongolskiego z mongolskiej książki. Jażdy wie że zawiera wszystko co potrzebne ale jak zacząć...


RE: Jak zrobić timer - Przejście z Mega na Due - namok - 23-03-2017

A pytanie gdzie?
Czemu nie użyjesz bibliotek np.: https://github.com/ivanseidel/DueTimer


RE: Jak zrobić timer - Przejście z Mega na Due - Burakko - 23-03-2017

Znalazłem tą bibliotekę ale nie wiem jak jej użyć... Nie ukrywam też że chciał bym poznać używanie timerów w arduino due gdyż kiedyś i tak będę musiał poznać ich istotę.


RE: Jak zrobić timer - Przejście z Mega na Due - namok - 23-03-2017

(23-03-2017, 19:38)Burakko napisał(a): Znalazłem tą bibliotekę ale nie wiem jak jej użyć... Nie ukrywam też że chciał bym poznać używanie timerów w arduino due gdyż kiedyś i tak będę musiał poznać ich istotę.
Opis do biblioteki jest w miarę jasny i konkretny.
Zadałeś sobie chciaż trud uruchomienia przykładu SimpleTimer.pde?
Zmieniasz zawartość funkcji myHandle(), zmieniasz częstotliwość wywołania w funkcji Timer3.start(50000) i masz to co potrzebujesz.


RE: Jak zrobić timer - Przejście z Mega na Due - Burakko - 27-03-2017

Kod:
void TC3_Handler(){
   TC_GetStatus(TC1, 0);
   
}

void startTimer(Tc *tc, uint32_t channel, IRQn_Type irq, uint32_t frequency){
 
   pmc_set_writeprotect(false);
   pmc_enable_periph_clk((uint32_t)irq);  
   
   TC_Configure(tc, channel, TC_CMR_WAVE|TC_CMR_WAVSEL_UP_RC|TC_CMR_TCCLKS_TIMER_CLOCK4);
   uint32_t rc = VARIANT_MCK/128/frequency;
   
   TC_SetRA(tc, channel, rc/2);
   TC_SetRC(tc, channel, rc);
   TC_Start(tc, channel);
   
   tc->TC_CHANNEL[channel].TC_IER = TC_IER_CPCS;
   tc->TC_CHANNEL[channel].TC_IDR = ~TC_IER_CPCS;
   NVIC_EnableIRQ(irq);
}

void setup() {
 startTimer(TC1, 0, TC3_IRQn, 1);
 
}

void loop() {

}

Użyłem takiego kodu. W rutynie TC3_Handler() będą się działy rzeczy z częstotliwością 1Hz. Poroblem w tym iż dzieje mi się tylko 4 razy. Wyjaśnię to tak. Program mieli rzeczy na wyświetlacz w kółko. A w Handler wykonuje tylko obliczenia 1/sec. Sprawdziłem to tak. W loop dałem serial.print("ekran "); a w handler serial.println("sec ");. Na terminalu wypisuje tak:

e e e e e e e e e e e e sec
e e e e e e e e e e e e sec
e e e e e e e e e e e e sec
e e e e e e e e e e e e sec
sec
sec
sec
itd....

Dlaczego tylko 4 razy ?

Oczywiście to wywaliłem: counter++;  if(counter > 3) x++;  counter = 0;   //wcześniej było dla tego że timer liczył tylko 0,25s i musiał to 4 razy powrzyć.


RE: Jak zrobić timer - Przejście z Mega na Due - namok - 27-03-2017

Przeczytaj jeszcze raz to co napisałem w poprzednim poście.


RE: Jak zrobić timer - Przejście z Mega na Due - Burakko - 27-03-2017

Rozumiem "użyj gotowej biblioteki" ale chcę rozkumac jak jej nie używać by więcej informacji poznać. Każdy pisze że nikt nic nie rozumie albo Znajdź sobie w manualu. Więc tak chce zrobić. Poprostu zrozumieć 32bitowe timery.