Cuantos PWM en un Pic16Fxx puedo implementar?
| #11 |
| #12 ---PREGUNTA--- |
|
VOLVOX
|
Disculpen los pics de picaxe tienen PWM
|
|||||||||||
|
|
||||||||||||
| #13 Re: ---PREGUNTA--- |
|
maunix
Colaborador
|
VOLVOX escribió: Disculpen los pics de picaxe tienen PWM ¿Es una pregunta o una afirmación? |
|||||||||||
|
|
||||||||||||
| #14 |
|
VOLVOX
|
Es una pregunta -sorry
|
|||||||||||
|
|
||||||||||||
| #15 |
|
maunix
Colaborador
|
VOLVOX escribió: Es una pregunta -sorry Si, algunos sí, te recomiendo leas este link http://www.rev-ed.co.uk/docs/axe001_techfaq.pdf |
|||||||||||
|
|
||||||||||||
| #16 |
|
Aristides
|
Creo que el microcontrolador que tiene más posibilidades de generar varios PWM simultáneos, es el Propeller de Parallax, ya que tiene multifunción en lugar de multitarea, si alguno viaja a MDQ se lo puedo mostrar andando:
http://www.parallax.com/propeller/index.asp |
|||||||||||
|
|
||||||||||||
| #17 |
|
Luis Quintero
|
hola,yo hice lo mismo de controlar un led rgb por medio de pwm y lo hice con un pic 16f84a a 4 Mhz, de hecho hice una lampara para controlar la intensidad de 4 leds rgb usando 12 salidas de pwm,el hecho es que cada led lo controlo por el mismo ciclo y periodo,pero haciendo modificaciones se pueden manejar independientemente las 12 salidas,les pego el programa por si a alguien le sirve.
//proyec #include <16f84a.h> #fuses XT,NOWDT,NOPROTECT #use delay(clock=4000000) #define periodo 125 //125 * 80microS =~10mS #define duty 125 //parte del periodo que encenderan las lamparas #define Tiempo_int 30 //50 * 125 * 80microS =~500mS entre cambio y cambio de intensidad int c1=0; //rojo int c2=0; //azul int c3=0; //verde int i2; //variable control de ciclo de retardo en intensidades int i; //variable que controla el ciclo del periodo del pwm int d = 0; //control porta int z = 0; //control portb ////////////////////////////////////////////////////////////////////////////////////////////////// void tiempo() { delay_ms(4000); } //led1_portb_0 void ciclo_PWM_10mS(){ for (i=1;i<periodo; i++) //control periodo { if (i<=c1) //control intensidad rojo { bit_set(z,0); //led1_portb_0 //Led2=port_b_bits_543(var) bit_set(z,3); //led2_portb_3 //Led3=port_a&portb_bits_a&1_(v)b&76(ar) bit_set(z,6); //led3_portb_6 //Led4=port_a_bits_320(var) bit_set(d,0); //led4_porta_0 } else { bit_clear(z,0); //led1_portb_0 bit_clear(z,3); //led2_portb_3 bit_clear(z,6); //led3_portb_6 bit_clear(d,0); //led4_porta_0 } if (i<=c2) //control intensidad azul { bit_set(z,1); //led1_portb_1 bit_set(z,4); //led2_portb_4 bit_set(z,7); //led3_portb_7 bit_set(d,2); //led4_porta_2 } else { bit_clear(z,1); //led1_portb_1 bit_clear(z,4); //led2_portb_4 bit_clear(z,7); //led3_portb_7 bit_clear(d,2); //led4_porta_2 } if (i<=c3) //control intensidad verde { bit_set(z,2); //led1_portb_2 bit_set(z,5); //led2_portb_5 bit_set(d,1); //led3_porta_1 bit_set(d,3); //led4_porta_3 } else { bit_clear(z,2); //led1_portb_2 bit_clear(z,5); //led2_portb_5 bit_clear(d,1); //led3_porta_1 bit_clear(d,3); //led4_porta_3 } output_b(z); output_a(d); } delay_us(40); } ///////////////////////////////////////////////////////////////////////////////////////////////////// void tonos_mas(){ for (c1=1,c2=1,c3=0; c1<duty ; c1++,c2++) //;control de tono magenta { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void tonos_2_mas(){ for (c3=1,c1=1,c2=0; c3<duty; c3++,c1++) //;control de tono amarillo { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void tonos_3_mas(){ for (c3=1,c1=0,c2=1; c3<duty; c3++,c2++) //;control de tono cyan { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void tonos_menos(){ for (c1=duty,c2=duty,c3=0; c1>1 ; c1--,c2--) //;control de tono magenta { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void tonos_2_menos(){ for (c1=duty,c2=0,c3=duty; c1>1 ; c1--,c3--) //;control de tono amarillo { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void tonos_3_menos(){ for (c3=duty,c1=0,c2=duty; c3>1; c3--,c2--) //;control de tono cyan { for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad ciclo_PWM_10mS() ; } } void negro() //color negro { z=0; d=0; output_b(z); output_a(d); tiempo(); } void blanco() //color blanco { z=d=255; output_b(z); output_a(d); tiempo(); z=d=0; output_b(z); output_a(d); } //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr void rojo() //color rojo //b%01001001 //a%xxxx0001 { output_b(0x49); output_a(0x01); tiempo(); z=d=0; output_b(z); output_a(d); } void verde() //color verde //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr //B%00100100 //A%xxxx1010 { output_b(0x24); output_a(0x0a); tiempo(); z=d=0; output_b(z); output_a(d); } void azul() //color azul //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr //B%10010010 //A%xxxx0100 { output_b(0x92); output_a(0x04); tiempo(); z=d=0; output_b(z); output_a(d); } void amarillo() //color amarillo //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr //B%01101101 //A%xxxx1011 { output_b(0x6d); output_a(0x0b); tiempo(); z=d=0; output_b(z); output_a(d); } void cyan() //color cyan //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr //B%10110110 //A%xxxx1110 { output_b(0xb6); output_a(0x0e); tiempo(); z=d=0; output_b(z); output_a(d); } void magenta() //color magenta //b%76543210 //b%76543210 //B%arvarvar //A%xxxxvavr //B%11011011 //A%xxxx0101 { output_b(0xdb); output_a(0x05); tiempo(); z=d=0; output_b(z); output_a(d); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// int main () { //salida al puerto b=0 while (true) { // negro(); //(0, 0, 0) es negro blanco(); //(255, 255, 255) es blanco rojo(); //(255, 0, 0) es rojo tonos_mas(); tonos_menos(); verde(); //(0, 255, 0) es verde tonos_2_mas(); tonos_2_menos(); azul(); tonos_3_mas(); tonos_3_menos(); amarillo(); //(255, 255, 0) es amarillo cyan(); //(0, 255, 255) es cyan magenta(); //(255, 0, 255) es magenta z=d=0; output_b(z); output_a(d); } return(0); } saludos. |
|||||||||||
|
|
||||||||||||
| #18 |
|
zidaemon
|
Mejor utiliza un pic de bajo coste como un pic16f628, tengo un programa que puede manejar tres pwm, sin utilizar ninguno de los que trae por hardware. Con esto te quiero decir, que puedes tener mas de 10 PWM independientes. Todo por Software. Lo que haace este circiuto, es un juego de tres luces que encienden gradualmente una despues de otra.
;*********************************** ; Hurive Sis ; ; ; Juego de 3 Luces por PWM ; ;Salida leds:Rb0,Rb1,Rb2 ; Oscilador Interno del Pic ;Visitar la pagina electronica para ;lo relacionado con este circuito ; ; Compilado en MPLAB IDE v7.31 ; Mexico DF. Octubre del 2006 ;*********************************** LIST P=16C628A #INCLUDE <P16F628A.INC> PH0 EQU 0X20 ;aqui va el numero de intensidad del PWM1 PH1 EQU 0X21 ;aqui va el numero de intensidad del PWM2 PH2 EQU 0X22 ;aqui va el numero de intensidad del PWM3 CONT EQU 0X23 CONT2 EQU 0X24 C21 EQU 0X25 ;registros para retardos C22 EQU 0X26 C23 EQU 0X27 #DEFINE TIEMPO2A 0XFF ;TIEMPOS PARA RETARDO 2 #DEFINE TIEMPO2B 0XFF #DEFINE TIEMPO2C 0X7F #DEFINE PMW0 PORTB,0 #DEFINE PMW1 PORTB,1 #DEFINE PMW2 PORTB,2 ORG 0X00 MOVLW 0X00 MOVLW 0X07 MOVWF CMCON BSF STATUS,5 CLRF TRISA CLRF TRISB BCF STATUS,5 CLRF CONT2 CLRF PORTB ;***** PROGRAMA MAIN ******** MAIN CALL RETARDO MOVLW 0XFF MOVWF PH2 CLRF PH0 CLRF PH1 MAIN1 CALL F13 ;Prende gradualmente PWM1, almismo tiempo INCF PH0 ; que apaga PWM3 BSF PMW0 DECFSZ PH2 GOTO MAIN1 CALL RETARDO MAIN2 CALL F12 INCF PH1 BSF PMW1 DECFSZ PH0 GOTO MAIN2 CALL RETARDO MAIN3 CALL F23 INCF PH2 BSF PMW2 DECFSZ PH1 GOTO MAIN3 CALL MAIN ;***** RETARDO ****** RETARDO MOVLW TIEMPO2A MOVWF C23 CICLO23 MOVLW TIEMPO2B MOVWF C22 CICLO22 MOVLW TIEMPO2C MOVWF C21 CICLO21 DECFSZ C21 GOTO CICLO21 DECFSZ C22 GOTO CICLO22 DECFSZ C23 GOTO CICLO23 RETLW 0 ;***** SUBRUTINAS ****** F13 MOVLW 0X00 MOVWF CONT BSF PMW0 BSF PMW2 UNO MOVF CONT,W SUBWF PH0,W BTFSS STATUS,0 BCF PMW0 MOVF CONT,W SUBWF PH2,W BTFSS STATUS,0 BCF PMW2 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF CONT MOVF CONT,W XORLW 0XFF BTFSS STATUS,2 GOTO UNO RETLW 0 F12 MOVLW 0X00 MOVWF CONT BSF PMW0 BSF PMW1 DOS MOVF CONT,W SUBWF PH0,W BTFSS STATUS,0 BCF PMW0 MOVF CONT,W SUBWF PH1,W BTFSS STATUS,0 BCF PMW1 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF CONT MOVF CONT,W XORLW 0XFF BTFSS STATUS,2 GOTO DOS RETLW 0 F23 MOVLW 0X00 MOVWF CONT BSF PMW1 BSF PMW2 TRES MOVF CONT,W SUBWF PH1,W BTFSS STATUS,0 BCF PMW1 MOVF CONT,W SUBWF PH2,W BTFSS STATUS,0 BCF PMW2 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP INCF CONT MOVF CONT,W XORLW 0XFF BTFSS STATUS,2 GOTO TRES RETLW 0 END Saludos de Hurive Radik Zidaemon Uribe |
|||||||||||
|
|
||||||||||||
| #19 PWM trabajando a 60 Hz PIC16F873A |
|
Raúl Galván
|
La frecuencia, se define como la inversa del período. Frec = 1/T
El período se calcula asi. PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value) _______________________________________________________ Disculpa quisiera un poco de ayuda para programar el PIC16F873A, Tengo problemas a la hora de calcular la frecuencai del PWM que biene integrado en el chip, lo necesito que funcione a 60 Hz (si solo utilizo el predivisor la minima frecuencia qie obtengo anda alrededor de 244 Hz) si utilizo en posdivisor con valor de 5 obtengo la frecuencia deseada pero no se que susede con el ciclo útil (en un divisor de frecuencia con contadores TTL (digitales) el ciclo útil siempre se mantiene al 50%) y mi duda es como se comporta el posdivisor ¿mantiene la relación en %? o se comporta como un divisor común y corriente. Por favor si pudieras ayudarme te lo agradeceria: si tienes las respuestas enviane que valores de veben cargar en los registros PR2, TMR2 Prescaler, Poscaler y CCPRxL |
|||||||||||
|
|
||||||||||||
| #20 Hola |
|
Maco1717
|
Hola mira esto:
http://ww1.microchip.com/downloads/en/AppNotes/01074A.pdf no es en esamblador, esta en c pero para mi es mejor. suerte |
|||||||||||
|
|
||||||||||||
|
| Otros temas de interés | |
|---|---|
| PIC + LCD + MemoriaSerial + Tarjeta MMC + Motores de Paso | |
| Estado inicial de 555 | |
| Aumentar potencia en bobina tesla de estado solido | |
| 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

