Hallo Zusammen !
ihr hattet mir ja vor einiger Zeit geholfen, ein Sketch zu basteln, um über den Timer1 etwas ein bzw aus zu schalten.
Jetzt ist mir aber aufgefallen, das etwas an diesem Sketch nicht so ganz funktioniert.
Der Sketch funktioniert im Bereich von Sekunden ganz gut, aber wenn jetzt was im Millisekundenbereich dazu kommt, wird der tausender Bereich (also Sekunden) einfach ignoriert.
hier ist zb die AUS-Zeit kürzer als die AN-Zeit:
const byte Pin = 11; //OC1A = Mega Pin 11
volatile int offTime = 0; //Aus-Zeit in ms
volatile int onTime = 0; //An-Zeit in ms
void setup()
{
pinMode(Pin, OUTPUT);
offTime = 1100;
onTime = 1000;
timerOn();
}
void loop()
{
}
void timerOn()
{
cli(); // stop interrupts
TCCR1A = _BV(COM1A0); // Timer automatic für Timerpin
TCCR1B = _BV(WGM12) | _BV(CS12); //CTC Mode, Prescaler = 256 (= 16µs pro Tick)
TCNT1 = 0; // reset counter value
TIMSK1 = _BV(OCIE1A); //Enable Output Compare Match A Interrupt
sei(); // allow interrupts
}
ISR(TIMER1_COMPA_vect)
{
static bool onPhase;
if (onPhase)
{
OCR1A = (offTime * (1000UL / 16)) -1; //Zeit in ms * 1000ms / 16µs (Zeit pro Timer-Tick)
}
else
{
OCR1A = (onTime * (1000UL / 16)) -1; //Zeit in ms * 1000ms / 16µs (Zeit pro Timer-Tick)
}
onPhase = !onPhase;
}