Autor Tema: controlar voltage salida del pin_X del PIC (0 a 5 Volt )  (Leído 9561 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« en: 16 de Junio de 2009, 00:34:09 »
hola otra ves ^^, bueno ahora tengo otra de las tantas dudas que e tenido a lo largo de todo este tiempo XD.
quiero sacar por un pin del pic una señal que valla de los 0 a 5 vol vol pero de forma paulatina, me explico mejor: al presionar un boton (boton asendente) este me valla incrementando el voltaje de un pin desde 0 a 5 esto dependiendo de su resolucion y, otro boton que por el mismo pin lo valla decrementando. e intentado hacer algo pero no me sale nada si alguien me pudiera dar un ejemplo de esto seria fenomenal y si me lo explicara mejor todavia.
quiero encender y apagar un led de forma gradual con botones.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #1 en: 16 de Junio de 2009, 00:37:13 »
se me olvidava estopy programando en el compilador CCS C y estoy usando un pic 16f876a o 16f873a o 16f628a

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #2 en: 16 de Junio de 2009, 02:29:57 »
Controlar el voltaje de salida de un pin no se puede, pero si puedes generar una señal PWM para controlar la luminosidad del led  o lampara.
Por ejemplo para generar un PWM de 1500Hz, se debe configurar el módulo CCP de la siguiente forma:
Código: C
  1. setup_timer_2(T2_DIV_BY_16,207,1);
  2. setup_ccp1(CCP_PWM);

Osea, el timer2 con Preescaler 1:16, postescaler 1:1 y PR2=207. Y módulo CCP en modo PWM.

El ciclo de trabajo lo controlas con la siguiente instrucción:
Código: C
  1. set_pwm1_duty(416); // Ciclo de trabajo al 50%

donde 0 seria CT=0% y 832 un CT=100%. ASí que con los pulsadores solo queda variar este valor.

(Estos valores lo determiné con ayuda del datasheet del PIC16F628A)
« Última modificación: 16 de Junio de 2009, 02:32:17 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #3 en: 16 de Junio de 2009, 02:53:59 »
tal como te explica nuestros amigo Suky y aqui encontrara otras manera facil que lo pone el Sr Nocturno
http://www.todopic.com.ar/foros/index.php?topic=19736.0
Saludo

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #4 en: 18 de Junio de 2009, 21:50:21 »
hola suKy y stk500 primero que todo gracias por sus respuestas las dos estan muy bn. peroahora biene  lo triste, ya entendi como sacar la salida analoga del pic y que se tiene que hacer por medio de un PWM, pero el punto ahora es que NO SE NADA DE PWM, si me pudieran explicar detalladamente como se configura éste. asi como paso a paso como a los niñitos por que e intentado varias veses antes de este pos aprender, pero no hay caso sali duro pa esto del PWM jijijij. no entiendo eso de los preescaler ni nada, bucha si alguien se pudiese dar la pasiensia de explicarme detalladamente paso a paso esto seria de maravilla, asiendo de usos de ejemplos para niños y todo eso bueno que esten bien y espero que me puedan ayudar plisssssssss mas de lo que ya me an ayudado, y lo otro a parte de los CCP se puede sacar en cualquier otro pin del uC ?????.
salu2s

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #5 en: 18 de Junio de 2009, 21:58:03 »
Aquí hay algo de como funciona el módulo CCP para generar la señal PWM. Y ahí te darás cuenta fácilmente de porque se hacen esas configuraciones en C.
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #6 en: 18 de Junio de 2009, 22:48:17 »
hola denuevo suky gracias por la prontra respuesta, bueno te coment oque ahora estoy asiendo o mejor dichi quiero intentar de hacer 2 PWM de duty cycle variable pero a una freceuncia de 2KHz y que sea controlada por medio de dos pulsadores por señal (incremento-decremento), si me pudieras ayudar mas todavia en esto del codigo, a y lo otro que estoy usando un pic 16f877a y estoy programando en CCS C saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #7 en: 18 de Junio de 2009, 22:57:36 »
hola denuevo suky gracias por la prontra respuesta, bueno te coment oque ahora estoy asiendo o mejor dichi quiero intentar de hacer 2 PWM de duty cycle variable pero a una freceuncia de 2KHz y que sea controlada por medio de dos pulsadores por señal (incremento-decremento), si me pudieras ayudar mas todavia en esto del codigo, a y lo otro que estoy usando un pic 16f877a y estoy programando en CCS C saludos
Con lo que te indique para leer, el datasheet del PIC16F877A y los ejemplos indicados más arriba creo que ya podrías armar algo. Desarrolla, prueba, si surgen errores intenta resolverlos y sino sale, nos muestras el código y seguramente mas de uno acudirá a intentar solucionar el problema! También usa el buscador, debe de haber mas de un ejemplo sobre pwm en C.
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #8 en: 18 de Junio de 2009, 23:30:58 »
holaaa XD bueno ahora tengo 2 duras:
1ª el PR2 puede ir solo de 255 a 0 o viseversa o puede tomar valores mas grandes ???
2ªel TMR2 es el pre escaler ??? de cuanto lo configuro ?¿?¿?¿ eso por el momento XD salu2

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #9 en: 18 de Junio de 2009, 23:45:59 »
aver si esto esta bien:
para PR2 = 255 (maximo)
        Tosc=0.05 microsegundos (20MHz clock)
        TMR2= ¿?¿?¿¿
Fpwm= 1/PWMperiodo

PWMperiodo=1/Fpwm
PWMperiodo=1/2KHz =500microsegundos -----------------> 2KHz supuestamente es la frecuencia de mi PWM

Tpwm=(PR2+1)*4*Tosc*TMR2preescaler
entonces despejando

TMR2preescaler=PWMperiodo/((PR2+1)*4*Tosc)

TMR2preescaler=500micros/((255+1)*4*0.05micros)=9.765625
esta bien lo que ise o no ?¿?¿?¿
saludos
 

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #10 en: 19 de Junio de 2009, 00:02:04 »
sigo XD
ahora para TR2=0

TMR2preescaler=500micos/((0+1)*4*0.05micros) =2500

ahora el rango de trabajo del PWM, donde n es el número de bits usados (10bit)

CTPWM= 2^n *Tosc*TMR2preescaler

CTPWM= 2^10*0.05micros*9.765625= 500microsegundos

CTPWM=2^10*0.05micros*2500= 0.128 segundos.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #11 en: 19 de Junio de 2009, 00:16:04 »
comprobando los 10bit
Sin embargo, dependiendo del valor de Ciclo de trabajo máximo (CT_PWM) deseado, no será posible realizar las  divisiones y por lo tanto no se podrán usar los n bits de resolución. O al revés, si se elige una resolución deseada n no será posible tener cualquier Ciclo de Trabajo máximo (CT_PWM) Deseado.

De la ecuación anterior se puede despejar cual es la resolución máxima:

resolucionPWM=(log(CTPWM/(Tosc*TMR2preescaler)))/log2


resolucionPWM=(log(500micros/(0.05micros*9.76525)))/log2 = 10


resolucionPWM=(log(0.128/(0.05micros*2500)))/log2 = 10

eneste caso se comprueva que la resolucion es de 10 bit




Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #12 en: 19 de Junio de 2009, 01:56:22 »
Primero, PR2 es un registro de 8bits, así que puede tomar valores entre 0 y 255.

\mathrm{PeriodoPWM}=\frac {1}{\mathrm{FrecuenciaPWM}}

\mathrm{PeriodoPWM}=\frac {1}{2000}=500us

Ahora, despejando de :
\mathrm{PeriodoPWM}=\left(\mathrm{PR2} + 1 \right)\cdot 4\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}

sabiendo que:
Tosc=50ns=1/20MHz, y como PR2 tiene que estar entre 0 y 255, Preescaler debe ser 1:16, entonces:

\mathrm{PR2}=\left(\frac{\mathrm{PeriodoPWM}}{4\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}}\right) -1 =155

El timer debe ser configurado:
Código: C
  1. setup_timer_2(T2_DIV_BY_16,155,1);

Y para configurar los módulos:
Código: C
  1. setup_ccp1(CCP_PWM);
  2. setup_ccp2(CCP_PWM);

Ahora a apartir de la siguiente formula podemos determinar el rango del Ciclo de Trabajo.
\mathrm{CTPWM}=\left(\mathrm{CCPR1L:CCP1CON<5:4>}\right)\cdot\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}
Osea, para 100% CTPWM=500us. Entonces:
\mathrm{CCPR1L:CCP1CON<5:4>}=\frac{\mathrm{CTPWM}}{\mathrm{Tosc}\cdot\mathrm{TMR2 Preescaler}}=625

Entonces:
Código: C
  1. set_pwm1_duty(625); // Ciclo de trabajo al 100%
  2. set_pwm2_duty(625); // Ciclo de trabajo al 100%

No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #13 en: 19 de Junio de 2009, 02:17:18 »
holaa molesto denuevo pero tengo un dramita otra vez, e echo el programa lo compilo y todo bien pero a la hora de simularlo el pic no hac nada que esta mal?????¿?¿?¿?¿?¿?¿
y lo otro como ago para poner el ccp2 ?? eso saludos....
a y el programa es este:

#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd

///PROGRAMA
void main(void)
{
int16 a=100;
lcd_init(); //inicializa lcd

while(TRUE){
setup_ccp1(CCP_PWM); //ccp1 modo PWM

setup_timer_2(T2_DIV_BY_4, 255, 1);

if(!input(PIN_A0)){                  //¿se ha pulsado el boton?
do{                           //SI -> eliminar...           
}while(!input(PIN_A0));            //...rebotes del boton
a++;}
if(!input(PIN_A1)){                  //¿se ha pulsado el boton?
do{                           //SI -> eliminar...           
}while(!input(PIN_A1));            //...rebotes del boton
a--;} 
set_pwm1_duty(a);
printf(lcd_putc,"duty cycle " );
}
}

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: controlar voltage salida del pin_X del PIC (0 a 5 Volt )
« Respuesta #14 en: 19 de Junio de 2009, 02:29:28 »
hola suky dejame darte las muchisimas gracias por la pasiencia que as tenido conmigo al explicarme ahora estoy entendiendo un poquito mas, pero tengo una duda como saves que el preescaler tiene que ser de 1:16?????? y dos arregle el programa denuevo pero todavia no quiere hacer nada
un gran saludo y abraso de verdad estoy muy agradesidi por tu ayuda de verdad te pasaste mil gracias una y otra vez mil gracias

bueno el programa con los datos que me dijiste queda asi pero no hace nada X(:

#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd

///PROGRAMA
void main(void)
{
int16 a=312,b=312;// para duty cycle del 50%
lcd_init(); //inicializa lcd

while(TRUE){
setup_ccp1(CCP_PWM); //ccp1 modo PWM
setup_ccp2(CCP_PWM); //ccp2 modo PWM

setup_timer_2(T2_DIV_BY_16, 155, 1);

if(!input(PIN_A0)){                  //¿se ha pulsado el boton?
do{                           //SI -> eliminar...           
}while(!input(PIN_A0));            //...rebotes del boton
a++;}
if(!input(PIN_A1)){                  //¿se ha pulsado el boton?
do{                           //SI -> eliminar...           
}while(!input(PIN_A1));            //...rebotes del boton
a--;} 
set_pwm1_duty(a);
set_pwm2_duty(b);
printf(lcd_putc,"duty cycle ");
}
}


 

anything