Cuantos PWM en un Pic16Fxx puedo implementar?
| #1 Cuantos PWM en un Pic16Fxx puedo implementar? |
| #2 Re: Cuantos PWM en un Pic16Fxx puedo implementar? |
|
maunix
Colaborador
|
SCR13PT escribió: Buenas a todos... 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
|
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
|
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
|
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
|
SCR13PT escribió: Buenas a todos... 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ó: 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
|
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
|
SCR13PT escribió: 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
|
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
|
Ok... no recibi respuesta en el foro, pero ya empiezo a allarlas, aunque un poquito de alluda no vendria mal
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 |
|||||||||||
|
|
||||||||||||
|
| Otros temas de interés | |
|---|---|
| Estado inicial de 555 | |
| Aumentar potencia en bobina tesla de estado solido | |
| amplificador para electromiografo | |
| Motor mas adecuado para sistema de combustion de caldera | |
| 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 || |
Site Map
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad

