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 support@ccsinfo.com

How do it blink LED by PWM

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



Joined: 17 Feb 2015
Posts: 134

View user's profile Send private message

How do it blink LED by PWM
PostPosted: Wed Jun 08, 2016 10:46 pm     Reply with quote

Hi, I want make a simple blink LED but by pwm.

for example this:

Code:
#include <16f887.h>                     
#device adc = 10                           
#use delay (clock=4000000)           
#include <lcd.c>                           

#define LED PIN_B5
void blink_led(PIN,int8 time_up,int8 time_down );
void main(){
   
    while(1)
     {
            blink_led(PIN,33,600 );
        }
}


But I find the way directly in hardware... not by someone function. Because I want implement to RTOS.
if I do by this function, when change of task, the blink led not work good (because its making other task)... I find my project look just as this device that has many led but every led is independent of what makes the processor and not see the change task. (at least for human eye)
40inD



Joined: 30 Jul 2007
Posts: 112
Location: Moscow, Russia

View user's profile Send private message

PostPosted: Thu Jun 09, 2016 12:23 am     Reply with quote

how much leds?
i think you should use external pwm controllers with several independent outputs with some serial interface.
Ttelmah



Joined: 11 Mar 2010
Posts: 19338

View user's profile Send private message

PostPosted: Thu Jun 09, 2016 1:09 am     Reply with quote

Lets get something straight. You can't 'blink' an LED with PWM. PWM is much too fast. You can dim an LED with PWM, but not make it blink.

You can potentially blink it with an RTOS, but you then have to understand that the RTOS is _co-operative_. It only works if every function always makes sure that it gets out quickly, and never 'waits' for anything (co-operates...). It is exactly like the multi-tasking in old W95, where if a task hung or delayed too much, then the other tasks would not get serviced. This is the complexity of writing tasks for the RTOS. If (for instance), one needs to wait for a keyboard,then it has to be written, so it simply checks the keyboard, and if nothing is ready, immediately exits. Similarly if there is some complex calculation, then this may need to be split into smaller pieces, and just one part done at each pass. If your RTOS speed is changing when you are doing things, then it implies that one or more of your functions is not properly written.

That being said, probably the only way to do what you want is to use a separate timer interrupt, and have this have counters for the LED's and turn them on/off based on the values of these. Not PWM....
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Thu Jun 09, 2016 6:10 am     Reply with quote

If you run the PIC with an external R-C oscillator at about 750hz - you can use PWM - but you can't do anything useful with the "free cycles"..... Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy
cvargcal



Joined: 17 Feb 2015
Posts: 134

View user's profile Send private message

PostPosted: Thu Jun 09, 2016 8:00 am     Reply with quote

Ttelmah wrote:
Lets get something straight. You can't 'blink' an LED with PWM. PWM is much too fast. You can dim an LED with PWM, but not make it blink.

You can potentially blink it with an RTOS, but you then have to understand that the RTOS is _co-operative_. It only works if every function always makes sure that it gets out quickly, and never 'waits' for anything (co-operates...). It is exactly like the multi-tasking in old W95, where if a task hung or delayed too much, then the other tasks would not get serviced. This is the complexity of writing tasks for the RTOS. If (for instance), one needs to wait for a keyboard,then it has to be written, so it simply checks the keyboard, and if nothing is ready, immediately exits. Similarly if there is some complex calculation, then this may need to be split into smaller pieces, and just one part done at each pass. If your RTOS speed is changing when you are doing things, then it implies that one or more of your functions is not properly written.

That being said, probably the only way to do what you want is to use a separate timer interrupt, and have this have counters for the LED's and turn them on/off based on the values of these. Not PWM....


Thank you so much, Now I undertand more a little about RTOS.
and what happen if the task take many timer? for example.



Code:
 
#use rtos(timer=0,minor_cycle=100ms)      // ConfiguraciĆ³n del RTOS
//***** task#: Get GPS *************
#task(rate=900ms,max=100ms)
//***** task#:read CMD ***
#task(rate=800ms,max=10ms)
//***** task#: alert in *****
#task(rate=700ms,max=10ms) 
//***** task#: config GPRS ****
#task(rate=600ms,max=100ms)   
//***** task#: Report TCP***********
#task(rate=200ms,max=10ms)
//***** taks#: PWM ****************
#task(rate=100ms,max=100ms)


for example what happen if the task GPRS take 10 seg?
my program work good with this configuration, but I want know more about RTOS

in task PWM I wanted put the blink led, actually I am using this line blink_led(PIN,33,600 ); in the task.
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