Autor Tema: Funcion para PWM  (Leído 1811 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Funcion para PWM
« en: 13 de Mayo de 2016, 16:07:26 »
Hola a todos,
Es posible realizar una funcion PWM para controlar el brillo de un led.
pero ese brillo depende del estado de otras funciones ( un duty para  funcion X, otro duty para  funcion Y)... es decir, intento correr un pwm aislado  ( como si fuera un hilo) para identificar en que proceso esta el programa.
hay mucho ejemplos  en la red pwm, pero todos corren en el while principal... lo cual no me agrada mucho porque en algun momento el pwm no va estar funcionando

¿No sé, será que la única forma es con un RTOS?


Estos es lo que estoy usando
Código: C
  1. #int_TIMER2
  2. void  TIMER2_isr(void)
  3. {
  4. data=data+5;
  5.    if(data==255){data=0;}
  6.    set_pwm3_duty(data);
  7. }
  8.  
  9.  
  10. void main() {
  11.  
  12.    setup_timer_2(T2_DIV_BY_16,170,1);
  13.    setup_ccp3(CCP_PWM);                    // Configure CCP3 as a PWM
  14.    enable_interrupts(GLOBAL);              // Habilitación global de interrupciones
  15.    enable_interrupts(INT_TIMER2);       // Habilitación interrupción TIMER2
  16.  
  17.   }
« Última modificación: 13 de Mayo de 2016, 16:32:23 por cvargcal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Funcion para PWM
« Respuesta #1 en: 13 de Mayo de 2016, 17:23:53 »
No logro entenderte...

¿Cuantos PWM tenes?
La funcion X y funcion Y ambos controlan el duty de 1 PWM, o la funcion X actua sobre 1 PWM, y la funcion Y sobre otro distinto?

Una cosa es controlar el duty y otro es actualizarlo. Veo que lo actualizas con la interrupcion del Timer2, eso lo hiciste por que lo queres actualizar cada cierto tiempo? o tuviste otra intensión ?

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Funcion para PWM
« Respuesta #2 en: 13 de Mayo de 2016, 17:33:47 »
No logro entenderte...
....
Gracias por responder.

Solo es un PWM (ccp3). La idea es que el led brille de acuerdo  en el  proceso en en el que se encuentra.
Supongamos que el programa detecta que  un pin esta desconectado, entonces el led tiene un brillo, cuando el pin cambia de nivel, el led tiene otro brillo (o bueno pulsos repetitivos)
Así como cuando el router de la casa se queda sin señal y el led tiene un pwm diferente.Pero quiero llevar eso a una simple función para usarla posteriormente en cualquier parte del programa.
« Última modificación: 13 de Mayo de 2016, 17:38:12 por cvargcal »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Funcion para PWM
« Respuesta #3 en: 13 de Mayo de 2016, 17:53:14 »
Entonces usa un timer que cada cierto tiempo proceda a verificar el estado de lo que se te ocurra y actualize el estado del PWM. SI es un pin y posee interrupcion, entonces usa una interrupcion de ese pin. Sino con un timer lo solucionas.

Y eso suponiendo que no lo hagas en el loop principal, el cual tampoco entiendo lo de "no va a estar funcionando".

El PWM por hardware va a estar continuamente funcionando, por mas que este haciendo lo que sea. Y vos lo unico que vas a hacer es cambiar el valor del duty cuando se necesite.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Funcion para PWM
« Respuesta #4 en: 13 de Mayo de 2016, 18:21:58 »
...


mmmm pero busco el efecto del led, controlado por una función...

Proceso 1
led lento

proceso 2
led medio

proceso 3
led rápido.

Para lograr el efecto de led, se debe hacer un for o algo que aumente el duty (para dar el efecto).. y eso debe estar en el loop principal no?, por eso lo hice con el timer2... lo cual acabo de probar en real que trabaja paralelamente :).
Gracias por las idea... lo haré de esa forma.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Funcion para PWM
« Respuesta #5 en: 13 de Mayo de 2016, 18:55:03 »
Tal vez te refieras a multitareas en un MCU:

http://electrodesigns.net/blog/better-embedded-firmware/

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Funcion para PWM
« Respuesta #6 en: 13 de Mayo de 2016, 19:17:32 »
Nada trabaja paralelamente. Ademas es algo visual lo que realmente no deberia importarte demasiado de tener un tiempo estricto. Pero bueno aca va una idea conjunto a lo que puse DominusDRR

Código: C
  1. #int_TIMER2
  2. void  TIMER2_isr(void)
  3. {
  4.    data += velocidad;
  5.    if(data>= (255-velocidad)){data=0;}
  6.    set_pwm3_duty(data);
  7. }
  8.  
  9.  
  10. void main() {
  11.  
  12.    setup_timer_2(T2_DIV_BY_16,170,1);
  13.    setup_ccp3(CCP_PWM);                    // Configure CCP3 as a PWM
  14.    enable_interrupts(GLOBAL);              // Habilitación global de interrupciones
  15.    enable_interrupts(INT_TIMER2);       // Habilitación interrupción TIMER2
  16.  
  17.    while(1)
  18.    {
  19.           switch(proceso)
  20.           {
  21.            case PROCESO1:
  22.                             Velocidad = 5;
  23.                             break;
  24.            case PROCESO2:
  25.                             Velocidad = 10;
  26.                             break;
  27.            case PROCESO3:
  28.                             Velocidad = 15;
  29.                             break;
  30.           }
  31.    }
  32.  
  33.   }

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Funcion para PWM
« Respuesta #7 en: 13 de Mayo de 2016, 19:33:19 »
Código: [Seleccionar]
[quote author=KILLERJC link=topic=46318.msg387344#msg387344 date=1463177852]
Nada trabaja paralelamente. Ademas es algo visual lo que realmente no deberia importarte demasiado de tener un tiempo estricto. Pero bueno aca va una idea conjunto a lo que puse DominusDRR
.....
 
  }
[/quote]

Bueno, quise decir que no trabaja dentro del while principal... ;)
muchas gracias.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re:Funcion para PWM
« Respuesta #8 en: 13 de Mayo de 2016, 19:35:10 »
Tal vez te refieras a multitareas en un MCU:

http://electrodesigns.net/blog/better-embedded-firmware/

Gracias, esta genial ese aporte.


 

anything