Hi Nick,
Sorry about the typo, told you I didn't test it though.
Currently I have no idea why my original code (less the typo) did not work while your new one does. I just tried it here, again with two 12F1840's so that MIGHT have something to do with it but I don't think so. I also figured out that once you've enabled PWM mode on the CCP pin you can't control that output manually. So in order to force the PWM output low during the OFF period of the carrier you have to disable the CCP module and THEN force it low, I've implemented that in the TX-code below:For the RX-side I did this, which is pretty much exactly like I wrote it earlier. I found that I could ditch the delay to speed up the response time since the exection time for the loop is longer than the PWM-period. If you change the frequency you may need to add some delay.Code:' *************************************************************** ' Device Fuses ' *************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF __config _CONFIG2, _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF #ENDCONFIG ' *************************************************************** ' Compiler directives ' *************************************************************** DEFINE OSC 8 ; We're running at 8Mhz ' *************************************************************** ' Variables and aliases ' *************************************************************** i VAR BYTE LED VAR PortA.4 ' *************************************************************** ' Initialization ' *************************************************************** OSCCON = %01110000 ' 8MHz internal osc ANSELA = 0 ' Digital only for all PortA pins TRISA = %00000000 ' Make PORTA outputs CCP1CON = %00001100 ' Normal PWM PR2 = 3 ' 500kHz output @8MHz system clock CCPR1L = 2 ' 50% Dutycycle CCP1CON.5 = 0 CCP1CON.4 = 0 ' *************************************************************** ' Actual program ' *************************************************************** ' Show that we're up and running. For i = 0 to 9 Toggle LED Pause 200 NEXT Main: CCP1CON = %00001100 ' Normal PWM mode T2CON.2 = 1 ' Timebase ON PAUSE 15 T2CON.2 = 0 ' Timebase OFF CCP1CON = %00000000 ' Disable PWM to regain control of PortA.2 PortA.2 = 0 ' Force output low to prevent saturation of coil PAUSE 5 Goto MainI'm going to try to add two screen-grabs from the scope. Last time I did the uploader didn't work but hopefully that's fixed by now. Nope the bloody thing still doesn't work, sorry but you'll have to trust me that it does work here.Code:' *************************************************************** ' Device Fuses ' *************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF __config _CONFIG2, _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_OFF #ENDCONFIG ' *************************************************************** ' Compiler directives ' *************************************************************** DEFINE OSC 8 ; We're running at 8Mhz ' *************************************************************** ' Variables and aliases ' *************************************************************** oldCnt VAR BYTE i VAR BYTE LED VAR PortA.4 ' *************************************************************** ' Initialization ' *************************************************************** OSCCON = %01110000 ' 8MHz internal osc ANSELA = 0 ' Digital only for all PortA pins TRISA = %00000100 ' T0CKI is input, rest outputs ' *************************************************************** ' Actual program ' *************************************************************** OPTION_REG.5 = 1 ' TMR0 as counter oldCnt = 0 TMR0 = 0 ' Show the world that we're alive For i = 0 to 9 Toggle LED PAUSE 200 NEXT Main: IF TMR0 <> oldCnt THEN LED = 1 ELSE LED = 0 ENDIF oldCnt = TMR0 Goto Main
/Henrik.




Bookmarks