TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: albacete1911 en 09 de Octubre de 2009, 16:07:14
-
me gustaria hacer con un PIC16F627,
funcionamiento:
-presionanmos pulsador de marcha y se enciende luz roja salida s3
-se empieza a contar 53 seguntos si no pulsamos pausa (led rojo intermitente)
cuando pasan los 53s, se activa una salida s1 durante 2 segundos, se desactiva s1 y se cuentan 5 segundos, tras este tiempo se activa salida s2 (enciende luz verde)y se activa salida s4 se gira 90º una placa y muy rapido y 90º exactos, durante 150 segundos, si no pusamos pausa
-cuanto pasa el tiempo la placa vuelve a la posicion inicial durante 53 segundos si no pulsamos pausa y volvemos a repetir lo anterior 4 veces.
tras la 4ª temporizacion de 150 segundos cuando la placa vuelva a la posicion inicial y se cuenten los 53s, cuando estos pasen ya no seran 150s, sino que seran 20s.
tras la 4ª temporizacion de 20 segundos cuando la placa vuelva a la posicion inicial y se cuenten los 53s, cuando estos pasen ya no seran 20s, sino que seran 10s.
tras la 4ª temporizacion de 10 segundos cuando la placa vuelva a la posicion inicial el programa ha finalizado y enciende luz roja
tras pulsar pausa en cualquier momento se debe pausar el temporizador que sea hasta que se pulse marcha y se encienda luz correspondiente
alguien me puede recorda como se programaban estos pic, ya que desde que termine de estudiar no los he vuelto a usar
voy poco a poco
ya he conseguido leer la entrada ra0 y tras esto encender las salidas rb0 y rb1
haber si me pueden ayudar
pero me atasco con las temporizaciones
-
Bienvenido albacete.
¿Qué lenguaje de programación estás usando?
Quizás si publicas el código que llevas hasta ahora nos resulte más sencillo ayudarte.
-
aqui dejo lo que llevo pero hasta ahora
list p=16f627 ; Declaración del procesador
include p16f627.inc ;
__config 0x3F38 ; Declaración de la configuración
PDel0 equ 20
PDel1 equ 21
org 0x00
goto Inicio
Inicio movlw 0x07 ;desabilitar comparadores anlogico
movwf CMCON ;
bsf STATUS,RP0 ;banco 1
BSF PCON, OSCF ;oscilador a 4mhz
clrf PORTB ;puerto b salida
movlw 0x03 ;puerto a a0-marcha y a1-pausa como entrada
movwf PORTA
bcf STATUS,RP0 ;banco 0
movlw 0x00 ;limpiamos puerto b
movwf PORTB ;
Encendido btfsc PORTA,0 ;si se presiona encendido salta a la rutina anti rebote
goto Encendido
Antirrebotes
btfss PORTA,0 ;si la pulsacion es fiable salta a la siguiente instruccion
goto Antirrebotes
;;aqui quiero temporizar 2 segundos sin hacer nada y despues activamoslas dos salidas
movlw 0x03 ;
movwf PORTB ;enciendo salida 0-diana y 1-luz verde
call DEMORA ;0,5 SEGUNDOS
movlw 0x00 ;APAGO LAS SALIDAs
movwf PORTB ;
call DEMORA ;0,5 SEGUNDOS
;rutina compiada de un programa pero no se como funciona y por tanto no se como cambiar los tiempos
DEMORA movlw .197 ; 1 set numero de repeticionB)
movwf PDel0 ;
PLoop1 movlw .253 ;1 set numero de repeticionA)
movwf PDel1 ;
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1,1; 1 + (1)es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0,1; 1 + (1) es el tiempo 0? (B)
goto PLoop1 ; 2 no,
loopPDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2
return
goto Inicio
end
esto es lo que he hecho lo he probado en proteus pero tras unas cuantas pulsaciones se desvorda y da error. y ademas si quiero modificar los tiempos como lo puedo hacer, porque se ponen esos numeros
gracias por tu ayuda por anticipado
-
he progresado algo mas pero ya me he atascado del todo, he creado unos contadores para que haga 4 ciclos de encendido y apagado, pero no se que pasa que se encienden la primera vez y ya no se apagan.
lo he probado en proteus.
si quito los contadores el progama enciende luces y las apaga segun los tiempos establecidos, pero si los dejo se encienden una vez y no se vuelven a apagar
este es el codigo:
list p=16f627 ; Declaración del procesador
include p16f627.inc ;
__config 0x3F38 ; Declaración de la configuración
PDel0 equ 20
PDel1 equ 21
PDel2 equ 22
PDel0150 equ 23
PDel1150 equ 24
PDel2150 equ 25
contador150 equ 26
contador20 equ 27
contador10 equ 28
org 0x00
goto Inicio
Inicio movlw 0x07 ;desabilitar comparadores anlogico
movwf CMCON ;
bsf STATUS,RP0 ;banco 1
BSF PCON, OSCF ;oscilador a 4mhz
clrf PORTB ;puerto b salida
movlw 0x03 ;puerto a a0-marcha y a1-pausa como entrada
movwf PORTA
bcf STATUS,RP0 ;banco 0
movlw 0x00 ;limpiamos puerto b
movwf PORTB ;
Encendido btfsc PORTA,0 ;si se presiona encendido salta a la rutina anti rebote
goto Encendido
Antirrebotes
btfss PORTA,0 ;si la pulsacion es fiable salta a la siguiente instruccion
goto Antirrebotes
call DEMORA ;5 SEGUNDOS;;temporizamos 5 segundos y activamoslas dos salidas
movlw 0x00 ;reseteamos contador 150
movwf contador150
serie150 movlw 0x03 ;
movwf PORTB ;enciendo salida 0-diana y 1-luz verde
call DEMORA150 ;2 SEGUNDOS
movlw 0x00 ;APAGO LAS SALIDAs
movwf PORTB ;
goto cuenta150 ; para hacer las 4 repeticiones
;goto Encendido
;rutina de 20
;--------------------------------------------------------------
serie20 movlw 0x00 ;reseteamos contador 20
movwf contador20
serie20sinreset movlw 0x03 ;
movwf PORTB ;enciendo salida 0-diana y 1-luz verde
call DEMORA150 ;2 SEGUNDOS
movlw 0x00 ;APAGO LAS SALIDAs
movwf PORTB ;
goto cuenta20 ;para hacer las 4 repeticiones
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 10/10/2009 Hs 11:25:25
; Descripcion: Delay 5000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .165 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .41 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .147 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
return ; 2+2 Fin.
;-------------------------------------------------------------
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 10/10/2009 Hs 11:13:59
; Descripcion: Delay 2000000 ciclos
;-------------------------------------------------------------
DEMORA150 movlw .167 ; 1 set numero de repeticion (C)
movwf PDel0150 ; 1 |
PLoop0150 movlw .41 ; 1 set numero de repeticion (B)
movwf PDel1150 ; 1 |
PLoop1150 movlw .72 ; 1 set numero de repeticion (A)
movwf PDel2150 ; 1 |
PLoop2150 clrwdt ; 1 clear watchdog
decfsz PDel2150, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2150 ; 2 no, loop
decfsz PDel1150, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1150 ; 2 no, loop
decfsz PDel0150, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0150 ; 2 no, loop
PDelL1150 goto PDelL2150 ; 2 ciclos delay
PDelL2150 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
;------------------------------------------------------------
;contador de series
cuenta150
incf contador150,f
movf 0x04,w
subwf contador150,w ;restas 15 al contador
btfss STATUS,Z ; verificas si la operacion dio 0
goto serie150 ; si no vuelve a siguiente serie
yaen150son4 goto serie20
cuenta20
incf contador150,f
movf 0x04,w
subwf contador150,w ;restas 15 al contador
btfss STATUS,Z ; verificas si la operacion dio 0
goto serie20sinreset ; si no vuelve a siguiente serie
yaen20son4 goto Encendido
;------------------------------------------------------------
goto Encendido
end