const int prescaler = 1024; // Předdělička pro Timer 1
const unsigned int periodA = 15625; // Počet tiků pro 1 sekundu při předděličce 1024 (16e6 / 1024)
const unsigned int periodB = 15625; // Počet tiků pro 1 sekundu při předděličce 1024 (16e6 / 1024)
void setup() {
Serial.begin(9600);
// Nastavení Timeru 1 pro čítač A
// TCCR1A = 0; // Nastavit TCCR1A na 0 (žádné speciální režimy pro čítač A)
// TCCR1B = 0;
// OCR1A = periodA - 1; // Nastavit hodnotu pro srovnání čítače A (perioda čítače)
// OCR1B = periodB - 1; // Nastavit hodnotu pro srovnání čítače B (perioda čítače) ( ... 24999)
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // Režim CTC, předdělička 1024 pro oba čítače A i B B00000011 /64
// TIMSK1 |= (1 << OCIE1A); // Povolit přerušení při shodě čítače A s hodnotou v OCR1A B0000 0010
// TIMSK1 |= (1 << OCIE1B); // Povolit přerušení při shodě čítače B s hodnotou v OCR1B B00000100
TIMSK1 |= (1 << TOIE1); // Povolení overflow vectoru
TCNT1 = 65000; //spusteni citace
sei(); // Povolit globální přerušení
}
void loop()
{
// Váš kód může pokračovat zde
}
ISR(TIMER1_COMPA_vect)
{
// Toto přerušení se spustí při shodě čítače A Timer 1 s hodnotou v OCR1A
// Zde můžete provádět akce pro čítač A
Serial.println("Přerušení Timer 1A - Compare Match");
}
ISR(TIMER1_COMPB_vect)
{
// Toto přerušení se spustí při shodě čítače B Timer 1 s hodnotou v OCR1B
// Zde můžete provádět akce pro čítač B npř OCR1A +=25000;
Serial.println("Přerušení Timer 1B - Compare Match");
}
ISR(TIMER1_OVF_vect)
{
// Toto přerušení se spustí při přetečení čítače Timer 1 (pro oba čítače A a B)
// Zde můžete provádět akce pro přetečení čítače
Serial.println("Přerušení Timer 1 - Overflow");
}
/*V tomto kódu jsou nastaveny přerušení pro oba čítače Timeru 1 (A a B)
při shodě s hodnotami v registrech pro srovnání (OCR1A a OCR1B) a také
při přetečení čítače. Když dojde k jednomu z těchto událostí, odpovídající
přerušení se spustí a provede příslušný kód uvnitř přerušení.*/