desktop

Curso de programación de PIC en PICBasic Pro

Si amigo, ya vi el manual, pero Mi duda, es esta instrucción, que no se que significa
PWM (0 a 1016)
Tal vez quieres decir que el PWM, alcanza máximo 0 a 1016, EN CCP:confused:
 
:oops: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, ..
 
Última edición:
:LOL: se ve que cuando arme el topico, se corrio una linea el comentario... o sea, seria es5to lo que se tenia que leer:
' envia el valor equivalente PWM (0 a 1016)

:oops: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, ..

Cosmico, tendrias que subir todo tu laburo completo PARA PODER AYUDARTE :rolleyes: en PBP en su momento lo encare totalmente distinto (eeprom lo cabie por data, use lokup,etc etc); pero como ya no tengo la PC que tenia antes, se perdio en el tiempo y espacio :facepalm:
Saludos a todos, esty reactivandome despacito ;)
 
Hola Amigo torres, gusto saludarle
voy armarlo en físico, por o menos sólo el PIC y les cuento, voy a ver si es cuestión de simulación...
Este circuito, lo probaste con un motor, me interesa es saber como se hace, me gusta la electronica, y es algo que siempre he tenido en mente para mis ratos libres
 
Última edición:
lo probe con una bombita centrifuga de 220v... No era mucha carga y funciono relaivamente bien en un rango de frecuencias... si arranca con frecuencias muy bajas hace ruido feo el motor y tiende a calentar mucho
 
A que frecuencia de cristal trabajaste el picaxe..
Hay algo, que no entiendo, tienes una tabla, que no veo el programa donde la captura..


symbol VoltsTbl = 0
eeprom 0,(255,246,237,229,221,214,207,201)
eeprom 8,(195,190,184,179,175,170,166,162)
eeprom 16,(158,154,151,147,144,141,138,135)
eeprom 24,(133,130,128,125,123,121,118,116)
eeprom 32,(114,112,111,109,107,105,104,102)
eeprom 40,(101,99,98,96,95,93,92,91)
eeprom 48,(90,88,87,86,85,84,83,82)
eeprom 56,(81,80,79,78,77,76,75,74)
 
Última edición:
creo que le puse uno de 4Mhz, el pwm lo labure por software, ya que en segundo plano la minima que se puede implementar es de 245Hz (se podria implementar un divisor de frecuencias y asi hacer correr el pwm por hardware, pero no me gusta la idea)... fijate si podes cambiar la etapa de disparo, seria bueno que emplearas unos driver y creo que en el foro hay bastante material disponible como para que armes algo...tendrias que revolver un buen rato
 
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 :eek:
Mi pregunta es si puede ser el cristal el problema :unsure: o se me esta pasando por alto algo...
Saludos
 
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.
 
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.

:unsure: mira, ahi encontre un par de cosas que se me habian pasado por alto y ya las corregi, pero sigo con la misma falla...algo se me esta escapando y seguro que debe de ser una tontera :facepalm:

Código:
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
 
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.

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.
 
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.

fue lo primero que `probe, pero en el osciloscopio sale deformada la señal con freqout...

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.

interesante dato que no tenia ni la mas palida idea... :unsure: 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 :facepalm:
La busque nuevamente, pero no la encontre mas por uqe no esta mas la pagina de Darrel Taylor :rolleyes:
esta relativamente buena, por que con tan solo dos variables, controlabas el pwm por hardware.
vamos a ver como encaro este tema :)
 
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... :unsure: 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 :facepalm:
La busque nuevamente, pero no la encontre mas por uqe no esta mas la pagina de Darrel Taylor :rolleyes:
esta relativamente buena, por que con tan solo dos variables, controlabas el pwm por hardware.
vamos a ver como encaro este tema :)

Hola...torres.electronico¿Si entras acá no podes recuperar/obtener algo de la pagina que buscas?
Saludos.

Ric.
 
Buen día. Miren, éstos archivos de comunicación serial del PIC funcionan perfectamente, ya que cuando envío vía serial de visual studio 6.0, funciona, pero si envió de MatLab al PIC, no me funciona.
¿Por qué pasa ésto?

Gracias. Adjunto programación.

La programación en MatLab, es :
Código:
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
 

Adjuntos

  • picmatlabvisual.rar
    19.5 KB · Visitas: 42
Última edición por un moderador:
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 :eek:
Mi pregunta es si puede ser el cristal el problema :unsure: o se me esta pasando por alto algo...
Saludos


El follo de que varíe la frecuencia tiene que ser otra biblioteca que cargas y te varia el prescaler de tmr2

Tanto prescaler como pr2 son para ajustar la frecuenciia

Frecuencia = 1/(((fosc/4)/prescaler)/pr2)

Las ecuaciones suelen estar en la documentación del integrado en la sección de control pwm


Bueno igual ahora mismo equivoco ccpr1l ccpr1h con pr2.
Unos sirve para limitar el contador de 16bit 65535 y que cuente solo asta 100. Y pr2 modula pwm

Si quisieras para ajustar pwm para una frecuencia tendrías q jugar con el largo q cuenta tmr2 y una operación para ajustar el duty para que de ajuste el tiempo de pulso alto igual al bajo aun variando el limite del cotador tmr2.

Y puestos a meditar en tres cerveza y cerveza.

Para picbasic y poder ajustar rápido la frecuencia de salida con tmr2
Tendrías que definir una variable de 16bit (llamarla frecuenout, por un poner) creas dos alias de los 8 bit altos y los 8 bit bajos como constantes de ccpr1h ccpr1l.
Si no pasas de 2048 puedes ajustarla a pr2 con la instrucción de des lazar bit ala derecha (es igual a dividir entre dos) recuerda q pr2 pbp la interpreta como 16bit solo q al pasarla al pico solo maneja 10bit si el valor es mallor el pic se cuelga
Si la frecuencia es muy alta con prescaler 1:1 pasa a 4:1
Con un cristal de 4mrz tampoco vas a manejar un rango de frecuencia muy alto pero para 5khz creo q de sobra.

Otra cosa q hay q contar si se usa una biblioteca para el puerto PSI los baudios de comunicación están vinculados a tmr2 y modifican ccpr y el prescaler. El pos escales no creo q te interese manejarlo solo es otra reducción mas de la cantidad de veces allá terminado tmr2 en hacer un ciclo. Permite lecturas de comparación de comparación cada x ciclos pwm 1a16
Espero no averme esplallado mucho

Un saludo
 
Última edición:
Atrás
Arriba