View previous topic :: View next topic |
Author |
Message |
FISH6942
Joined: 03 Feb 2006 Posts: 13 Location: Minnesota
|
Redirecting CCP2 PWM to altenate pin on 18F6310 |
Posted: Sun Oct 29, 2006 9:38 am |
|
|
RC1 is the default pin for CCP2 and RE7 is the alternate pin. I can get the desired PWM signal to come out on RC1 but when attempting to redirect to RE7, it stops on RC1 (as expected) but never shows up on RE7.
The only code change I'm making to redirect the output is adding the "#fuses CCP2E7" directive. I've verified the Configuration Bits are being set properly.
In the Configuration Bits panel in MPLAB v7.30, the two options for CCP2 MUX are "RC1" and "RE7 in microcontroller mode". With this part being a 64-pin device, my understanding is that it is always in microcontroller mode. This is just a curious observation.
TRISE is configured for RE7 as an output. I can toggle it by writing to it directly.
Any ideas where to look next? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Oct 29, 2006 8:59 pm |
|
|
Post your version of the compiler. You can find this at the top of the .LST
file, which will be in your project directory. |
|
|
FISH6942
Joined: 03 Feb 2006 Posts: 13 Location: Minnesota
|
|
Posted: Mon Oct 30, 2006 8:54 am |
|
|
PCM programmer wrote: | Post your version of the compiler. You can find this at the top of the .LST
file, which will be in your project directory. |
CCS PCH C Compiler, Version 3.224
MPLAB V7.30 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Oct 30, 2006 1:59 pm |
|
|
Quote: | CCS PCH C Compiler, Version 3.224 |
I don't have that version, so I installed the closest one I have, which is
vs. 3.230. It has some problems with the CCP2 setup. I have marked
the lines that have a problem with "Bug":
Code: |
........... setup_ccp2(CCP_PWM);
001C: MOVLW B7
001E: ANDWF T3CON,F
0020: BCF TRISC.1 // Bug. Should be TRISE.7
0022: BCF LATC.1 // Bug. Should be LATE.7
0024: MOVLW 0C
0026: MOVWF CCP2CON |
Here is the code from vs. 3.249. Notice that it correctly sets pin E7
as a low-level output.
Code: |
...... setup_ccp2(CCP_PWM);
0018: MOVLW B7
001A: ANDWF T3CON,F
001C: BCF TRISE.7 // Correct
001E: BCF LATE.7 // Correct
0020: MOVLW 0C
0022: MOVWF CCP2CON
|
I think you can fix this by adding the two lines shown in bold below:
Quote: |
setup_ccp2(CCP_PWM);
output_float(PIN_C1);
output_low(PIN_E7);
|
This will put Pin C1 back to it's default power-on reset state of being an
input pin. It will set Pin E7 as a low-level output pin:
Code: |
..... setup_ccp2(CCP_PWM);
001C: MOVLW B7
001E: ANDWF T3CON,F
0020: BCF TRISC.1
0022: BCF LATC.1
0024: MOVLW 0C
0026: MOVWF CCP2CON
.................... output_float(PIN_C1);
0028: BSF TRISC.1
.................... output_low(PIN_E7);
002A: BCF TRISE.7
002C: BCF LATE.7 |
There are some other problems. You should look closely at the Config
bits generated by your version of the compiler. It looks like your
version is putting the PIC into "extended microcontroller" mode.
That mode is only available in the 18F8310 and 18F8410. The byte
you need to look at is "CONFIG 3L". Your version sets it to 0x80,
and vs. 3.249 sets it to 0x83. Of course, I'm assuming that the version
I'm testing (vs. 3.230) is the same as your version (vs. 3.224).
Here are the Config bits generated by vs. 3.230:
Code: | Configuration Fuses:
Word 1: 0106 XT NOIESO NOFCMEN RESERVED
Word 2: 1E1E BROWNOUT NOWDT BORV21 PUT WDT32768
Word 3: 80C0 BW16 NOWAIT NOLPT1OSC MCLR CCP2E7 RESERVED
Word 4: 0081 STVREN NODEBUG RESERVED NOXINST
Word 5: 0001 NOPROTECT
Word 6: 0000
Word 7: 0001 NOEBTR |
Here is the result for vs. 3.249:
Code: |
Configuration Fuses:
Word 1: 0100 XT NOIESO NOFCMEN RESERVED
Word 2: 1E1E BROWNOUT NOWDT BORV21 PUT WDT32768
Word 3: 80C3 BW16 NOWAIT NOLPT1OSC MCLR CCP2E7 RESERVED RESERVED
Word 4: 0081 STVREN NODEBUG RESERVED NOXINST
Word 5: 0001 NOPROTECT
Word 6: 0000
Word 7: 0001 NOEBTR
|
If you have PCWH, you might want to use the Device Editor to try to
fix the fuses. |
|
|
FISH6942
Joined: 03 Feb 2006 Posts: 13 Location: Minnesota
|
|
Posted: Tue Oct 31, 2006 12:29 pm |
|
|
PCM - I should have mentioned that I'm not using any built-in functions for controlling the PWM, I'm writing all the control registers directly (seems safer that way).
Your last suggestion regarding CONFIG 3L seems to be right on. We wrote a quick assy program to output the CCP2 PWM on RE7 and noticed that the output hex file from that project specifically wrote these two bits high - 0x83 - (standard microcontroller mode). This program did behave properly.
I was a little unclear in your last response regarding compiler versions and how each one writes this register. You indicated that you are testing with V3.230 but that V3.249 should fix this issue. The reason I ask is I was planning to upgrade to see whether the latest version fixed this problem. However, I will probably have to upgrade to V4.xxx due to development being done on another module in this project having a need for it.
Is there any way to directly write to this register? Even through assy code?
I'll try to post again after I get final resolution.
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Oct 31, 2006 12:59 pm |
|
|
Quote: | I was a little unclear in your last response regarding compiler
versions and how each one writes this register. |
Your older version sets the Config bits to "Extended Microcontroller"
mode as the default.
Vs. 3.249 puts the PIC into "Microcontroller" mode as the default.
So CCS caught their error and fixed it sometime after your version.
They had not yet fixed it in vs. 3.230.
Quote: | Is there any way to directly write to this register ? |
Even if the compiler creates incorrect settings for the Config bits,
you can change this in a menu in MPLAB, just before you program
the PIC. (Using ICD2, for example). |
|
|
FISH6942
Joined: 03 Feb 2006 Posts: 13 Location: Minnesota
|
|
Posted: Tue Oct 31, 2006 2:55 pm |
|
|
I loaded V4.013 and it is properly writing to this config register. (both bits high)
FWIW, I had our Microchip FAE write a similar program using their C18 compiler. I loaded their hex file and ran it on our target. Looking at their hex file, it appears that their compiler doesn't write to this config register at all. Per the data sheet these two bits should default to high, however after running their program it had the identical results we had so it would appear that on this particular device these two bits default to zero.
I love a happy ending!!
PCM - Regarding writing to the Config Bits, this particular register isn't available on the Config Bit panel in MPLAB for this device. I was curious whether there was a way to write to them in code. |
|
|
|