Прерывание по таймеру

Тема в разделе "Arduino & Shields", создана пользователем igrok_by, 12 июл 2013.

  1. igrok_by

    igrok_by Нерд

    Добрый день уважаемые программеры. Перерыл много примеров по теме прерывание по таймеру. Нашел более или менее нормальное описание да и с ним туплю. Помогите, подскажите. Мне надо чтобы таймер менял значение сигнала с 0 на 1 и на оборот.
    Вот что есть в инете на это, но куда, что и почём не догоняю.
    Код (C):

    volatile long cntr;

    boolean flip;

    void setup() {

      pinMode(13, OUTPUT);   
      TCCR2A = 0;
      TCCR2B = 2;
      TCNT2=59;
      TIMSK2 |= (1 << TOIE2);

    }

    ISR(TIMER2_OVF_vect) {
      TCNT2=59;//55;
      cntr++;
      if(cntr>9999)
      {
        flip = !flip;
        cntr = 0;
      }
    }

    void loop()
    {
      if(flip) digitalWrite(13, HIGH);  
      else   digitalWrite(13, LOW);  
    }
     
    Поясните пожалуйста
     
  2. XCB

    XCB Гик

    постили бы ссылку по которой нашли код, там наверняка были какието пояснения к нему
    если вкратце
    в основном цикле loop в зависимости от переменной flip на 13 ножку выводим 0 или 1
    а сама переменная flip изменяется в обработчике прерывания TIMER2_OVF_vect строка flip = !flip
    в процедуре setup видимо включается эти самые прерывания по таймеру.
     
  3. nailxx

    nailxx Официальный Нерд Администратор

    Да, это low-level настройка таймера. На уровне регистров AVR. При этом написанная без комметариев, поэтому, чтобы разобраться нужно сверять с даташитом. Я, например, не могу моментально в голове перевести 59 в двоичную систему и вспомним какому биту какая настройка соответствует.

    Для ваших нужд лучше воспользуйтесь библиотекой TimerOne. С ней всё проще.
     
  4. igrok_by

    igrok_by Нерд

    Ладно тогда будем через TimerOne.h развликаться, просто не хотелось *.h использовать. Спасибо за ответы.
    Подскажите куда помесстить TimerOne.h если пишу проги на Arduino 1.0.4?
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    ~/sketchbook/libraries

    или

    /your-arduino-ide/libraries