Autor Tema: ayuda con programa para automatismo de belen  (Leído 3096 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado albacete1911

  • PIC10
  • *
  • Mensajes: 3
ayuda con programa para automatismo de belen
« 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

Desconectado jfmateos2

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: ayuda con programa para automatismo de belen
« Respuesta #1 en: 09 de Octubre de 2009, 16:56:04 »
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.

Desconectado albacete1911

  • PIC10
  • *
  • Mensajes: 3
Re: ayuda con programa para automatismo de belen
« Respuesta #2 en: 10 de Octubre de 2009, 06:08:38 »
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




Desconectado albacete1911

  • PIC10
  • *
  • Mensajes: 3
Re: ayuda con programa para automatismo de belen
« Respuesta #3 en: 10 de Octubre de 2009, 08:25:23 »
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


 

anything