Darrel
It worked great
Thanks again
Dave
Trying to get that setup working too, PIC18F14K50 and these:
However I'm having a hard time to get a smooth PWM output that is not perturbed by the DoUSBSERVICE routine... So far the best results I got is by inserting INT_DISABLE USB_INT / INT_ENABLE USB_INT into the SPWMhandler, however the output still flicker quite a bit. I also tried to turn USB_INT into a lower priority interrupt but that doesn't work (the PIC does crash).Code:INCLUDE "cdc_desc.bas" INCLUDE "DT_INTS-18.bas" INCLUDE "ReEnterPBP-18.bas" INCLUDE "SPWM_INT.bas" INCLUDE "USB_ASM_Service.pbp" ASM ;----[High Priority Interrupts]------------------------- INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler INT0_INT, _ButtonPressed, PBP, Yes INT_Handler TMR1_INT, SPWMhandler, ASM, yes INT_Handler USB_INT, _DoUSBSERVICE, PBP, yes endm INT_CREATE ; Creates the High Priority interrupt processor ENDASM
Is there a particular solution to make them work together? any hint on this would be greatly appreciated.
USB_INT should be an ASM "type" interrupt. I think we talked about that before.
Make it low priority.
How many SPWMints, what freq, what resolution.
Not enough information, and I'd guess you are maxed out.
Remember ... 25,600 interrupts per second for SPWM_RES 256 @ 100hz.
DT
Yes I understand that it is very CPU intensive... Here's the settings for the PWM:
CPU @ 48Mhz 3 PWM channels with
DEFINE SPWM_FREQ 100 'SPWM Frequency
DEFINE SPWM_RES 256 'SPWM Resolution
I tried dropping SPWM_FREQ to 40 and SPWM_RES 100 but it is still very irregular. It works well when de D+/D- lines are disconnected, so there's good chances the USB interrupt does takes too much time.
USB INT does contains much more than just USBSERVICE. There's about a dozen PBP instructions to update de status of "Plugged, RX_READY and TX_READY" and this is why I have it as a PBP interrupt. Tried turning it into an ASM interrupt and it does work too, but that's very confusing to me??!
Last edited by aberco; - 2nd November 2010 at 11:20.
It's called "USB_ASM_Service" for a reason.
It's ASM compatible, even though it uses some PBP syntax.
Those PBP statements don't use any of PBP's system registers.
When you made it ASM, was it also Low Priority?
DT
Hey Darrel, ok I understand "ASM" better.
I have everything as high priority interrupt and deleted all my little tweaking attempt. I got it to work nicely now, even with SPWM_FREQ 200. I however don't understand why at first it was not working as is, must have done something wrong
Anyway thanks for your help! this is a great routine!
Bookmarks