Autor Tema: Controlar led mediante pwm  (Leído 10760 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Controlar led mediante pwm
« en: 30 de Septiembre de 2006, 02:21:36 »
Hola, esto que voy a poner aqui ya lo he puesto en Comenzando en MikroBasic pero, lo pongo aqui para que sea mas facil ayudarme. Estoy mirando ejemplos sencillos de encender un led y ya se encender/apagar a la velocidad que yo quiero. Ahora me interesa mucho saber como hacer para que un led se encienda poco a poco creo que se hace mediante pwm.

Pues he probado el ejemplo que sale en el Mikrobasic que se puede encontrar buscando en la ayuda: "pwm", salen 2 resultados pues el segundo explica como encender poco a poco un led utilizando un pic18F452. Yo tengo 2 pics 16F628 y 1 pic16F876 que es el que estoy usando ahora porque tiene puerto C.





Código: [Seleccionar]
program Pwm_Test
dim j as byte

main:
  j = 0
  PORTC = $FF           ' Initialize PORTC
  Pwm_Init(5000)        ' Initialize PWM module, freq = 5kHz.
  Pwm_Start             ' Start PWM

  while true
    for i = 0 to 20
      Delay_us(500)
    Inc(j)
    Pwm_Change_Duty(j)  ' Change duty ratio
  wend
end.

En este codigo he probado a ponerle el Next que va antes que wend pero, tampoco me funciona.

He montado bien el circuito pero en vez de usar el PIC18F452 he usado el PIC16F876, he cambiado los pines para adaptar el circuito al pic16F876, tambien he puesto he puesto bien en el MKB el tipo de pic y el reloj, me compila bien, tengo bien configurado el Winpic800 y me graba bien el pic porque tambien he probado otras cosas  como encender/apagar led y esta comprobado que me lo ha grabado bien.

He buscado mucho en el google antes de postear aqui y no he encontrado ningun ejemplo sencillo.
Me vale cualquier ejemplo de como controlar un led por pwm, si es posible sencillo y con un Pic16f876.

Saludos.


« Última modificación: 30 de Septiembre de 2006, 02:28:07 por Trust »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #1 en: 30 de Septiembre de 2006, 17:29:53 »
Bueno podrias probar eliminando el while wend y dejando el For..Next esto tan solo para verificar que al menos lo hace en el ciclo del FOR.
Creo que usas el PWM por Hardaware, entonces seria bueno que verifiques si el pic que usas tiene opcion a PWM y que pines son, esto lo haces mirando el datasheet del pic; tambien verifica que al compilar no te de warnings, porque un warning si te deja compilarlo mas no garantiza que funcione. Y sera mejor que pongas el circuito que usas no el que viene con el MKB.

Suerte y comentanos que pasa
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Controlar led mediante pwm
« Respuesta #2 en: 30 de Septiembre de 2006, 17:37:52 »
Hola.

Aunque no es MicroBasic, es PBP, tengo entendido que puedes accesar a los registros de manera similar.

Revisa este ejemplo, es para PWM en Hardware, el 18FXX2 tiene 2 PWM.

Aunque el ejemplo es para un 16F628, los registros son los mismos, solo que para un 18FXX2 tienes dos PWM (misma frecuencia pero diferentes ciclos de trabajo).

Espero te sirva.

http://www.rentron.com/PIC16F628.htm

La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #3 en: 30 de Septiembre de 2006, 17:41:38 »
 :mrgreen: pero si es MKB Mario, esas instrucciones no las he visto en PBP y no se usan asi.
Código: [Seleccionar]
en PBP es PWM pin, duty,cycle
o bien usando el clasico LOW  y HIGH como aqui
Código: [Seleccionar]
high 0
pauseus 1000   
low 0
pause 20

retomando lo de TRUST     aqui te dejo el ejemplo que funciona, bueno prende y apaga segun el pwm aunque crei que cambiaria la intensidad. me dices  si es lo que querias (es para MKB)

Código: [Seleccionar]
program pwmled

dim i as byte

TRISC = 0
main:
 PORTC = 255
 Pwm_init(5000)
 Pwm_Start
 
  for i=0 to 50
   delay_ms(500)
   inc(i)
    Pwm_change_duty(i)
  next i
 
 pwm_stop
 delay_ms(1000)
goto main
end.


esta a 4MHZ en RC2




« Última modificación: 30 de Septiembre de 2006, 18:19:34 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Controlar led mediante pwm
« Respuesta #4 en: 30 de Septiembre de 2006, 18:07:55 »
En este caso no creo que sea diferente accesar directamente a los registros PR2, CCPR1L, CCP1CON e INTCON1.

La página sugerida muestra los valores necesarios a cargar para que genere una frecuencia de 38 KHz a 50% de ciclo, sin instrucciones ni nada, solo cargando valores a los registros del PWM que tiene en Hardware.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Controlar led mediante pwm
« Respuesta #5 en: 30 de Septiembre de 2006, 19:01:53 »
Muchas gracias Navaismo y Mario por vuestra ayuda, he probado el ejemplo y tambien he visto la pagina de Rentron pero, no me funciona el ejemplo y lo que pone en la pagina Rentron no me vale para Mikrobasic pero, de todas formas es tambien muy util.

No se donde puede estar el fallo, si cambio el programa por uno mas sencillo que encienda/apague un led funciona bien por lo que supongo que las conexiones que tengo de el cristal, los condensadores y la alimentacion lo tengo bien montado.

Lo que quiero que haga el programa no es que se encienda y apague rapidamente, es que varie la intensidad de iluminacion de menos a mas y de mas a menos.  :P

En el programa no veo donde especifica cual de las 2 salidas pwm se usan.
He probado a cambiar el valor de pwm_init y tampoco.

Mido en el tester la salida del pic del pwm y no lee nada.






Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #6 en: 30 de Septiembre de 2006, 19:10:28 »
de la ayuda del MKB
Citar
Note: These routines support module on RC2, and won’t work with modules on other ports. You can find examples for PICmicros with module on other ports in mikroBasic installation folder, subfolder “Examples”. Also, mikroBasic does not support enhanced PWM modules.
Por eso solo se puede usar el CCP2

Entonces es una especie de dimmer lo que intentas hacer??, mmm no estoy seguro si sea con pwm, porque lo unico que puedes variar es el "duty" en la libreria del MKB. dejame hacerlo fisico haber que resulta
« Última modificación: 30 de Septiembre de 2006, 19:12:42 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Controlar led mediante pwm
« Respuesta #7 en: 30 de Septiembre de 2006, 21:20:55 »
Si, es una especie de dimmer. He probado mas cosas con el Mkb y me he dado cuenta de que no me funciona bien el Mkb, sera creo por una mala configuracion.

Voy a ver si averiguo que tengo mal configurado en el Mkb.
He probado a hacerlo con el Proton y me funciona bien.

Código: [Seleccionar]
device 16f876
xtal 4
pause 2000
dim i

inicio:

 'enciende poco a poco
  for i=0 to 150
  pwm portc.2,i,10
  next i
 
  'apaga poco a poco
  for i=150 to 0 step -1
  pwm portc.2,i,10
  next i
 
 
goto inicio
end


Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #8 en: 01 de Octubre de 2006, 00:42:46 »
jeje Hace un rato hice lo mismo lo hice fisico y no jalo y despues probe con un F84A con PBP y si funciono, el mismo codigo con for y pwm, y tambien pense lo mismo creo que tenemos que configurar algo mas.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Controlar led mediante pwm
« Respuesta #9 en: 01 de Octubre de 2006, 01:09:49 »
Pues seré necio pero creo que si se puede hacer.

Navaismo, no me refiero a instrucciones propias para hacer el PWM como PWM o HPWM que trae el PBP.

Me refiero al hardware.

Bruce configura el PWM en hardware para un 16F628.

TRISB     = %11110000     ' B.3=PWM,B.0,B.1,B.2 blink LEDs
PR2       = 25                    ' Set PWM for approximately 38KHz
CCPR1L    = 13                 ' Set PWM Duty-Cycle to 50%
CCP1CON   = %00001100  ' Mode select = PWM
T2CON     = %00000100     ' Timer2 ON + 1:1 prescale

begin:
   high PortB.0
   pause 50
   low PortB.0
   pause 50
   high PortB.1
   pause 50
   low PortB.1
   pause 50
   high PortB.2
   pause 50
   low PortB.2
   pause 50
   goto begin

El HIGH y LOW lo hace solamente porque el puerto puede trabajar como PWM, aunque con la misma frecuencia y mismo ciclo de trabajo.


Una duda:

En PBP para asignar un valor haces--> CCPR1L    = 13

En Microbasik --> ¿?

¿Cómo le haces para asignar valores a los registros internos del µicro en Microbasik?



 :shock:

Me vino a la mente.

Revisa este código, igual está en PBP pero si mi hipótesis es cierta que puedes accesar de la misma manera a los registros internos, te puede servir.

Este programa asigna una frecuencia de 1 KHz y varía el ciclo de trabajo de 20% a 80% en incrementos de 10%. Podrás ver la intensidad de esa manera.

Pero es indispensable saber si es posible escribir a registros internos (¿navaismo? :D)

http://www.microengineeringlabs.com/resources/samples/pbp/hardpwm.bas
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #10 en: 01 de Octubre de 2006, 01:19:48 »
si en MKB se ingresan Igual los registros bueno al menos lo he notado con el adc en PBP ADCON1 =  y MKB  ADCON1= ,,osea creo que se direccionan de la misma manera :mrgreen:

saludos.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Controlar led mediante pwm
« Respuesta #11 en: 01 de Octubre de 2006, 01:28:51 »
Entonces el código de la página de Microengineering labs servirá.

Genera el ancho de pulso variable para una misma frecuencia, como quiere la intensidad y te la dá el ancho de pulso, está perfecto.

"Guerra guerra sin tregua al que intente"  :D

Parece que estamos peleando:

que si se puede  :)

que no se puede  :x

que si  :)

que no  :x..........


Oye navaismo, fuera del tema, ¿has intentado hacer lo del punto flotante con la DIV32?

He visto que a todos recomiendas usar la FP de µicrochip.

Yo las usaría pero no les entiendo  :D.

Mejor uso el DIV32, no tengo que crear variables no mover aquí ni allá.

Si no sabes como usarla dime y creo un tema explicando cómo se usa, no es decimal decimal pero casi.

"no es lo mismo, pero es igual"  :D
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Controlar led mediante pwm
« Respuesta #12 en: 01 de Octubre de 2006, 01:29:50 »
Y me voy porque hay que divertirse, Sábado en la noche ¡¡¡¡¡SI!!!!!  8)
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #13 en: 01 de Octubre de 2006, 01:44:14 »
Orale no estaria mal que me explicaras eso de la div32 acepto lo del tema, y que te diviertas SALUDDDDDDDD!!!!!!

PD, yo no me peleo solo que no me sale :D
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Controlar led mediante pwm
« Respuesta #14 en: 01 de Octubre de 2006, 17:43:38 »
snif snif, queria ver lo que dice Mario pero para un 16F876 y al parecer ya me cargue los 4 que tenia, ya ni siquiera prende y apaga un simple LED.

Maldito MKB algo les hizo :5] :8}
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."


 

anything