View previous topic :: View next topic |
Author |
Message |
RF_Geek
Joined: 24 Sep 2008 Posts: 9
|
Using CCS PIC C Wizard PWM and Internal OSC |
Posted: Sat Oct 18, 2008 11:22 pm |
|
|
I am newbie to microcontroller programming i am using the CCS PIC C 4.057.
Microcontroller PIC18F4550
Using the Project Wizard option, i am trying to setup a internal oscillator to run at 8MHz. i am confused on how to setup the fuzes:
Should i choose the Internal RC OSC or Internal RC Osc, NO CLKOUT.
I would really appreciate it if someone could guide me through all the options on which to turn off or on.
Another thing i am using the Wizard to setup the PWM, i am using CCP2, i am just trying to run DC motor using Electronic speed Controller on a RC Car (TRAXXAS), which option should i select, full bridge, full bridge reverse, or half bridge.
(CCP1 is running a servo to control steering).
The PWM is at 50Hz with varying duty cycle.
This my current setup.
#include <18F4550.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC //Internal RC Osc
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES MCLR //Master Clear pin enabled
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES XINST //Extended set extension and Indexed Addressing mode enabled
#FUSES PLL1 //No PLL PreScaler
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES VREGEN //USB voltage regulator enabled
#FUSES ICPRT //ICPRT enabled
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Thank you |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Oct 18, 2008 11:47 pm |
|
|
Use this fuse to select the internal oscillator. The i/o pins for the crystal
can also be used for other things:
This is wrong. Change it to NOLVP.
This is very wrong. Change it to NOXINST. |
|
![](templates/subSilver/images/spacer.gif) |
MicroManiac
Joined: 21 Aug 2008 Posts: 34
|
|
Posted: Sat Oct 18, 2008 11:54 pm |
|
|
Regarding the clock, use the internal RC OSC, and then in the in the "internal oscillator configuration" tab choose the enable internal oscillator and system clock is form Primary oscillator, then choose the 8Mhz.
Regarding the PWM,
click the :Other" Tab, choose CCP1, then under the CCPX settings, click PWM and choose the correct freuend and duty cycle, ignore the other tabs _________________ "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
Albert Einstein |
|
![](templates/subSilver/images/spacer.gif) |
RF_Geek
Joined: 24 Sep 2008 Posts: 9
|
|
Posted: Sun Oct 19, 2008 12:03 am |
|
|
if i use CCP1 for the motor i need to use CCP2 for the Servo, in that case what settings do i use. |
|
![](templates/subSilver/images/spacer.gif) |
RF_Geek
Joined: 24 Sep 2008 Posts: 9
|
|
Posted: Sun Oct 19, 2008 1:29 am |
|
|
Thank you everyone, i wanted to know does it matter if you use CCP1 or CCP2 because i want control two devices with PWM.
here is the updated code, do you guys see any problems.
Code: |
#include <18F4550.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES EC //External clock with CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES MCLR //Master Clear pin enabled
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12 //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4 //System Clock by 4
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES VREGEN //USB voltage regulator enabled
#FUSES ICPRT //ICPRT enabled
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
|
and here is the code for the PWM
Code: |
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(51);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_31250|OSC_PLL_OFF);
|
Thank you |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Oct 19, 2008 1:47 am |
|
|
You've still got LVP in there, and EC will certainly not invoke the internal
oscillator. Your setup_oscillator() statement has got conflicting
frequencies. You have got to clean all this stuff up and you have got
to pay attention to detail. Here is sample code for two PWM channels:
http://www.ccsinfo.com/forum/viewtopic.php?t=17729&start=1 |
|
![](templates/subSilver/images/spacer.gif) |
|