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
endbcf CCP1CON,CCP1X
bcf CCP1CON,CCP1YSi tu supieses a cuanta gente ayudas casi sin quererlo suky, te quedarias asombrado
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, ;-)
Claro, porque al utilizar distinto microcontrolador puede ser que algún registro no estén en el mismo banco.
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; 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 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.
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,CCP1M2Reset.
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 bsf STATUS,RP0 ; Banco 1
movlw 0x1E ; Senal de 2kHz
movwf PR2
bcf STATUS,RP0 ; Banco 0;/////////////////////////////////
;**** 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
[/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
; 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 0x05decre equ 0 ; Pulsador para decrementar Ciclo de Trabajo
incre equ 1 ; Pulsador para incrementar Ciclo de Trabajo
Bucle
goto Incrementa
goto Bucle
Incrementa
incf CCPR1L,1
call Demora_50ms
goto BucleYo cambie el tris como te indican y seleccione para los pulsadores los pines RB6 y RB7. No me acuerdo haber hecho otro cambio
CitarYo 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.
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
; 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 #include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0Para 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 :?