Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
torres.electronico en su programa dijo:pwmout PWMpin,254,pwmval ' envia el valor equivalente PWM (0 a 1016)
Jeje tienes razón, ya lo comenté, ahora ya me funciona, pero en la ultima rutina se toma 4 segundos
y no se porque.., bueno, sigo con esto..
descargue el programming editor, y la rutina final .
pwmout PWMpin,254,pwmval
pulsout 3,delay.
Demora 4 segundos, ..
Lo acabo de simular, en un pic16f876a y esto es lo que sale
Yo creo que si estás haciendo algo mal, porque con un cristal de 4 MHz, se puede llagar hasta unos 83 KHz.
No en todos los casos vas a conseguir frecuencias exactas, pero si aproximadas.
Si lo estás haciendo con HPWM o por software, te recomiendo que mejor uses los registros.
DEFINE OSC 4
define ADC_BITS 10
Define ADC_CLOCK 3 ;
DEFINE ADC_SAMPLEUS 50
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
DEFINE CCP2_REG PORTC
DEFINE CCP2_BIT 1
;****************************************************************
Dato1 var word ; variable pot.duty ccp1
Dato2 var word ; variable pot.duty ccp1
Dato3 var word ; variable aux
Dato4 var word ; variable pot.frecuencia
FRECUENCIA var word ; variable aux.frecuencia
FREC1 var word
DUTY1 VAR WORD ; variable aux.duty ccp1
DUTY2 VAR WORD ; variable aux.duty ccp2
Dvar var word
Fvar var word
dato0 = 0
dato1 = 0
dato2 = 0
dato3 = 0
dato4 = 250
TRISA = %11111111 ;configuro todo el portA como entrada
TRISB = %00000011 ;configuro portB.0 portB.1 como entrada, el resto como salidas
TRISC = %00000000 ;configuro todo el portC como salidas
portc = %00000000 ;pongo en estado bajo todo el portC
ADCON1 =%10000000 ;configuro A/D
;****************************************************************
MENU:
IF PORTB.0 = 0 THEN
high portc.7
goto PWM_ON ;pulsador de encendido
endif
pause 50
GOTO MENU
Inicio:
IF PORTB.1 = 0 THEN PWM_OFF ;pulsador de apagado
adcin 1, dato1 ;leemos el potenciometro del ADC2 para establecer duty CCP2-CCP1
dato1 =( dato1 / 4) ;arreglo matematico del valor obtenido por el ADC1
adcin 2, dato2 ;leemos el potenciometro del ADC2 para establecer duty CCP2-CCP1
dato2 =( dato2 / 4) ;arreglo matematico del valor obtenido por el ADC1
adcin 3, dato4 ;leemos el potenciometro del ADC3 para establecer frecuencia
dato4 = (dato4 / 4) ;arreglo matematico del valor obtenido por el ADC3
FRECUENCIA=62500/(dato4+1)
hpwm 2,DATO2,frecuencia
hpwm 1,DATO2,frecuencia
goto inicio
;****************************************************************
PWM_ON:
CCP1CON.2=1 ;ACTIVAMOS EL MODULO CCP1 (BIT2)
CCP1CON.3=1 ;ACTIVAMOS EL MODULO CCP1 (BIT3)
CCP2CON.2=1 ;ACTIVAMOS EL MODULO CCP2 (BIT2)
CCP2CON.3=1 ;ACTIVAMOS EL MODULO CCP2 (BIT3)
goto Inicio
;****************************************************************
PWM_OFF:
CCP1CON.2=0 ;DESACTIVAMOS EL MODULO CCP1 (BIT2)
CCP1CON.3=0 ;DESACTIVAMOS EL MODULO CCP1 (BIT3)
CCP2CON.2=0 ;DESACTIVAMOS EL MODULO CCP2 (BIT2)
CCP2CON.3=0 ;DESACTIVAMOS EL MODULO CCP2 (BIT3)
low portc.7
goto menu
;****************************************************************
end
Si no te interesa el ancho del pulso, puedes usar FreqOut, que genera un rango más estable, aunque no es muy elevada su frecuencia, me parece que hasta 32768 Hz.
Es que para hacer lo que viene siendo un "Sweep" o barrido, tienen que estar en sincronía los demás registros.
HPWM no puede hacer un funcionamiento óptimo de esa forma.
Sería mejor que usaras una tabla y que actuaras en consecuencia sobre los registros, ya que por estar fuera de límites obtendrás saltos de frecuencia e inestabilidad.
fue lo primero que `probe, pero en el osciloscopio sale deformada la señal con freqout...
interesante dato que no tenia ni la mas palida idea... ahi con la modificacion si configuro pr2 de 230hz hasta 5Khz funciona perfecto... si hago el calculo para 230hz hasta mas de 5Khz se descontrola... Ahora, si muevo el valor maximo de PR2 (que seria el minimo de frecuencia) y lo dejo para arrancar en 600Hz, lo llevo hasta 9Khz tranquilamente sin descontrol... Voy a mirar las variables detenidamente, quizas tenga que hacer un parchecito y pueda controlarlo... Esta la libreria de DT para pwm por hardware (16F87X), pero me quedo en la PC de escritorio que quedo en la que era mi casa... o sea, esa PC no la recupero mas
La busque nuevamente, pero no la encontre mas por uqe no esta mas la pagina de Darrel Taylor
esta relativamente buena, por que con tan solo dos variables, controlabas el pwm por hardware.
vamos a ver como encaro este tema
ps = serial('COM5'); %se crea un objeto que representa el puerto
set(ps,'Baudrate',9600); % se fijan las caracteristicas del objeto (no es necesario, estas están por default)
set(ps,'DataBits',8);
set(ps,'Parity','none');
set(ps,'StopBits',1);
set(ps,'FlowControl','none');
fopen(ps); % se abre el objeto para poder utilizarlo
fprintf(ps,'%s','1') % se envia un dato de tipo entero sin signo de 8 bits, por el objeto ps
fclose(ps); % se cierra el objeto; si no se cierra y luego se intenta abrir de nuevo, este puerto se bloquea
delete(ps);
clear ps
Entre en una duda bastante grande...
Trabajando con el pwm por hardware del 16F876A, configuro la frecuencia de la siguientw manera:
Frecuencia=62500/(PR2+1)
El tema esta en qie de 250hz hasta 6Khz voene perfecto con un cristal de 4Mhz... si le pido mas frecuencia, se ve en la salida un pwm erroneo con saltos de 10-20-30khz- y hasta 60khz
Mi pregunta es si puede ser el cristal el problema o se me esta pasando por alto algo...
Saludos