TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: toniarro en 13 de Noviembre de 2010, 16:36:17

Título: Dificultad con instrucción HPWM
Publicado por: toniarro en 13 de Noviembre de 2010, 16:36:17
Hola buenas tardes,
Tengo dificultades para entender la instrucción HPWM en pic 16f628A; alguien sabe el funcionamiento de dicha instrucción paso a paso. Yo estoy trabajando en basic. He leído información sobre ello pero casi todo esta en assembler y no entiendo nada. Mi objetivo es hacer encender un led lentamente y apagarlo lentamente en un intervalo de 1 minuto. Es posible hacer esto?
Un saludo y grácias de antemano!
Título: Re: Dificultad con instrucción HPWM
Publicado por: Mario en 16 de Noviembre de 2010, 02:35:47
¿Podría colocar algo de código?

Una búsqueda en el foro de Basic produjo estos resultados:

http://www.todopic.com.ar/foros/index.php?topic=15437.0
http://www.todopic.com.ar/foros/index.php?topic=14107.0
http://www.todopic.com.ar/foros/index.php?topic=14226.0
http://www.todopic.com.ar/foros/index.php?topic=14107.0

Espero le sirva.
Título: Re: Dificultad con instrucción HPWM
Publicado por: toniarro en 16 de Noviembre de 2010, 07:28:54
Muchas grácias por la ayuda Mario.
He visto los links que me has passado. La verdad esque entiendo el concepto de la instrucción.
Con la instrucción PWM solo consigo controlar la intensidad de un led. Es decir si quiero que funcione a un 50% o a un 80% o a un 100% eso si que consigo hacerlo. Lo que no consigo esque se encienda poco a poco y se apague lentamente en un intervalo de un minuto que es lo que yo quiero.
No se si es posible hacerlo por ese intervalo tan largo. Repito yo trabajo con pbp y no hay manera. :(
Si alguien le ha pasado lo mismo que a mi por favor que me heche un cable.
Le agradezco la ayuda.
Título: Re: Dificultad con instrucción HPWM
Publicado por: Veguepic en 16 de Noviembre de 2010, 10:08:44
Hola, si es posible pero la instruccion sola no lo hace.

Una idea seria definir A (% o valor de luminosidad inicio) y B (% o valor de luminosidad final), la diferencia la divides entre el tiempo (segundos), este valor es que adicionas cada segundo a al HPWM, con eso deberia funcionar.

Ahora que lo pienso para evitar complicarte con decimales, tambien podrias hacer lo inverso, es decir dividir tiempo (milisegundos) entre la diferencia, asi actualizas el valor una unidad a la vez en el HPWM de acuerdo al tiempo mediante un pause ,creo que quedaria mejor y el codigo seria mas corto. Cuestion de probar.

Hay que tener en cuenta que la diferencia puede ser positiva o negativa, eso tendrias que implementarlo en tu algoritmo.

Saludos
Hugo
Título: Re: Dificultad con instrucción HPWM
Publicado por: Mario en 16 de Noviembre de 2010, 13:27:57
Lo que no consigo esque se encienda poco a poco y se apague lentamente en un intervalo de un minuto que es lo que yo quiero.
No se si es posible hacerlo por ese intervalo tan largo. Repito yo trabajo con pbp y no hay manera. :(


Utilice un FOR para eso. Entre cada iteración espere unos 20 milisegundos (si lo quiere rápido) o, unos 200 milisegundos si lo quiere lento. También puede hacerlo con un IF e incrementar.

Recuerde que HPWM solo utiliza el CCPRxL, por lo que tiene una resolución de 8 bits (255 incrementos). Si desea utilizar los 1024 incrementos deberá escribir directamente a CCPxCON<5:4> y CCPRxL.

Intente con algo parecido a esto:
Código: [Seleccionar]

X:
   IF (ciclo<255) THEN incremento
   GOTO inicio


incremento:
   ciclo=ciclo+1
   pause 20 ó 200
   HPWM (1, ciclo, 1000)
   GOTO inicio

Algo asi.


EDICIÓN:
para que se apague.... ciclo=ciclo-1

algo así.

Tengo mucho tiempo que no programo en PBP, pero mas o menos me acuerdo.
Título: Re: Dificultad con instrucción HPWM
Publicado por: toniarro en 17 de Noviembre de 2010, 07:19:34
Buenos dias a todos.

Ya he conseguido lo que quería. :lol:    Por si alguien utiliza el PBP i quiere hacer que un led se encienda lentamente y se apague lentamente en un intervalo de 3 minutos; aquí esta el programa:

symbol led = portb.0
ciclo var word
trisb = 0
'inicio de programa
ciclo = 0
led = 0

loop:
if ciclo < 35 then
ciclo = ciclo + 1

pwm led,ciclo,500
goto loop
else

for ciclo = 35 to 0 step -1

pwm led,ciclo,500
next ciclo
ciclo = 0
goto loop
endif
end

También hay que conectar una resisténcia de 4,7k en la patilla 4 del pic 16f628a que vaya directamente a Vdd ( +5V ).
Veo que si juegas con la frecuencia i la variable ciclo puedes ajustar la velocidad de encendido y apagado del led.
 
Bueno ahora mi segunda parte es conectar una bombilla de 220v ( en alterna ) en lugar del led. Como podría hacer esto; ya que con un relé no me funcionaria..
Alquien tiene alguna idea de como hacer esto? :?

Una vez mas os doy las grácias a vosotros quien ayudais a los que acabamos de empezar con este mundo de los pics.  Particularmente a mi, me da mucho ánimo seguir con todo esto, sabiendo que os tengo a vosotros.
Un saludo, grácias
















Título: Re: Dificultad con instrucción HPWM
Publicado por: dogflu66 en 17 de Noviembre de 2010, 09:12:07
Si no estas acostumbrado a trabajar con 220AC no te recomiendo esa practica. De todas formas no te va ha servir las practicas con PWM, ya que las lámparas de filamento a 220AC no se controlan del mismo modo. Necesitas detectar el paso por cero de la senoide esperar un tiempo, más tiempo menos luce la lámpara, y excitar el triac, y esperar el próximo paso por cero. El triac cuando la tensión pasa de nuevo por cero corta de forma automática. También se producen muchos parásitos que tienes que tener en cuenta en tu circuito a nivel de protecciones o el micro no funcionara bien.
Título: Re: Dificultad con instrucción HPWM
Publicado por: Mario en 17 de Noviembre de 2010, 12:55:20
Si cuenta con un 16F628 podría hacer uso del PWM en Hardware, no se le ve el caso de utilizar PWM en software.

Tiene razón Dogflu66, debe primero revisar un poco de teoría para CA.

Le recomiendo revise el foro para eso (existen temas ya desarrollados). Se le recomienda también la nota de aplicación AN958 (http://ww1.microchip.com/downloads/en/AppNotes/00958A.pdf)