TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: MADKazuya en 03 de Septiembre de 2009, 16:03:44

Título: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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 :)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 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.

Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky 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) (http://ww1.microchip.com/downloads/en/DeviceDoc/41262E.pdf)


Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 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.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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. :)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky 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!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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: :(
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky 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,   ;-)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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:)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky 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.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky 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!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya 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:
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 06 de Septiembre de 2009, 10:02:44
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:
No, mi código es para el PIC16F628, no tiene puerto C, cuando comentabas eso pensé que te referías a los pines físicos del 16F690. Por eso te comento que debes tener los 2 datasheet para entender el funcionamiento del código y de ahí pasarlo al microcontrolador que piensas usar.




Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 06 de Septiembre de 2009, 12:32:00
De nuevo dando guerra  :oops: pero quiero aprender y no pienso tirar la toalla!

Este es mi codigo modificado hasta el momento

Código: [Seleccionar]
Inicio
bsf STATUS,RP0 ; Banco 1
bcf STATUS,RP1  ; -
movlw b'11111011' ; Todo entradas menos una salida
movwf TRISC
bcf STATUS,RP0 ; Banco 0
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf 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

Y este, el output que me da (2 mensajes que me avisan de que trisc y pr2 no se hallan en el banco 0).

Message[302] C:\USERS\KAZUYA\DESKTOP\PIC\CUADRO\INTENTO PWM.ASM 63 : Register in operand not in bank 0.  Ensure that bank bits are correct. (se refiere a la linea  movwf   TRISC )
Message[302] C:\USERS\KAZUYA\DESKTOP\PIC\CUADRO\INTENTO PWM.ASM 69 : Register in operand not in bank 0.  Ensure that bank bits are correct  (se refiere a la linea  movwf   PR2)

Cosa que NO entiendo, ya que en ambos casos NO estamos en el banco 0!  :? :( Quien se volvera loco antes? el programa? vosotros? o yo? :mrgreen: El caso es que se enciende el led en cuestion, pero no varia la señal (seguramente el hecho de que no tenga implementado ningun pulsador tenga mucho que ver, pero es que quiero que el programa de 0 mensajes y errores antes de proseguir; solo entonces acabare de adaptarlo a mis necesidades)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 06 de Septiembre de 2009, 12:57:49
No te preocupes por el mensaje, solo indica que te asegures si estas trabajando en el banco correcto a TRISC. Luego la señal PWM sale por el pin RC5, y como el ciclo de trabajo es 0% no debería prenderse el led.


Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 07 de Septiembre de 2009, 16:24:42
Bien, yo sigo aqui ensimismado y cegado en mi empeño por que esto vaya de una vez. Me estoy mirando todo cuanto pone en el datasheet (primero el 16f690, y luego me mirare el 16f628 y jugare a "busca las 7 diferencias"  :mrgreen:) y he visto algo interesante, y es un "paso a paso" de lo que hay que hacer. Lo malo es que no se identificar que es lo que he hecho hasta ahora. Ayuda, please? :oops: :oops:

Paso a Paso:

11.3.7 SETUP FOR PWM OPERATION
The following steps should be taken when configuring
the CCP module for PWM operation:
1. Disable the PWM pin (CCP1) output driver by
setting the associated TRIS bit.
2. Set the PWM period by loading the PR2 register.
3. Configure the CCP module for the PWM mode
by loading the CCP1CON register with the
appropriate values.
4. Set the PWM duty cycle by loading the CCPR1L
register and DC1B<1:0> bits of the CCP1CON
register.
5. Configure and start Timer2:
• Clear the TMR2IF interrupt flag bit of the
PIR1 register.
• Set the Timer2 prescale value by loading the
T2CKPS bits of the T2CON register.
• Enable Timer2 by setting the TMR2ON bit of
the T2CON register.
6. Enable PWM output after a new PWM cycle has
started:
• Wait until Timer2 overflows (TMR2IF bit of
the PIR1 register is set).
• Enable the CCP1 pin output driver by clearing
the associated TRIS bit.

Codigo

Código: [Seleccionar]
Reset.
org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
 
; **** Programa Principal ****
org 0x05
Inicio
bsf STATUS,RP0 ; Banco 1
bcf STATUS,RP1  ; -
movlw b'11111011' ; Todo entradas menos una salida
movwf TRISC
bcf STATUS,RP0 ; Banco 0
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf 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

Entiendo que los pasos 2, 3 y 4 ya estan implementados pero, y el resto?  :? siento ser tan pesado, pero me interesa mucho entenderlo...y soy un poco cerrado con estas cosas, sobretodo hasta que no empiezo a entender algo! :mrgreen:

Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 07 de Septiembre de 2009, 21:13:15
Bueno, te comento de nuevo, el pin donde se obtiene la señal PWM es RC5, osea que debes cambiar la configuración del TRISC.

Luego los pines RB0 a RB3 no están implementados, así que los más sencillos de utilizar serian RB6 y RB7, si utilizas otros debes tener en cuenta de configurar correctamente los comparadores o el conversor analógico. Cambiando eso seguro que ese código funciona  ;-)



Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 17:59:38
Y una vez mas, volvemos al ataque (y una vez mas, tras infinidad de intentos infructuosos, y me empiezo a plantear ya tirar la toalla porque debe de ser que soy tonto y no llego). A ver, mi problema esta claro que no es tanto con el codigo como lo es con la configuracion del pwm del pic.

Veamos, poco a poco y buena letra. Por partes (es el paso a paso que pone el datasheet que hay que seguir para generar una pwm normal; no el "enhanced"):

1. Disable the PWM pin (CCP1) output driver by
setting the associated TRIS bit.

Entiendo que lo que debo hacer aqui es desactivar (poner a 0) RC5, puesto que es el pin asociado a CCP1. Si es asi, deduzco que seria hacer un BCF de dicho pin en el portc, me equivoco? o debo de cambiar algun valor desde el TRISC?.

2. Set the PWM period by loading the PR2 register.

Nada que aclarar, tan solo hay que cargar el periodo deseado en el registro PR2.

Código: [Seleccionar]
bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf STATUS,RP0 ; Banco 0

3. Configure the CCP module for the PWM mode
by loading the CCP1CON register with the
appropriate values.

Aqui empieza lo bueno. Esta claro que tengo que modificar los bits en CCP1CON, pero no se a que se refieren!. CCP1RL son los MSB's del duty, DCB1 y DCB0 los LSB's, y el resto de bits no tengo muy claro si debo o no activarlos (seguramente la mayoria de mis errores se hallan aqui)

4. Set the PWM duty cycle by loading the CCPR1L
register and DC1B<1:0> bits of the CCP1CON
register.

Aqui no hay duda, tal y como he comentado antes. Los MSB's a CPR1L y los LSB's a DCB <1:0>. Todo y que no lo tengo implementado aun, entiendo que no es mas que un par de mov a la manera tradicional para poner los valores deseados en los registros pertinentes.

5. Configure and start Timer2:
• Clear the TMR2IF interrupt flag bit of the
PIR1 register.
• Set the Timer2 prescale value by loading the
T2CKPS bits of the T2CON register.
• Enable Timer2 by setting the TMR2ON bit of
the T2CON register.

Todo esto no entiendo bien de que va, ya que usa bits que en ningun lado del apartado PWM se comentan, e incluso en el codigo de Suky juraria que no hay nada parecido.

6. Enable PWM output after a new PWM cycle has
started:
• Wait until Timer2 overflows (TMR2IF bit of
the PIR1 register is set).
• Enable the CCP1 pin output driver by clearing
the associated TRIS bit.

Mas de lo mismo. Es un proceso un tanto ilogico que no consigo entender por mas que me lo mire. Me he estudiado el datasheet decenas de veces y sigo sin entender que tengo y que no tengo que hacer para generar un misero pwm!.

Por otra parte he estado haciendo pruebas con el 16F84A para hacer un pwm artesanal y funciona bien, pero el codigo es tan sumamente inmenso que lo veo ridiculo. Ademas, el efecto no es el mismo ni remotamente, asi que hasta que ya tire la toalla oficialmente, me gustaria seguir intentandolo con el 16F690. Por favor, lo pido desde la mas absoluta desesperacion, AYUDA  :( :( :(
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 10 de Septiembre de 2009, 18:08:37
 :8} Yo ya probé (en proteus) el código que tu posteaste anteriormente cambiando el pin correspondiente (RC5) y funciona  :?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 18:34:52
¿??? lo probaste tal cual y funciona???? :shock: ESTE codigo???? porque a mi no me va ni a la de tres! :(

Código: [Seleccionar]
;/////////////////////////////////
;**** 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 ; Banco 1
bcf STATUS,RP1  ; -
movlw b'11101111' ; Todo entradas menos una salida
movwf TRISC
bcf STATUS,RP0 ; Banco 0
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf 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
goto Incrementa
goto Bucle
Incrementa
incf 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
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 en 10 de Septiembre de 2009, 18:45:37
Citar
[/qmovlw   b'11101111'   ; Todo entradas menos una salida
   movwf   TRISC
uote]

Yo creo que lo que TE dice Suki esta aqui, pones de salida RC4 Y no RC5, corre el 0 una posicion a la izquierda.

tapi8
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 18:58:07
Error garrafal, y eso que desde que me lo dijo suky lo cambie (mal, esta claro) y no lo he vuelto a mirar. Error mio, lo siento.  :(

Peeeero...sigue sin funcionar! estoy seguro de que algo mas tiene que fallar, algo tan basico que un novato como yo no consigue ver, y vosotros, mas veteranos, si. Yo estoy grabando EXACTAMENTE lo que pone en el codigo (con su correspondiente cabecera, naturalmente).

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

No me da ningun error, pero no va  :(
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 10 de Septiembre de 2009, 19:01:52
Yo cambie el tris como te indican y seleccione para los pulsadores los pines RB6 y RB7. No me acuerdo haber hecho otro cambio  :tongue:
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 19:18:21
Veras, es que el caso es que yo no necesito los pulsadores (almenos no ambos), y es muy probable que sea parte del problema en mi codigo. Mi idea es la de hacer que un led se encienda poco a poco...y se mantenga encendido mientras llegue una señal positiva de control. En el momento en el que esta pase a 0, se apague poco a poco. Se usara en un coche, asi pues esa "señal de control" sera el contacto. Una vez el contacto se active, se encendera poco a poco, y en cuanto el usuario retire la llave, debe apagarse de la misma manera. Quiza esta puntualizacion ayude mucho a "aligerar" el codigo.

Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 en 10 de Septiembre de 2009, 19:28:41
Citar
decre   equ      0   ; Pulsador para decrementar Ciclo de Trabajo
   incre   equ      1   ; Pulsador para incrementar Ciclo de Trabajo


No he seguido el hilo de cerca y no trabaje nunca con el 16f690, pero has cambiado esto?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 19:32:53
No, eso es del codigo original de suky. Entiendo que tras cada pulsacion de uno u otro pulsador incrementaba o decrementaba el pwm. Por eso digo que es muy probable que la implementacion de los dos pulsadores este afectando mucho el resultado final para lo que yo deseo.

De todos modos, si os fijais he hecho un pequeño ajuste que, en teoria, hace que el programa no dependa de pulsador alguno.

Código: [Seleccionar]
Bucle
goto Incrementa
goto Bucle
Incrementa
incf CCPR1L,1
call Demora_50ms
goto Bucle

Al final del programa sencillamente aumenta sin cesar el duty, y lo hace cada 50ms, con lo que el led deberia de ir ganando intensidad sin parar hasta llegar al 100 de duty.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 en 10 de Septiembre de 2009, 19:52:56
Citar
Yo cambie el tris como te indican y seleccione para los pulsadores los pines RB6 y RB7. No me acuerdo haber hecho otro cambio 

fijate lo que te pone aqui, yu los pones en RB0 Y RB1 que por lo que decis no estan implementados en este PIC, cambia equ  0 y equ  1 por 6 y 7 asi es como dice Suki que le funciona.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 20:02:45
Citar
Yo cambie el tris como te indican y seleccione para los pulsadores los pines RB6 y RB7. No me acuerdo haber hecho otro cambio 

fijate lo que te pone aqui, yu los pones en RB0 Y RB1 que por lo que decis no estan implementados en este PIC, cambia equ  0 y equ  1 por 6 y 7 asi es como dice Suki que le funciona.

Corregidme si me equivoco pero en mi codigo las variables incre y decre no se usan. Asi pues no creo que vaya a cambiar nada no? (insisto que el codigo mostrado ya tiene ciertos cambios con respecto al de suky). Me parece que estoy ciego porque llevo desde la ultima contestacion (hace dias) de suky intentando entender la importancia de RB6 y RB7 en mi codigo  :oops:
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 en 10 de Septiembre de 2009, 20:09:37
Citar
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

No estas usando este codigo? creo que es el que probo Suki.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 20:13:12
No, estoy usando una modificacion (que no sirve para mucho  :mrgreen:) mia, en un intento por suprimir los pulsadores, que no necesito para mi aplicacion... :oops: ya que quiero que sea automatico, tanto el encedido como el apagado progresivo.

El codigo es este:

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 6 ; Pulsador para decrementar Ciclo de Trabajo
incre equ 7 ; 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 ; Banco 1
bcf STATUS,RP1  ; -
movlw b'11011111' ; Todo entradas menos una salida
movwf TRISC
bcf STATUS,RP0 ; Banco 0
movlw b'00000110' ; Se selecciona TMR2, preescaler de 1/16.-
movwf T2CON
bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf 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
goto Incrementa
goto Bucle
Incrementa
incf 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

Lo que si es cierto es que se BASA en el de suky, eso si, por eso estoy seguro de que, al haberlo modificado, he hecho algo (o muchas cosas  :mrgreen:) mal. El codigo de suky esta pensado para un 16F628, el mio, para un 16F690.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: tapi8 en 10 de Septiembre de 2009, 20:23:48
Ahora es muy tarde voy dormir pero ese codigo no creo que este bien, mañana te lo miro en el MPLAB pero creo que no tiene mucho sentido. Solo icrementas constantemente CCPR1L.
HASTA MAÑANA
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 10 de Septiembre de 2009, 20:37:46
Vale, muchas gracias por todo tapi8 y suky, sois de gran ayuda de verdad. Se que soy un hueso duro de roer, pero tambien se que solo es cuestion de tiempo hasta que se solucione el problema de este codigo y ya por fin pueda hacer yo solo por mi cuenta sin tener que incordiar a nadie (que aunque no lo parezca dejar de molestar es lo que mas deseo; solo acudo aqui cuando ya no me queda otra opcion).

Como comentario añadido te dire tapi8 que lo que quiero es que en el momento que reciba señal el pic, el led aumente poco a poco su intensidad y se mantenga en su maximo hasta que dicha señal desaparezca, momento en el que debera apagarse poco a poco. Algo asi como el efecto de un condensador, pero mucho mas controlado (no quiero tener que usar un condensador titanico para dicha tarea!). De ahi que haga que CPR1L se incremente solo, porke emula la activacion de la señal de control del pic.

Para que nos entendamos:

Situacion: un coche

Señal que activara el led: el contacto

asi pues, al girar la llave, la señal deberia subir "exponencialmente" y mantenerse ahi  -->    ______/'''''''''''''''''''''''''''

Y al quitar la llave deberia de apagarse de igual manera --> ''''''''''''''''''''''''\_____

No se si ahora habra quedado mas claro, eso espero!  :oops:

Mañana mas!

Gracias! :-/ ;-)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 10 de Septiembre de 2009, 22:49:00
Fíjate el siguiente código, incrementa y decrementa, probado en proteus 7.4:

Código: ASM
  1. ; **** Encabezado ****
  2.         list            p=16f690        ; list directive to define processor
  3.         #include        <p16f690.inc>   ; processor specific variable definitions
  4.  
  5. Contador1 equ 0x20 ;
  6. Contador2 equ 0x21 ;
  7.  
  8. decre equ 6 ; Pulsador para decrementar Ciclo de Trabajo
  9. incre equ 7 ; Pulsador para incrementar Ciclo de Trabajo
  10.  
  11. Reset.         
  12.         org             0x00            ; Aqui comienza el micro.-
  13.         goto    Inicio          ; Salto a inicio de mi programa.-
  14.  
  15. ; **** Programa Principal ****
  16.         org             0x05
  17. Inicio
  18.         bsf             STATUS,RP0      ; Banco 1
  19.         bcf             STATUS,RP1  ; -
  20.         movlw   b'11011111'     ; Todo entradas menos una salida
  21.         movwf   TRISC
  22.         bcf             STATUS,RP0      ; Banco 0
  23.         movlw   0x05            ; Se selecciona TMR2, preescaler de 1/4.-
  24.         movwf   T2CON
  25.         bsf             STATUS,RP0      ; Banco 1
  26.         movlw   0x7C            ; Senal de 2kHz CALCULADO PARA 4MHZ (Soft configPIC)
  27.         movwf   PR2    
  28.         bcf             STATUS,RP0      ; Banco 0
  29.         movlw   0x00
  30.         movwf   CCPR1L          ; Ciclo de trabajo 0%
  31.         bcf     CCP1CON,6
  32.         bcf     CCP1CON,7
  33.         bcf             CCP1CON,5
  34.         bcf             CCP1CON,4
  35.         bsf             CCP1CON,CCP1M3  ; Configura modulo CCP modo PWM.-
  36.         bsf             CCP1CON,CCP1M2
  37. Bucle
  38.         incf    CCPR1L,1
  39.         call    Demora_50ms
  40.         movlw   d'127'          ; Solo hasta 127 porque por la frecuencia seleccionada solo usa 9 bits
  41.         subwf   CCPR1L,0
  42.         btfss   STATUS,Z        ;
  43.         goto    Bucle           ; No es 127.-  
  44. ; Ahora se decrementa
  45. Dec
  46.         call    Demora_50ms
  47.         decf    CCPR1L,1
  48.         btfss   STATUS,Z        ; Es 0
  49.         goto    Dec             ; No es 0.-
  50.         goto    Bucle
  51.  
  52.  
  53. ;**** Demora ****
  54. Demora_50ms
  55.         movlw   0xFF                    ;
  56.         movwf   Contador1               ; Iniciamos contador1.-
  57. Repeticion1
  58.         movlw   0x40                    ;
  59.         movwf   Contador2               ; Iniciamos contador2
  60. Repeticion2
  61.         decfsz  Contador2,1             ; Decrementa Contador2 y si es 0 sale.-        
  62.         goto    Repeticion2             ; Si no es 0 repetimos ciclo.-
  63.         decfsz  Contador1,1             ; Decrementa Contador1.-
  64.         goto    Repeticion1             ; Si no es cero repetimos ciclo.-
  65.         return                                  ; Regresa de la subrutina.-
  66. ;..............................................
  67.         end

Los valores para cargar y obtener los 2kHz lo calcule con el soft configPIC, el cual dice que solo utilizará 9 bits, por eso solo espero a que llegue a 127.

Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 11 de Septiembre de 2009, 07:38:58
Hago el build y no da error ninguno. Lo grabo con el pickit y no da error ninguno, pero sigue sin funcionar. He verificado con el tester y hay salidas que dan tension asi que descarto el hecho de que el PIC se haya estropeado. La salida RC5 da un valor RMS de 1,7V, invariable. No tengo que hacer nada especial en cuanto al montaje fisico del PIC, verdad?utilizo la placa de pruebas que viene con el pickit2 y me imagino que ya vendra con todo lo necesario para proteger y programar el PIC. Creo que ahora empiezo a entender porque no oigo hablar mucho de este modelo de PIC  :mrgreen: Al final acabare comprandome un 16F628 y usando tu codigo tal cual, suky  :oops:

p.d: No conocia el programa proteus hasta que tu lo mencionaste, suky. Me he informado y la verdad es que parece muy potente e interesante asi que me lo instalare.  ;-)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 11 de Septiembre de 2009, 09:21:04
Lo que no está configurado son los fuses del microcontrolador, revisa eso  ;-)


Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 11 de Septiembre de 2009, 18:45:19
Los fuses son los configuration bits?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 11 de Septiembre de 2009, 19:45:59
Sip  :mrgreen:
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 11 de Septiembre de 2009, 21:27:21
Siempre le pongo la misma cabecera para todas las pruebas que hago, y es esta

Código: [Seleccionar]
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0

Yo diria que esta bien. Es la config por defecto. No se si hay algo mal aqui tambien... :?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 13 de Septiembre de 2009, 22:56:47
Alguna otra recomendacion? (aparte de que no me dedique a programar pic's... :oops: ;-) )
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 14 de Septiembre de 2009, 00:47:10
Cambiar de PIC  :D Perdón, hablando enserio, no veo cual puede ser el problema y no tengo uno como para probarlo directamente  :undecided: Habría que ir probando el correcto funcionamiento del PIC, osea prender un led para saber si no se ha tildado o perdido en alguna linea. Comenzar con ciclo de trabajo en 25% fijo, ir cambiándolo, cambiar la configuración de PWM,etc. de esa manera vas estudiando donde puede estar el problema.
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 14 de Septiembre de 2009, 07:41:43
Entonces a ti te funciona mi codigo sin modificar nada? que raro! es que no lo entiendo...pero si, te hare caso, cambiare de pic porque este me tiene harto! cuales me recomiendas que sean mas o menos simples? (con que tengan un par de salidas PWM me basto, no me hagan falta mas virguierias. Consultare si el que me recomiendes se puede programar de manera sencilla a traves del pickit 2, y sino lo programare como el 16F84A, de manera "manual", que funciona la mar de bien.

Supongo que me recomendaras el 628, asi ya tendre ejemplos hechos y comprobados y dejare de molestarte  :mrgreen: :mrgreen: :mrgreen: :mrgreen: me pareceria comprensible y una buena idea...ahora solo me falta rezar por que lo tengan en la tienda  :D

Saludos y gracias!!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 14 de Septiembre de 2009, 09:23:29
El código que adjunte unos mensajes más arriba está probado en proteus donde se ve como varia el PWM. Epa!!! Aumenta la demora, puede ser que no se alcance a visualizar el cambio!  :tongue: No me fije en eso  :oops:

Otros pic sencillos para iniciar serian el PIC16F628A, PIC16F648A, PIC16F88 tiene conversor A/D, PIC16F873, PIC16F883, etc.

Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 14 de Septiembre de 2009, 16:13:06
No hay cambios tras aumentar el retraso a casi 1 sg, asi que desisto, me comprare otro pic y usare tu codigo como base y a partir de ahi hare mis propios inventos. Gracias por vuestra paciencia e interes. :) :)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 17 de Septiembre de 2009, 08:25:17
Bueno, ya me he hecho con varios 16F628A  :-/ :-/. Naturalmente el codigo de suky no ha dado error alguno y lo he grabado sin ningun contratiempo ( tan solo un warning de que el archivo es mas extenso que la memoria del PIC, pero aun asi despues me ha puesto grabaccion correcta; ademas, es imposible que sea cierto que el codigo sea mas extenso porque es EXACTAMENTE el codigo de suky copiado y pegado). He montado el esquema exactamente igual que suky, solo que a la salida he puesto un led. Pues para costumbre mia ya, no funciona  :D :D

Esto es una pesadilla...la pesadilla del PWM!!!. Con vuestros consejos y guias no he tenido ningun problema en comenzar a programar un 16F84A y jamas me ha dado problema alguno sea cual fuere el programa implementado, y ahora con el PWM no consigo que vaya ni COPIANDO literalmente vuestros trabajos. Esto es el no va mas! :(

A ver si de una vez consigo que vaya algo!  :oops: Primera pregunta: a este montaje hace falta conectarle un cristal de cuarzo externo?; segunda pregunta: es normal que a la salida del PWM me de siempre 0,335 V aunque incremente o decremente medio millon de veces?porque el valor no varia, de hecho, ni se inmuta.

Gracias!!!!:)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 21 de Septiembre de 2009, 17:10:14
help? :(
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 22 de Septiembre de 2009, 09:58:21
Disculpa la demora, andaba de viaje. Ese código es totalmente funcional, esta probado  :? No es necesario agregar un cristal externo ya que usa el interno que trae el PIC, pero si deseas colocar uno externo reemplaza el fuse _INTOSC_OSC_NOCLKOUT por _XT_OSC para <4MHz o _HS_OSC para >4MHz.

Creo que deberías revisar bien el esquema que realizaste, el pin MCLR, etc.


Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 23 de Septiembre de 2009, 08:00:40
Por descontado que el codigo funciona, eso en ningun momento lo he dudado  :oops: ;-) Dudo de mi capacidad para llevarlo a buen termino  :mrgreen:

Respecto al cristal de cuarzo, si no es necesario ponerlo mejor que mejor! asi a la hora de proyectar el circuito, menos pistas que habra que diseñar  :mrgreen: Lo dejare tal cual, sin cuarzo externo.

Creo que mi problema esta en el MCLR, aunque insisto en que he hecho el diseño justo como aparece en tu tutorial, solo que en lugar de pulsadores (que no tengo) utilizo dos cables que uno a mi antojo, pero por logica el problema no deberia ser ese. Da la impresion que el chip esta muerto, no reacciona. Tal y como aparece en tu tutorial, lo conecto a +5V a traves de una R de 100 y otra de 10k, en serie. ¿Poniendo un led y una resistencia limitadora en la salida PWM deberia funcionar tal cual verdad?¿o deberia cambiar algo?. Para serte sincero, no se bien lo que has colocado en la salida PWM  :oops:

gracias mil!!!!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 23 de Septiembre de 2009, 09:25:01
No creo que sea problema de los cablecitos. Igual  si mal no recuerdo el código (el segundo ejemplo) comienza con ciclo de trabajo en cero, osea que si no activas el pulsador de incrementar no vas a observar nada. Y debes respetar el conexionado de los pulsadores para que no detecte que es presionado continuamente.


Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 27 de Septiembre de 2009, 13:25:10
Por fin! despues de cambiar 6 veces de pic (dentro del mismo modelo) y de haber probado varios modelos de pic he descubierto que el problema lo tenia en la fuente de alimentacion que uso, que tenia picos muy fuertes en el encendido y apagado y me destrozaba los pics  :? . He conseguido que vaya tu codigo perfectamente, suky  :-/  :mrgreen: :mrgreen: infinitas gracias por tu paciencia!!!!!!!!!!!!!!!!!

Ahora una pregunta mas "interesante": si necesito controlar varios leds, debo usar varias salidas? o puedo hacer algun invento con transistores para que una sola salida controle un gran numero de leds?. En el caso que tenga que usar una salida para cada led, como deberia implementarlo? puedo usar la misma señal PWM en varios pines diferentes? (en el 16F628A)

muchas, pero que MUCHAS gracias!

EDIT: se que es una pregunta muy muy basica y casi me da hasta verguenza hacerla pero no encuentro respuesta directa (supongo que porque es muy basica  :oops:) 0xFF es lo mismo que FFh verdad?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 27 de Septiembre de 2009, 13:57:02
La idea es controlar varios leds individuales mediante PWM (Con distinto niveles de CT del PWM) o varios con el mismo PWM? Si es el último caso si puedes hacer un circuito mediante un transistor. Ahora si quieres controla varios leds con PWM independientes, mmm... tendrás que generarlos por software  :?

Y 76h es igual a 0x76  ;-)

Saludos!
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 27 de Septiembre de 2009, 19:12:22
Si, deseo usar el mismo pwm (en un principio); como puedo hacerlo a traves de un TRT? lo cierto es que no veo como es posible...mas adelante me gustaria jugar con leds RGB, es decir, diferentes duty para cada pwm (aunque para lo que yo lo quiero bastaria que fuesen dos pwm opuestas (cuando el rojo, por ejemplo, se incrementa, que el azul, se decremente al mismo ritmo). Generarlos por software (almenos tal y como yo lo hice) supone un trabajo extenso y es bastante poco preciso (para hacer lo mismo que hace tu codigo a traves del pin ccp1 por software supondria varios retrasos diferentes y, por tanto, un codigo muy extenso). Siempre puedo usar multiples 16F628A, pero para manejar por ejemplo 5 columnas de leds rgb, supondria una cantidad ridicula de PIC's!...alguna idea?

Saludos! ;-)
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 27 de Septiembre de 2009, 19:29:50
Para ejemplos de conexión de leds con transistores busca sobre matriz de leds, seguro encontraras algo. Después para obtener una salida inversa a la otra con un C.I. negador lo logras, si uno tiene CT 30% el negado tendrá CT de 70%.

Después tienes PICs con mas de un PWM, de la familia 16F con 3 estan los 16F737/737, y mucho mas no hay  :?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: MADKazuya en 27 de Septiembre de 2009, 21:30:35
Para ejemplos de conexión de leds con transistores busca sobre matriz de leds, seguro encontraras algo. Después para obtener una salida inversa a la otra con un C.I. negador lo logras, si uno tiene CT 30% el negado tendrá CT de 70%.

Después tienes PICs con mas de un PWM, de la familia 16F con 3 estan los 16F737/737, y mucho mas no hay  :?

Un CI negador dices? pero yo podria conectar el CI negador a la salida CCP1 no negada? y funcionarian ambas?dependeria del consumo de lo que conecte, cierto?
Título: Re: 16f690 y PWM...no consigo entenderlo!
Publicado por: Suky en 27 de Septiembre de 2009, 21:31:55
Tendrías 2 señales de control, que alimentarían la parte de potencia  ;-)