Прерывание по Таймеру Arduino MEGA 2560

Тема в разделе "Arduino & Shields", создана пользователем Scrypto, 22 июн 2018.

  1. Scrypto

    Scrypto Нерд

    Ребят подскажите, что не так делаю
    // Прерывание по таймеру
    Код (C++):
      TCCR0A |= (1 << WGM01);
      OCR0A = 0xF9;
      TIMSK0 |= (1 << OCIE0A);
    // TCCR0B |= (1 << CS01) | (1 << CS00); Отключил, ибо и так делитель на 64
      sei();
    Теперь сама функция прерывания

    Код (C++):
    ISR (TIMER0_COMPA_vect)
    {
    timerLED1++;
      Serial.println(timerLED1);
     if (timerLED1 == 1000) {
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print("INSERT COIN");
        timerLED1 = 0;
      }
    }
    И судя по монитору порта, все зависает нахрен, только подходя к условию if
    И стоит после 988
     
  2. Scrypto

    Scrypto Нерд

    Может есть мануал, по прерывание MEGA ?
     
  3. Daniil

    Daniil Гуру

    Даташит?
     
  4. Scrypto

    Scrypto Нерд

    Ну да ) Голова перестала соображать окончательно.
    Еще вопрос, есть ли вариант хоть какой-нибудь параллельный код? Допустим, чтобы он в прерывании выполнялся не останавливая основной цикл?
     
  5. parovoZZ

    parovoZZ Гуру

    Это всё выноси из обработчика прерывания! Работай или по своему флагу, или по флагу сравнения регистра COMPA.
    Так не бывает. Прерывание всегда останавливает основной цикл.
     
    Scrypto нравится это.
  6. Scrypto

    Scrypto Нерд

    В таком случае есть идеи, как подключить трёх разрядный семисегментный индикатор и Lcd 16x2 на одну ардуину, чтобы всё это работало, и не мешало друг другу?

    И можно по подробнее про флаг сравнения регистра COMPA, пример кода? В первый раз с прерываниями по таймеру столкнулся.
     
  7. Limoney

    Limoney Гик

    Да, Lcd 16x2 и TM1637
     
    Scrypto нравится это.
  8. DetSimen

    DetSimen Guest

    Набери в гуголе TTimerList и сходи на гитхаб по моему нику
     
    Scrypto нравится это.