Hi,
I don't know if DT-Ints have any impact on DIV32, I'd guess no but I don't know. The manual says that it's not recomended to have interrupts enbles if using ON INTERRUPT because the system variables that DIV32 relies on might get changed by the ISR. But DT-Ints saves the system variables so I don't think it should be an issue.
With that said I don't see the reason for calculating the interrupt frequency "all the time". If I read your code correctly your TMR0 interrupt executes at around 38Hz so it calculates the reload values 38 times per second. As long as the desired frequency isn't changed the reload value for TMR1 doesn't change so why keep calculating it?
Instead, do it in your Main-loop and even better calculatie it only when the desired frequency have changed.
Now, I think you think that you AREN'T calculating it "all the time" but look closely at your TMR0 interrupt service routine:That flag=%1 is NOT part of the IF-THEN statement so flag will get set every interrupt no matter if the frequency have changed or not and therfor the calculations of the reload values will get executed every interrupt.Code:' PWM calculation interrupt (Timer 0) calcint: ' Recalculations if flag=%1 THEN '<----Calculate only when Flag=1 ' Reload timer calculation dum=dum1*dum2 reload=Div32 freq reload=(65535-reload)+8 ' U/F calculation if freq<=500 then amp=(freq*131)+35 ELSE AMP=65535 ENDIF flag=%0 ENDIF ' Frequency reference control by potentiometer potsense=((potsense<<6)**maxfreq)+5 if potsense<>freq then freq=potsense:flag=%1 ' Frequency limits if freq<minfreq then freq=minfreq if freq>maxfreq then freq=maxfreq @ INT_RETURN




Bookmarks