BLINK через Каро-Паго

Нет ответов
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Тема о возможности такого вида блинка уже пробегала (ЕвгенийП), но примера не было!
Можно использовать для отслеживания работоспособности таймера (меандр).

enum Prescalers {
  PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5
};
volatile unsigned long led = 0;
 
void setup() {
  uint8_t prescaler = PRESCALER_8;
  uint16_t topValue = 9;
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(13, OUTPUT);
  
  /* Запускаем таймер */
  TCCR1A=(1<<COM1A0) | (1<<COM1B0);  //  Инвертирование пина 9 и 10 по сравнению
  TCCR1B = 0x08 | prescaler;     //  Установить СТС режим и делитель частоты
  OCR1A = topValue;              //  установить TOP равным topValue

  set_blink();
}// END SETUP

ISR(PCINT0_vect) {
  blink_led13();
  } 
  void set_blink(){
  PCICR  |= (1 << PCIE0); // инициализируем порт для приёма CH2
  PCMSK0 |= (1 << PCINT1/*D9*/);  
} 
void  blink_led13(){
  static unsigned long ulStart;
  if(digitalRead(9))  {
    ulStart++;
  }
  else  {
    if(ulStart >=25000){digitalWrite(13,!digitalRead(13));ulStart=0;}
  }
}

void loop() {}