Re: Hjälp med Arduino och IR
Postat: 23 juli 2024, 19:14:36
ISR(TIMER2_COMPB_vect) är en interrupt-rutin som utlösas när TIMER2 har nått ett förinställd värde.
Detta sker alltså med en given frekvens (800Hz) som beror på TIMER2 klockfrekvens, ned-delning o vad man annars kan göra med den.
I mina ögon skulle den egentligen se ut såhär:
och raden:
volatile byte pulse = 0;
tas bort.
Detta säkrar att variabeln 'pulse' inte "kan ses" andra ställen i programmet och att den alltid kollas för värde.
800Hz som delas med 8 blir 100 Hz och är alltså modulationsfrekvensen.
void setIrModOutput() sätter upp pinnar och frekvens.
TIMSK2 = _BV(OCIE2B); // Enable Output Compare Match B Interrupt
är väl självförklarande - men den aktivera att TIMER2 - som ju ska vara startat - kan utföra interrupt när målet är nått.
Tydligen sker det en konstant PWM med 10% från PWM-generatorn och TIMER2 interrupten räknar 8 TIMER2-interrupt-pulser och växlar då PWM-pinnen mellan utgång och ingång(? alltså passiv).
Med en svag pull-down på PWM-pinnen vill den då ge pulser och dras ner med den givne modulationsfrekvens.
Detta sker alltså med en given frekvens (800Hz) som beror på TIMER2 klockfrekvens, ned-delning o vad man annars kan göra med den.
I mina ögon skulle den egentligen se ut såhär:
Kod: Markera allt
ISR(TIMER2_COMPB_vect) {
static byte pulse;
pulse++;
if (pulse >= 8) { // Change the number for the desired modulation cycles
pulse = 0;
TCCR2A ^= _BV(COM2B1); // Toggle pin 11 (turn it on and off)
}
}
volatile byte pulse = 0;
tas bort.
Detta säkrar att variabeln 'pulse' inte "kan ses" andra ställen i programmet och att den alltid kollas för värde.
800Hz som delas med 8 blir 100 Hz och är alltså modulationsfrekvensen.
void setIrModOutput() sätter upp pinnar och frekvens.
TIMSK2 = _BV(OCIE2B); // Enable Output Compare Match B Interrupt
är väl självförklarande - men den aktivera att TIMER2 - som ju ska vara startat - kan utföra interrupt när målet är nått.
Tydligen sker det en konstant PWM med 10% från PWM-generatorn och TIMER2 interrupten räknar 8 TIMER2-interrupt-pulser och växlar då PWM-pinnen mellan utgång och ingång(? alltså passiv).
Med en svag pull-down på PWM-pinnen vill den då ge pulser och dras ner med den givne modulationsfrekvens.