Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Cuantos PWM en un Pic16Fxx puedo implementar?


       



#1  Cuantos PWM en un Pic16Fxx puedo implementar?
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Buenas a todos...

Continuo desarrollando mi proyecto (Proyector RGB con leds alta potencia)...

Despues de haber estado buscando alternativas, en un principio, me decante por utilizar 3 conversores ADC via Bus I2C para manejar cada color, pero despues de haber estado consultando he allado la conclusion de que con 3 PWM (uno para cada color) podria aprovechar mas la potencia, asi como economizar en costes de montaje del circuito.
Pero surge una serie de dudas... ¿Puedo implementar 3 PWM en un mismo Pic? ¿Que pic seria el mas adecuado si de cara a un futuro se va a aumentar la complejidad del dispositivo? ¿Cual creeis que seria el procedimiento para implementar los 3 PWM en un mismo pic?

Un Saludo

#2  Re: Cuantos PWM en un Pic16Fxx puedo implementar?
maunix
Colaborador
Ubicación: Cordoba, Argentina
Registrado: 22 Oct 2005
Mensajes: 649
citar
SCR13PT escribió: Buenas a todos...

Continuo desarrollando mi proyecto (Proyector RGB con leds alta potencia)...

Despues de haber estado buscando alternativas, en un principio, me decante por utilizar 3 conversores ADC via Bus I2C para manejar cada color, pero despues de haber estado consultando he allado la conclusion de que con 3 PWM (uno para cada color) podria aprovechar mas la potencia, asi como economizar en costes de montaje del circuito.
Pero surge una serie de dudas... ¿Puedo implementar 3 PWM en un mismo Pic? ¿Que pic seria el mas adecuado si de cara a un futuro se va a aumentar la complejidad del dispositivo? ¿Cual creeis que seria el procedimiento para implementar los 3 PWM en un mismo pic?

Un Saludo


Todo depende de los requerimientos técnicos que necesite tu PWM pero por software podrías hacer un PWM por cada pin que tenga tu PIC valiéndote del algún timer interno.

La diferencia radica en que la máxima frecuencia posible sería cada vez más baja además que irías perdiendo precisión.

Si quieres varios PWM por hardware hay un pic 18F que tiene varios PWM no me acuerdo bien cual, pero sé que los hay.

Creo que debieras definir un poco más tus requerimientos técnicos así te podemos seguir ayudando.

Saludos

#3  
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Ante todo gracias por la respuesta, da gusto ver como aun hay gente que esta "ahi"...

Os comento, lo que necesito es poder implementar 3 PWM con una resolucion de 8 bits, a una frecuencia de muestreo de 30Hz. La idea es, desde un mismo Pic, poder controlar la intensidad luminica de 3 Leds (Rojo, Verde y Azul) para asi poder crear una lampara capaz de mostrar 256 (8 bits Red) * 256 (8 bits Green) * 256 (8 bits Blue) = 16777216 Colores. He elegido una frecuencia de muestreo de 30 Hz, puesto que el ojo humano no percibe la intermitencia luminica a partir de los 26 Hz.

Segun recomendaciones de posteadores de este mismo foro (y doy las gracias por la ayuda), en vez de utilizar un PIC16F84, voy a utilizar un PIC16F876/877 para el proyecto, incluso, pensandolo bien, es mas potente, mas I/O...

Lo que quiero es que el Pic sea capaz de manejar los 3 PWM dependiendo del valor almacenado en 3 variables.

RED = Variable de 8 Bits (almacena la intensidad luminica del Rojo) = PWM1
GREEN = Variable de 8 Bits (almacena la intensidad luminica del Verde) = PWM2
BLUE = Variable de 8 Bits (almacena la intensidad luminica del Azul) = PWM3

Por lo que si yo almaceno en cada variable un valor, y este es lanzado por cada PWM podre tener en los Leds el color "que yo quiera"...

No se si me he explicado..., en un futuro, a este mismo pic le añadire la posvilidad de poder controlar cada PWM por un canal DMX (Protocolo muy utilizado en iluminacion espectacular). Pero en un principio eso no me preocupa, lo que me interesa es, ¿Como puedo implementar esos 3 PWM en un mismo PIC y que cada PWM me proyecte el valor de cada variable?


Detalles:

Si a alguna de las variables le doy valor 00000000 el led permanece apagado.
Si a alguna de las variables le doy valor 10000000 el led permanece a media intensidad.
Si a alguna de las variables le doy valor 11111111 el led luze a su maxima intensidad.

Entonces, poseo 256 posiciones e intensidades luminicas a cada led.

Espero recibir vuestra ayuda...

Un cordial saludo

#4  
maunix
Colaborador
Ubicación: Cordoba, Argentina
Registrado: 22 Oct 2005
Mensajes: 649
citar
SCR13PT te paso una respuesta que dí al mismo tema en otro foro. De todas formas, la posteo y te paso el link del tema. http://www.demo-1.com.ar/foros/index.php?topic=12136.0


No importa si es C o ensamblador, se puede hacer con ambos solo que en ensamlador (sobre todo en los 16F) como se es más directo uno aprovecha mucho mas los ciclos de reloj y puede obtener mas frecuencia de PWM funcionando a menos MHz.

Ejemplo

Cada PWM tendrá 3 variables.
PWMxCiclos --> contador de la cantidad de ciclos que pasaron desde que comenzó de nuevo el PWM
PWMxPreriodo --> cantidad de ciclos que dura el PWM
PWMxCicloActivo --> cantidad de ciclos que dura el PWM en alto.

Donde periodo y ciclo activo sean por ejemplo variables de 8 bits y donde CicloActivo sea <= a Periodo (porque cicloactivo no está expresado en procentaje sino en ciclos de instrucción).

Luego

1) Usar una interrupción con un timer, fijado por ejemplo en 500us
2) Al llegar ese tiempo se enciende un flag de otra variable
3) Ese flag de la variable es el encargado de incrementar todos los contadores PWMxCiclos de los PWM.
4) Se verifica si PWMxCiclos >= PWMxPeriodo en cuyo caso se pondra en 0 el contador y en Activo la SALIDA y sigue con el PWM siguiente, sino va a 5)
5) Se verifica si PWMxCiclos es > PWMxCicloActivo si es así lo pone en BAJO la salida por terminar el duty cycle

De esa forma se pueden tener un PWM por cada pin que se tenga en el PIC, pero por supuesto como dije antes a mas PWM menor será la frecuencia final que se podrá obtener y además la aplicación está prácticamente dedicada a esto.


Respecto a la elección del PIC, eso lo dejo a tu criterio. Más pines no significa más potencia si solo usaras o necesitas 3 pines para tu aplicación.

Más memoria, bueno la puedes lograr con un pic de menos pines pero más memoria de programa.

Ya te irás acostumbrando a eso, además depende de cuan exigente sea tu aplicación en cuanto a limitaciones de costos.

Saludos

#5  
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Buenas a todos...

Se agradece la respuesta... incluso leyendola dos veces, aclara mucho parte de las dudas que habian surgido. Respecto a la frecuencia del PWM, creo que por software no debo tener ningun problema puesto que como comentais y si no he leido mal, con un micro funcionando a 4 Mhz y con 9 PWM implementados mediante software, trabajaria cada uno a unos 100Mhz. Por un lado tema resuelto, puesto que yo necesito 3 PWM y a una frecuencia de 30 Mhz, por lo que el micro ha de ir "sobrado". Pero ahi la gran incognita:

¿Existe alguna libreria en la que yo le diga por que PIN quiero el PWM, la frecuencia y el valor y este me lo muestre a la salida...?

Realmente creo haberme metido en un proyecto algo ambicioso para mis conocimientos de asm... pero bueno, todo es empezar...


Un saludo y mil gracias de antemano

#6  
maunix
Colaborador
Ubicación: Cordoba, Argentina
Registrado: 22 Oct 2005
Mensajes: 649
citar
SCR13PT escribió: Buenas a todos...

Se agradece la respuesta... incluso leyendola dos veces, aclara mucho parte de las dudas que habian surgido. Respecto a la frecuencia del PWM, creo que por software no debo tener ningun problema puesto que como comentais y si no he leido mal, con un micro funcionando a 4 Mhz y con 9 PWM implementados mediante software, trabajaria cada uno a unos 100Mhz. Por un lado tema resuelto, puesto que yo necesito 3 PWM y a una frecuencia de 30 Mhz, por lo que el micro ha de ir "sobrado".

Yo no he dicho tal cosa! 100Mhz ? Si el pic anda a 4Mhz como haces para generar un PWM de 100Mhz solo con el firmware.

Antes mencionaste 30Hz y ahora 30Mhz ? Hay una sensible diferencia de 29,99997 millones de ciclos...

Por favor haz bien tus cálculos o estaras partiendo mal de entrada.


SCR13PT escribió:
¿Existe alguna libreria en la que yo le diga por que PIN quiero el PWM, la frecuencia y el valor y este me lo muestre a la salida...?

Realmente creo haberme metido en un proyecto algo ambicioso para mis conocimientos de asm... pero bueno, todo es empezar...



No conozco, de hecho ese pequeño detalle que puse fue algo que se me ocurrió en el momento pero nunca tuve la necesidad de tantos PWM.

Saludos

#7  
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Mil perdones.... Cuando me referia a 100Mhz, era a 100Hz y cuando dije a 30Mhz, quise decir a 30Hz... Es de enteder que no es lo mismo 100 ciclos por segundo que 100 millones de ciclos por segundo... jejeje

Respecto a la posibilidad de implementar 3 PWM en un PIC... Continuo invesigando... Porque..

Si no he leido mal el PIC16F777 posee 3 PWM por hardware, ¿Eso quiere decir que podria usar a la vez los 3 PWM del PIC16F777? Seria una alternativa, y en caso afirmativo, ¿Como?


Me abordan las dudas

Un Saludo

#8  
maunix
Colaborador
Ubicación: Cordoba, Argentina
Registrado: 22 Oct 2005
Mensajes: 649
citar
SCR13PT escribió:
Si no he leido mal el PIC16F777 posee 3 PWM por hardware, ¿Eso quiere decir que podria usar a la vez los 3 PWM del PIC16F777? Seria una alternativa, y en caso afirmativo, ¿Como?


Asi es, acabo de leer las especificaciones y tiene 3PWM.

Si, podrías utilizar los 3 a la vez, programarlos y dejar que funcionen solos mientras tu software se dedica a otras cosas.

¿Cómo? Bueno, leyendo el datasheet de cómo se configuran. No es algo difícil, requiere que pongas esfuerzo de tu parte y te puedo ayudar a que lo saques andando pero no haré la tarea por tí. Ojo, no de mala voluntad simplemente me gusta ayudar a quienes ponen empeño en algo pero dar 'servidas las cosas' no es mi estilo.

Saludos

#9  
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Buenas a todos:

Continuo trabajando en el tema de los PWM para hacer el poyector RGB. Gracias a magio he conseguido ver como hacer funcionar el PWM en un PIC16F877 que es el que estoy usando de pruebas, este solo tiene 2 PWM por Hardware, pero para hacer las pruebas me biene muy bien, luego ya se implementará el 3er PWM del PIC16f777. Como Comento e hecho funcionar los PWM pero hay algo que no me ha quedado muy claro. Expongo el codigo:

Codigo asm:


periodo equ .255 ; PWM periodo, lo que ocupa un flanco de subida y uno de bajada (un 1 y un 0)
duty equ .200 ; PWM duty del ciclo, el tiempo que está en 1



;------------------------------------

bsf status,5

clrf trisc

bcf status,5

;------------------------------------
;------------- PWM 1 ----------------
;------------------------------------

movlw 04h

movwf t2con

bsf status,rp0

movlw periodo ;Determina la duracion del Ciclo Completo

movwf pr2

bcf status,5

movlw .63

movwf ccp1con

movlw duty ;Determina la Duración del Ciclo de Duty

movwf ccpr1l

;------------------------------------
;------------- PWM 2 ----------------
;------------------------------------

movlw 04h

movwf t2con

bsf status,rp0

movlw periodo ;Determina la duracion del Ciclo Completo

movwf pr2

bcf status,5

movlw .63

movwf ccp2con

movlw duty ;Determina la Duración del Ciclo de Duty

movwf ccpr2l

;------------------------------------
;------------- PROGRAM --------------
;------------------------------------



fin nop

goto fin







end

Ok, mas o menos ya tengo pillao el tema, en el fracmento aterior pongo a funcionar los dos PWM del pic. Pero cosas que no me han quedado claras:

¿Como determino la frecuencia de trabajo del PWM? ¿Que queire decir el codigo que he resaltado en negrita?¿Cuales serian lo valores para obtener un PWM con 8 bits de resolucion?

Gracias de antemano

#10  
SCR13PT
Registrado: 05 Jun 2006
Mensajes: 12
citar
Ok... no recibi respuesta en el foro, pero ya empiezo a allarlas, aunque un poquito de alluda no vendria mal Razz

Respecto al fracmento del codigo anterior

movlw .63

movwf ccp1con


He averiguado que determina la resolucion del PWM en este caso esta configurado para funcionar a 8 bits.

¿Pero como determino el periodo? ¿Como hago para darle el valor (de 0 a 255) y me lo saque el PWM? Un saludo

 Responder





 Otros temas de interés 
No hay mensajes nuevos Estado inicial de 555
No hay mensajes nuevos Aumentar potencia en bobina tesla de estado solido
No hay mensajes nuevos amplificador para electromiografo
No hay mensajes nuevos Motor mas adecuado para sistema de combustion de caldera
No hay mensajes nuevos Diseño de un relé de estado solido DC

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||