Autor Tema: 16f690 y PWM...no consigo entenderlo!  (Leído 15911 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
16f690 y PWM...no consigo entenderlo!
« en: 03 de Septiembre de 2009, 16:03:44 »
Hola compañer@s!

Vereis, quiero controlar la luminosidad de un led a traves del pwm del pic 16f690 y francamente no se muy bien ni por donde empezar (soy un completo novato, apenas se usar lo mas basico de un 16f84A). Las mas de 200 paginas del datasheet no ayudan mucho y ando perdido y desorientado. Asi pues he decidido aprender basandome en algun ejemplo ya hecho, sencillo, y a partir de ahi construir mi proyecto y hacerlo mas elaborado. El caso es que el codigo que he conseguido no se bien bien lo que hace y lo que es peor, al grabar el pic con el no obtengo resultado alguno, no hace nada, vamos.

He aqui el codigo en cuestion, seria posible que me resumieseis lo que hace?muy a grosso modo...

Código: [Seleccionar]
List p=16f690
#include<p16f690.inc>
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
ERRORLEVEL-302
;**********************************************************************
cblock 0x20
temp
d1
d2
don
doff
dis
endc
;***********************************************************************
org 0x00
goto main
;***********************************************************************
main:
portset:
bsf STATUS,RP0
clrf TRISA
clrf TRISB
clrf TRISC
bcf STATUS,RP0
start: ; THE BASIC FUNDA OF THIS PROGRAM IS THAT LOOP
call bright ;"bright" SHOULD KEEP RUNNING DURING "delay" OR IN OTHER
movlw b'00000000' ;WORDS EQUAL TO THAT TIME PERIOD WHICH IS USED IN HERE.
movwf PORTC
call delay
goto start
delay:
decfsz d1
goto delay
decfsz d2
goto delay
return
bright:
incf dis,f
movlw b'00000001'
movwf PORTC
call delayons
movlw b'00000000'
movwf PORTC
call delayoffs
btfss dis,0x00
goto bright
btfss dis,0x01
goto bright
btfss dis,0x02
goto bright
btfss dis,0x03
goto bright
btfss dis,0x04
goto bright
btfss dis,0x05
goto bright
btfss dis,0x06
goto bright
btfss dis,0x07
goto bright
clrf dis
return
delayons:
movlw d'36'
movwf don
delayon:
decfsz don
goto delayon
return
delayoffs:
movlw d'220'
movwf doff
delayoff:
decfsz doff
goto delayoff
return
end

Por descontado si alguno teneis algun codigo mas sencillo por el que empezar e ir evolucionando, os lo agradeceria mucho. He buscado como un poseso pero del 16f690 encuentro muy poquita cosa :(

Muchisimas gracias de antemano :)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #1 en: 03 de Septiembre de 2009, 17:31:12 »
http://www.todopic.com.ar/foros/index.php?topic=24720.0

Aqui tienes un par de ejemplos de PWM con el 16f628 al final del segundo bloque, si estas empezando a lo mejor prefieres leerlo desde el principio, eso tu veras, pero vale la pena.


Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #2 en: 03 de Septiembre de 2009, 18:06:52 »
Fenomenal! muchas gracias  :) y mira que habia visto ya el fabuloso tutorial de suky, pero no me ha venido a la cabeza buscarlo  :oops: :oops: :oops:

Ahora ya solo quedaria intentar adaptarlo al 16f690  ;-)

De nuevo gracias por la ayuda

EDIT: Estoy intentando desarrollar la adaptacion al pic 16f690 y hay muchas cosas que no consigo ubicar.

Cuales son los equivalentes a

Código: [Seleccionar]
bcf CCP1CON,CCP1X
bcf CCP1CON,CCP1Y

en el 16f690?
« Última modificación: 03 de Septiembre de 2009, 18:40:06 por MADKazuya »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #3 en: 04 de Septiembre de 2009, 00:09:04 »
Gracias por lo de fabuloso  :oops: Y por lo visto esos bit son exactamente los mismos, los bit 4 y 5 del registro CCP1CON. Datasheet (Pág. 132)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #4 en: 04 de Septiembre de 2009, 06:54:40 »
Si tu supieses a cuanta gente ayudas casi sin quererlo suky, te quedarias asombrado  :mrgreen: :-/

Lo primero que me sorprende es que ese no es el datasheet que tengo yo, lo que ya es un mal comienzo para mi  :D. De todos modos los bits 4 y 5 del registro CCP1CON son DC1B <1:0> no?, es que me refiero a que no veo CCP1X CCP1Y por ninguna parte y al hacer un "build" de tu codigo una vez cambiados los bits de configuracion me da un error de precisamente esos dos bits (undefined).

Saludos

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #5 en: 04 de Septiembre de 2009, 08:06:48 »
Citar
Si tu supieses a cuanta gente ayudas casi sin quererlo suky, te quedarias asombrado   

   
       


Yo cre que Suki queria ayudar cuando lo hizo  :lol: :lol:

Si solo vas a controlar el LED puedes hacer tu un PWM artesanal, le envias en alto un tiempo 5ms por ejemplo y despues 15ms en bajo y tendrias 25% despues cambias y le envias 10ms a 1 y otros 10ms en 0 50% ( no se si estos tiempos valen para los LEDs, para servos son asi ) se trata de enviar cada cierto tiempo 20ms, por ejemplo, una parte en alto y a continuacion el resto en bajo, cuanto mas tiempo en alto masciclo de trabajo y mas luz dara el LED.

bsf   portb,0
call  delay        aqui tiempo en alto
bcf  portb,0
call  delay1

haces varios delays y los vas llamando segun te convenga.

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #6 en: 04 de Septiembre de 2009, 08:42:07 »
Hmmm pues no lo habia pensado tapi8, pero tienes toda la razon, ademas asi podria usar un 16F84A vulgar y corriente para dicha labor. Lo unico que no consigo solucionar es el como decirle al MOSFET que se encarga de alimentar cada led que se comporte segun dicho pwm (sea o no artesanal). Esta claro que si conecto el pwm al gate del mosfet, no funcionara bien, ya que este no entiende de duty cicles, o esta ON o esta OFF. Alguna idea?

De todos modos aunque la idea del pwm artesanal sea muy buena, creo que mi ambicion personal se interpone y quiere saber mas y mas, y si hay IC's que disponen de esa funcion ya implementada, me gustaria como minimo entender como funcionan, aunque luego acabe usando el pwm artesanal. :)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #7 en: 04 de Septiembre de 2009, 09:10:49 »
Perdón, no me di cuenta que tienen otro nombre, CCP1X=DC1B1 y CCP1Y=DC1B0. Si todavia quieres intentarlo por hard creo que cambiando eso debería de funcionar  :undecided:


Edit, Veo que con este PIC se puede controlar un Motor, osea tiene distintas configuraciones de PWM, para que sea simple los bit 6 y 7 de CCP1CON deben estar en 0.

Código: ASM
  1. bcf     CCP1CON,6
  2. bcf     CCP1CON,7

Saludos!
« Última modificación: 04 de Septiembre de 2009, 09:13:27 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #8 en: 04 de Septiembre de 2009, 10:32:14 »
Ahora el codigo no da error alguno...tan solo algunos warnings pero no parece nada serio. Pero aun asi, usando el pickit2 no funciona nada...puede ser que me haya cargado el PIC? como podria saberlo? :oops: :(

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #9 en: 04 de Septiembre de 2009, 11:38:19 »
No tengo idea como se usan esas herramientas de Microchip  :tongue: Pero en el código revisa si los registros los estas trabajando en el banco adecuado,   ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #10 en: 05 de Septiembre de 2009, 15:42:59 »
No tengo idea como se usan esas herramientas de Microchip  :tongue: Pero en el código revisa si los registros los estas trabajando en el banco adecuado,   ;-)

Bueno, el caso es que estoy usando el codigo tal y como tu lo tienes publicado. Aun asi he de revisar los registros? (madre mia estoy mas perdido que un pulpo en un garaje, lo siento  :oops:)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #11 en: 05 de Septiembre de 2009, 15:49:11 »
Claro, porque al utilizar distinto microcontrolador puede ser que algún registro no estén en el mismo banco.
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #12 en: 06 de Septiembre de 2009, 09:03:07 »
Claro, porque al utilizar distinto microcontrolador puede ser que algún registro no estén en el mismo banco.

He estado indagando y he visto que en efecto los registros de cada banco no estaban direccionados segun el chip que uso yo (logico  :oops:). Tambien he visto que el bit RB3 en el 16f690 no existe, y que no hay salidas "especificas" de pwm. Quiere eso decir que puedo usar la que yo quiera?

De momento esto es lo que he modificado (que creo que esta bien)

Código: [Seleccionar]
Inicio
bsf STATUS,RP0 ; -
bsf STATUS,RP1 ; Banco 3
bsf TRISB,incre ; Como Entrada.-
bsf TRISB,decre ; Como Entrada.-
bcf TRISB,3 ; RB3 como Salida.
bcf STATUS,RP0 ; -
bcf STATUS,RP1 ; Banco 0.-
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; -
movlw 0x1E ; Senal de 2kHz
movwf PR2
bsf STATUS,RP0 ; Banco 0
clrf CCPR1L ; Ciclo de trabajo 0%
bcf     CCP1CON,6
bcf     CCP1CON,7
bcf CCP1CON,DC1B1
bcf CCP1CON,DC1B0
bsf CCP1CON,CCP1M3 ; Configura modulo CCP modo PWM.-
bsf CCP1CON,CCP1M2

De todos modos, aunque en un futuro si deseo pelearme con las interrupciones en este preciso instante no es necesario. Podria recortar alguna parte del codigo?(ver codigo completo a continuacion; codigo extraido de los tutoriales de SUKY, a quien aprovecho para agradecer su ayuda)

Código: [Seleccionar]
; PICkit 2 Lesson 1 - 'Hello World'
;
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0

;**** Definicion de variables ****
Contador1 equ 0x20 ;
Contador2 equ 0x21 ;

decre equ 0 ; Pulsador para decrementar Ciclo de Trabajo
incre equ 1 ; Pulsador para incrementar Ciclo de Trabajo


;/////////////////////////////////
;**** Inicio del Micro ****
Reset.
org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
 
; **** Programa Principal ****
org 0x05
Inicio
bsf STATUS,RP0 ; -
bsf STATUS,RP1 ; Banco 3
bsf TRISB,incre ; Como Entrada.-
bsf TRISB,decre ; Como Entrada.-
bcf TRISB,3 ; RB3 como Salida.
bcf STATUS,RP0 ; -
bcf STATUS,RP1 ; Banco 0.-
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; -
movlw 0x1E ; Senal de 2kHz
movwf PR2
bsf STATUS,RP0 ; Banco 0
clrf CCPR1L ; Ciclo de trabajo 0%
bcf     CCP1CON,6
bcf     CCP1CON,7
bcf CCP1CON,DC1B1
bcf CCP1CON,DC1B0
bsf CCP1CON,CCP1M3 ; Configura modulo CCP modo PWM.-
bsf CCP1CON,CCP1M2
Bucle
btfsc PORTB,decre ; Testea si se quiere reducir CT.-
goto Decrementa
btfsc PORTB,incre ; Testea si se quiere aumentar CT.-
goto Incrementa
goto Bucle
Incrementa
incf CCPR1L,1
call Demora_50ms
goto Bucle
Decrementa
decf CCPR1L,1
call Demora_50ms
goto Bucle
 
 
;**** Demora ****
Demora_50ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0x40 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
;..............................................
end

Muchas gracias por la ayuda...con un poco de suerte algun dia no muy lejano hare de mi un programador de provecho  :oops: ;-)

EDIT: segun el datasheet las salidas PWM se hallan en TRISC, me equivoco?
« Última modificación: 06 de Septiembre de 2009, 09:11:17 por MADKazuya »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #13 en: 06 de Septiembre de 2009, 09:28:12 »
Los pines del PWM están bien definidos, son RC5, RC4, RC3 y RC2. Pero en funcionamiento simple RC5 es la salida.

Luego no están físicamente los pines RB0-RB3, debes seleccionar otros pines para los pulsadores de entrada. Cuando realizas un traspaso de código de un microcontrolador a otro es importante que tengas los 2 datasheet, para que veas las diferencias entre ambos, porque se realiza así las configuraciones, ubicación de registros, etc.

También vi que en tu código seleccionas 2 veces el banco 1, pero no vuelves al banco 0  :?




Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MADKazuya

  • PIC10
  • *
  • Mensajes: 39
Re: 16f690 y PWM...no consigo entenderlo!
« Respuesta #14 en: 06 de Septiembre de 2009, 09:39:35 »
Perdona la pregunta suky, pero dices que los puertos C estan bien definidos en el codigo de origen (el tuyo). Te importaria señalarme donde estan definidos?  :oops: :oops: