La solucion mas simple a para saber si es el programa es mirar con un osciloscopio el pin de salida, si cumple o no cuando le pedis el 100% de duty. Fijate en eso y luego si ves que no cumple con ese duty observamos el programa.
listo, el problema era que no mostraba la componente completa DC de la salida del pic, ya sale los 5V.. ahora lo quedo resolver es como hacer que prenda mi led, rgb,, porque cuando conecto todo en fisico no me anda :S al parecer los led, me consumen voltaje, lo que hace que mi onda llegue a 2V.... otra cosa, a travez de la pc, debo enviarle valores a las variables, Var_C,Var_T, para cambiar de colores y hacer que dure un tiempo determinado.... la cosa es que no se como hacerlo, reviso y sale algo de como enviar txtos.... pero y quiero enviar numeros, o sea, crear un menu que me pida los valores de Var_C,Var_T para variar loc colores y los tiempos..... tengo el MAXr232, pero sinceramente solo se, que debo conectar el TX del DB9 al RX del pic y viceversa.... gracias por su ayuda, aca el codigo!
hola! mi preguta es la siguiente, como uedo enviar datos al pic desde la pc, lo que quiero es enviar por ejplo,mel numero 1, al cierta variable que tengo en mi programa, la idea es que a travez del teclado mande el numero 1 al pic, este lo guarde en la variable que quiero y luego haga lo que debe hacer.... tengo la tabla ASCII, pero la verdad no tengo mucha idea de como hacerlo. GRACIAS! mi pic es el 16f887 y trabajo en ASM....este el el codigo
;-----------------------------------------------------------------------------------------------------------
; Proyecto: Secuencia 16 colores
; Autor: Lab de digitales2
; Fecha: 2014-2015
; Micro: PIC16F887
; Clock: oscilador interno 4MHz
;-----------------------------------------------------------------------------------------------------------
list p=16f887
#include <p16f887.inc>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;------------------------------------------------------------------
;configuro inicio del programa con el vector reset/interrupcion
;************************************************* ****************
org 00H
goto inicio
org 04h
goto Interrupcion
;-----------------------------------------------------------------------
; Inicia Programa
; CONFIGURO I/O
;************************************************* *********************
inicio
;-------------------------------------------------------------------------
; Configuro Variables
;************************************************* ************************
CBLOCK 20H
pwm_r, pwm_v, pwm_a ; variables para saber si ya se cumplio mi Ton
W2, Status2 ; variables de respaldo
Var_1,Var_2,Var_3 ; variables para saber si ya se cumplieron los ciclos de trabajo
Var_C ; variable para saber en que color estoy
cont1 ; variable que decremento para saber si ya cumpli tiempo
Var_T ; esta variable se cargara con 1, para T=10ms, 2 para T=20ms... 200 para T=2s
ENDC
;---------------------------------------------------------------------
; configuro Interrupcion cada 40us
;************************************************* ********************
BANKSEL OPTION_REG
Movlw b'00000010'
Movwf OPTION_REG
Movlw b'10100000'
Movwf INTCON
BANKSEL ANSEL
clrf ANSELH
BANKSEL TRISD
clrf TRISB
BANKSEL PORTA
clrf PORTB
;-------------------------------------------------------------------------
; Defino pin de puertos
;************************************************* ************************
#Define Led_r PORTB,0
#Define Led_v PORTB,1
#Define Led_a PORTB,2
;--------------------------------------------------------------------------
; Pregunto la variable "Var_C" para ver en que color me encuentro, dependiendo del valor que tome Var_C decido en que color estar
;************************************************* *************************
Carga_duty
movf Var_C,W
addwf PCL, F
goto rojo
goto Azul
goto verde
goto amarillo
goto agua
goto magenta
goto orange
goto bonito
goto morado
goto marron
goto violeta
goto oscuro
goto verde1
goto rosado
goto verde2
goto blanco
;-------------------------------------------------------------------------
; Cargo las variables con los distintos dutys para generar
;los colores correspondientes
;************************************************* ************************
rojo
movlw .255
movwf pwm_r
movlw .0
movwf pwm_v
movlw .0
movwf pwm_a
goto Pregunto_Pwm
verde
movlw .0
movwf pwm_r
movlw .255
movwf pwm_v
movlw .0
movwf pwm_a
goto Pregunto_Pwm
Azul
movlw .0
movwf pwm_r
movlw .0
movwf pwm_v
movlw .255
movwf pwm_a
goto Pregunto_Pwm
amarillo
movlw .255
movwf pwm_r
movlw .255
movwf pwm_v
movlw .0
movwf pwm_a
goto Pregunto_Pwm
agua
movlw .0
movwf pwm_r
movlw .255
movwf pwm_v
movlw .255
movwf pwm_a
goto Pregunto_Pwm
magenta
movlw .255
movwf pwm_r
movlw .0
movwf pwm_v
movlw .255
movwf pwm_a
goto Pregunto_Pwm
orange
movlw .255
movwf pwm_r
movlw .140
movwf pwm_v
movlw .0
movwf pwm_a
goto Pregunto_Pwm
bonito
movlw .0
movwf pwm_r
movlw .250
movwf pwm_v
movlw .154
movwf pwm_a
goto Pregunto_Pwm
morado
movlw .147
movwf pwm_r
movlw .112
movwf pwm_v
movlw .219
movwf pwm_a
goto Pregunto_Pwm
marron
movlw .139
movwf pwm_r
movlw .69
movwf pwm_v
movlw .19
movwf pwm_a
goto Pregunto_Pwm
violeta
movlw .238
movwf pwm_r
movlw .130
movwf pwm_v
movlw .238
movwf pwm_a
goto Pregunto_Pwm
oscuro
movlw .25
movwf pwm_r
movlw .25
movwf pwm_v
movlw .112
movwf pwm_a
goto Pregunto_Pwm
verde1
movlw .46
movwf pwm_r
movlw .139
movwf pwm_v
movlw .87
movwf pwm_a
goto Pregunto_Pwm
rosado
movlw .220
movwf pwm_r
movlw .20
movwf pwm_v
movlw .60
movwf pwm_a
goto Pregunto_Pwm
verde2
movlw .144
movwf pwm_r
movlw .238
movwf pwm_v
movlw .144
movwf pwm_a
goto Pregunto_Pwm
blanco
movlw .255
movwf pwm_r
movlw .255
movwf pwm_v
movlw .255
movwf pwm_a
goto Pregunto_Pwm
;-------------------------------------------------------------------------
;Pregunto si ya cumplieron los ciclos de trabajo,
; configuro Interrupcion cada 40us
;************************************************* ********************
Pregunto_Pwm
movf Var_T,W ;cargo el valor necesario para generar los distintos
movwf cont1 ; tiempos de 10ms a 2s
BANKSEL TMR0
Movlw .251
Movwf TMR0
Pregunto_Pwm1
movf pwm_r,0
subwf Var_1,0
btfss STATUS,C
goto on_r
goto off_r
off_r
bcf Led_r
goto Pregunto_v
on_r
bsf Led_r
goto Pregunto_v
Pregunto_v
movf pwm_v,0
subwf Var_2,0
btfss STATUS,C
goto on_v
goto off_v
off_v
bcf Led_v
goto Pregunto_a
on_v
bsf Led_v
goto Pregunto_a
Pregunto_a
movf pwm_a,0
subwf Var_3,0
btfss STATUS,C
goto on_a
goto off_a
off_a
bcf Led_a
btfss PORTB,3
goto Pregunto_Pwm1
bcf PORTB,3
clrf Var_1
clrf Var_2
clrf Var_3
decfsz cont1 ;decremento contador, para saber si ya cumpli con mi tiempo
goto Pregunto_Pwm1
goto Carga_duty
on_a
bsf Led_a
btfss PORTB,3
goto Pregunto_Pwm1
bcf PORTB,3
clrf Var_1
clrf Var_2
clrf Var_3
decfsz cont1
goto Pregunto_Pwm1
goto Carga_duty
;--------------------------------------------------------------------
;rutina de interrupcion
;************************************************* *******************
Interrupcion
;---------------------------------------------------------------------
;guardamos registros importantes
;************************************************* ********************
movwf W2
movf STATUS,w
movwf Status2
;--------------------------------------------------------------------
;pregunto si Var_X llego a 255, si es si, la cargo a 0
;verifico si se cumplio el periodo correspondiente
;************************************************* ********************
incf Var_1,f
movlw .255
subwf Var_1,0
btfss STATUS,Z
goto Pregunto_var2
clrf Var_1
bsf PORTB,3
Pregunto_var2
incf Var_2,f
movlw .255
subwf Var_2,0
btfss STATUS,Z
goto Pregunto_var3
clrf Var_2
bsf PORTB,3
Pregunto_var3
incf Var_3,f
movlw .255
subwf Var_3,0
btfss STATUS,Z
goto inte
clrf Var_3
bsf PORTB,3
;-------------------------------------------------------------------
; devuelvo valor a w y status, tambien pongo en bajo Toif
;************************************************* ***************
inte
bcf INTCON,T0IF
Movlw .251
Movwf TMR0
movf Status2,w
movwf STATUS
movf W2,W
retfie
end