CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

How to use RC2 Pin for output PWM

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
hoa35ktxd



Joined: 23 Nov 2014
Posts: 27
Location: Vietnam

View user's profile Send private message

How to use RC2 Pin for output PWM
PostPosted: Sun Nov 23, 2014 1:59 am     Reply with quote

Hi all.
I'm newbie.
I have PIC16F690 and I want to use the RC2 PIN to output PWM signal for dimmer a lamp (Use N-MOSFET).
Please help me.
Special thanks.
Ttelmah



Joined: 11 Mar 2010
Posts: 19550

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 2:23 am     Reply with quote

Your chip doesn't have a PWM.
All you can potentially do, is loop, and pulse the line on/off in your own code. However this is not going to work well if the chip needs to do anything else other than control the output. As soon as the code goes to do anything else, the PWM will stop. You could do a timer based 'software' PWM, but the frequency will be limited. Look at:
<http://www.ccsinfo.com/forum/viewtopic.php?t=50069>
hoa35ktxd



Joined: 23 Nov 2014
Posts: 27
Location: Vietnam

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 2:49 am     Reply with quote

Ttelmah wrote:
Your chip doesn't have a PWM.
All you can potentially do, is loop, and pulse the line on/off in your own code. However this is not going to work well if the chip needs to do anything else other than control the output. As soon as the code goes to do anything else, the PWM will stop. You could do a timer based 'software' PWM, but the frequency will be limited. Look at:
<http://www.ccsinfo.com/forum/viewtopic.php?t=50069>

Thank you.
In datasheet:

Help me.
I am bad english.
Ttelmah



Joined: 11 Mar 2010
Posts: 19550

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 3:07 am     Reply with quote

You can only get a 'single' PWM, on P1A, not on P1D.
The only modes that give a PWM on P1D, are ones that also use other pins. (P1A).
hoa35ktxd



Joined: 23 Nov 2014
Posts: 27
Location: Vietnam

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 3:16 am     Reply with quote

Ttelmah wrote:
You can only get a 'single' PWM, on P1A, not on P1D.
The only modes that give a PWM on P1D, are ones that also use other pins. (P1A).

Thank.
In CCS HELP



Insert #USE PWM(OUTPUT=PIN_C2, FREQUENCY=10kHz, DUTY=25) in to 16F690.h file OK
But, I don't know code in .c file.
Ttelmah



Joined: 11 Mar 2010
Posts: 19550

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 4:01 am     Reply with quote

Understand. The compiler can _only_ do things that the hardware supports.

Lots of more powerful chips, have PWM pins that can be directed to several pins. Yours doesn't.

On the 690, you have a single PWM, that is useable on P1A _only_.

The combinations you can have are:
Code:

00 = Single output; P1A modulated; P1B, P1C, P1D assigned as port pins
01 = Full-Bridge output forward; P1D modulated; P1A active; P1B, P1C inactive
10 = Half-Bridge output; P1A, P1B modulated with dead-band control; P1C, P1D assigned as port pins
11 = Full-Bridge output reverse; P1B modulated; P1C active; P1A, P1D inactive

So the _only_ combination that gives one PWM pin, is '00', which outputs the PWM on P1A.

The combination that drives P1D, is '01', where P1D, has a PWM, but P1A is also driven.

It's just down to what your chip can do. If you want a single PWM, then on the 690, you have to use P1A.
Ttelmah



Joined: 11 Mar 2010
Posts: 19550

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 4:19 am     Reply with quote

Try this:

Code:

    setup_CCP(CCP_PWM|CCP_PULSE_STEERING_D);
    setup_timer2(T2_DIV_BY_1,255,1);
    output_drive(PIN_C2); //needed because compiler will not set TRIS
    set_pwm1_duty(512); //50:50 mark space - adjust after test

This will _only_ work if you have an A5 revision chip or later. On the older chips the pulse steering has a problem, and can't be used....

Beware also, the compiler will set P1A as an output by default. Use output_float if you don't want this.
hoa35ktxd



Joined: 23 Nov 2014
Posts: 27
Location: Vietnam

View user's profile Send private message

PostPosted: Sun Nov 23, 2014 4:23 am     Reply with quote

Thanks for your great enthusiasm
Because I was wrong PCB design should switch the pin.
I would redesign the PCB.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group