• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Timer1 pracujący jako licznik - Wiatromierz
#1
Witam 
Głównym moim zamierzeniem było zliczanie impulsów z halotronu wiem, że mógłbym to zrobić na zwykłych przerwaniach sprzętowych ale nie chciałem zamulać głównego programu dużą ilością przerwań, dlatego zdecydowałem się na użycie timera jako licznika korzystającego z zewnętrznego wejścia zegarowego T0. W moim wypadku generatorem jest czujnik Halla. Wszystko było dobrze gdy pisałem to dla timera 0 wszystko działa pięknie niestety nie mam wtedy dostępu do timerów z biblioteki Timer.H z których korzystam już w skumulowanym programie. Dlatego chciałem użyć Timer1 i tu jest problem, bo jak dla Timera 0 działa wszystko to dla 2 prawie nic.

Kod dla timera0
Kod:
//volatile int encoder1 = 500;
volatile long long int przepel=0;
volatile int licznik=0;


void setup ()
{
 Serial.begin(9600);

 cli();
  // reset Timer 0
 TCCR0A = 0;            
 TCCR0B = 0;              

 // set compare match register to desired timer count:
 // turn on CTC mode:
 TCCR0A = bit (WGM01);

 // Timer 0 - counts events on pin D4
 TIMSK0 = bit (OCIE0A);   // interrupt on Timer 0 CTC

  TCNT0 = 0;      //counter to zero    
  licznik = TCNT0;
 // start Timer 0
 // External clock source on T0 pin (D4). Clock on rising edge.
 TCCR0B =  bit (CS02) | bit (CS01) | bit (CS00);
 sei();
}  // end of setup

ISR(TIMER0_COMPA_vect)
{
przepel++;
}

void loop ()
{
 Serial.println(TCNT0);
}
  
Kod dla Timera1
Kod:
volatile long long int przepel=0;
volatile int licznik=0;


void setup ()
{
 Serial.begin(9600);

 cli();
  // reset Timer 1
 TCCR1A = 0;            
 TCCR1B = 0;              

 // turn on CTC mode:
 TCCR1A = bit (WGM11);

 // Timer 1 - counts events on pin D6 T0
 TIMSK1 = bit (OCIE1A);   // interrupt on Timer 1 CTC

  TCNT1 = 0;      //counter to zero    
  licznik = TCNT1;
 // start Timer 1
 // External clock source on T0 pin (D4). Clock on rising edge.
 TCCR1B =  bit (CS12) | bit (CS11) | bit (CS10);
 sei();
}  // end of setup

ISR(TIMER1_COMPA_vect)
{
przepel++;
}

void loop ()
{
 Serial.println(TCNT0);
}

Mam arduino Leonardo. 

Będę z góry wdzięczny za odpowiedź. Smile
 
Odpowiedź
  


Wiadomości w tym wątku
Timer1 pracujący jako licznik - Wiatromierz - przez keczub - 05-01-2016, 04:13

Skocz do:


Przeglądający: 1 gości