Autor Tema: Retardos para semaforo?? (ayuda)  (Leído 7791 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado jossuez

  • PIC10
  • *
  • Mensajes: 17
Retardos para semaforo?? (ayuda)
« en: 22 de Marzo de 2009, 14:43:18 »
Hola.
Estoy haciendo un proyecto de un semaforo con el PIC 16F84A, ya arme el circuito y funciona perfecto, pero quisiera aumentar los tiempos de cambio de las luces de este semaforo, la verdad apenas estoy iniciando en esto de la programacion, pero creeo que los tiempos los puedo aumentar con retardos o hay alguna otra forma??

bueno el codigo ASM es este:

Citar

;**********************************************************************
;                      PIC16F84A         *
;                     ------U------            *
;                     [ RA2     RA1 ]            *
;                       [ RA3     RA0 ]                        *
;                  [ RA4    OSC1 ]                               *      
;                    [ MCL    OSC2 ]                               *
;                    [ Vss     Vdd ]                               *
;                   [ RB0     RB7 ]                               *
;                  [ RB1     RB6 ]                          *
;                   [ RB2     RB5 ]                          *
;                    [ RB3     RB4 ]                          *
;                       -----------                          *
;                                                     *
;   This file is a basic code template for assembly code generation   *
;   on the PICmicro PIC16F84A. This file contains the basic code      *
;   building blocks to build upon.                                    * 
;                                                                     *
;   If interrupts are not used all code presented between the ORG     *
;   0x004 directive and the label main can be removed. In addition    *
;   the variable assignments for 'w_temp' and 'status_temp' can       *
;   be removed.                                                       *                       
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;   Template file assembled with MPLAB V4.00.00 and MPASM V2.20.12.   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:       semaforo.asm                                      *
;    Date:                06/06/08                                    *
;    File Version:     1.0                                            *
;                                                                     *
;    Author: Ing. Roberto Moreno Elizalde                             *
;    Company:Electronica Steren SA de CV                       *
;    Este programa verifica el estado de los dip switches conectados  *
;    al puerto A, asignando una cantidad de repeticiones dependiendo  *
;    del switch activado, para posteriormente ejecutar las rutinas de *
;    dos semaforos en el puerto B, las repeticiones sirven para       *
;    alargar o acortar los tiempos de activación.                     *
;**********************************************************************

   list      p=16F84A            ; list directive to define processor
   #include <p16F84A.inc>        ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;***** VARIABLE DEFINITIONS
w        EQU     0        ; w=guardar en w
f         EQU     1        ; f=guardar en el registro
estado  EQU     0x03

 cblock   0x0C
   PDel0
   PDel1
   PDel2
   repeat
   repeaux
 endc
;**********************************************************************
      ORG     0x000           ; processor reset vector
        goto    main            ; go to beginning of program
      ORG      0x04         ;**Vector de interrupción

main   bsf    STATUS,RP0
      movlw   0x1F
      movwf   PORTA         ;PA entradas
      movlw   0x00
      movwf    PORTB         ;PB salida
       bcf       STATUS,RP0      
         
       clrwdt
;***************************************************************************   
      clrf   PORTB   ;Borra el puerto

swi0   btfsc   PORTA,0
      goto   swi1
      goto   tempo0

swi1   btfsc   PORTA,1
      goto   swi2
      goto   tempo1


swi2   btfsc   PORTA,2
      goto   swi3
      goto   tempo2

swi3   btfsc   PORTA,3
      goto   tempo4
      goto   tempo3

tempo4   movlw   0x05
      movwf   repeat
      goto   intreci

tempo0   movlw   0x01
      movwf   repeat
      goto   intreci

tempo1   movlw   0x02
      movwf   repeat
      goto   intreci

tempo2   movlw   0x03
      movwf   repeat
      goto   intreci

tempo3   movlw   0x04
      movwf   repeat

;*************************************************************

intreci bcf      PORTB,5   ;Apaga el rojo2
      bsf      PORTB,0   ;Enciende el rojo1
      bsf      PORTB,3   ;Enciende el verde2
      call   PDelay
      call   PDelay
      call   PDelay
      call   PDelay

      bcf      PORTB,3 ;Apaga el verde2

      bsf      PORTB,4   ;Enciende el Amarillo2
      call   DEMORA
   
      bcf      PORTB,4   ;Apaga el Amarillo2
      call   DEMORA
   
      bsf      PORTB,4   ;Enciende el Amarillo2
      call   DEMORA
      
      bcf      PORTB,4   ;Apaga el Amarillo2
      call   DEMORA
      
      bsf      PORTB,4   ;Enciende el Amarillo2
      call   DEMORA
      
      bcf      PORTB,4   ;Apaga el Amarillo2
      call   DEMORA
      

      bcf      PORTB,0   ;Apaga el rojo 1
      bsf      PORTB,2   ;Enciende el Verde1
      bsf      PORTB,5 ;Enciende el Rojo2
      call   PDelay
      call   PDelay
      call   PDelay
      call   PDelay

      bcf      PORTB,2 ;Apaga el verde1

      bsf      PORTB,1   ;Enciende el Amarillo1
      call   DEMORA
      
      bcf      PORTB,1   ;Apaga el Amarillo1
      call   DEMORA
      
      bsf      PORTB,1   ;Enciende el Amarillo1
      call   DEMORA
      
      bcf      PORTB,1   ;Apaga el Amarillo1
      call   DEMORA
      
      bsf      PORTB,1   ;Enciende el Amarillo1
      call   DEMORA
      
      bcf      PORTB,1   ;Apaga el Amarillo1
      call   DEMORA
            
      goto    swi0
      
      
;***************************************************************************

PDelay   movf     repeat,w
      movwf     repeaux
PDelay1 movlw     .239      ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .232      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  goto PDelL3         ; 2 cycles delay
PDelL3  clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL4  goto PDelL5         ; 2 cycles delay
PDelL5  goto PDelL6         ; 2 cycles delay
PDelL6  goto PDelL7         ; 2 cycles delay
PDelL7  clrwdt              ; 1 cycle delay
      decfsz   repeaux,f
      goto   PDelay1
        return              ; 2+2 Done
;***********************************************************************************

DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop01  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop11  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop21  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop21    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop11    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop01    ; 2 no, loop
PDelL11  goto PDelL21         ; 2 ciclos delay
PDelL21  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.


 end



La verdad es que no se donde tengo que modificar este codigo para generar los retardos de (2,5,10) minutos.

El circuito que estoy haciendo es este:

http://download554.mediafire.com/y90wzjtjjjtg/my4zyzivj40/Proyecto_1.doc

Es un semaforo de dos vias!!


Bueno, espero me puedan ayudar!!

Muchas gracias!!

Saludos!!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Retardos para semaforo?? (ayuda)
« Respuesta #1 en: 22 de Marzo de 2009, 16:42:47 »
Fijate aquí entenderas como se hacen las demoras y podras modificar las tuyas.
Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Retardos para semaforo?? (ayuda)
« Respuesta #2 en: 23 de Marzo de 2009, 06:33:32 »
Bienvenido al foro jossuez.
Los retardos ya los tienes hechos en el programa son,  pdelay de 500 msg y demora de 1seg estan hechos con este programa. http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=5968.0;attach=378
Con este programa puedes hacer retardos del tiempo que quieras, en ese programa de los semafors lo que hace es repetir varias veces el pdelay haciendo repeticiones del mismo.
call     pdelay
call     pdelay
call     pdelay
Como cada pdelay demora 500msg al hacerlo 3 veces demoras 1.5 seg y con 4 veces 2 seg. Asi que puedes hacer dos cosas, variar los retardos con ese programa que te pongo, o repetir mas veces el delay poniendo mas "call pdelay".Con la demora si quiers el doble de tiempo la puedes repetir tambien.
      bcf      PORTB,5   ;Apaga el rojo2       
      bsf      PORTB,0   ;Enciende el rojo1   
      bsf      PORTB,3   ;Enciende el verde2
      call   PDelay
      call   PDelay
      call   PDelay
      call   PDelay
Esto en un semaforo de verdad no creo que funcione, ponle por lo menos unos NOP intercalados
      bcf     PORTB,5
      NOP
      NOP
      NOP
      bsf    POTRB,0
      NOP
      NOP
      NOP
      bsf     portb,3
Asi puede funcionar aunque sigue sin ser muy correcto, pero no te voy a liar mas.

te aconsejo que le hagas caso a suky, en ese tutorial que te pone, te explica como aprender a hacer todo esto (ademas muy bien).


saludos desde Ferrol tapi8

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Retardos para semaforo?? (ayuda)
« Respuesta #3 en: 23 de Marzo de 2009, 10:37:33 »
Hola, mirando el programa, no entiendo por que el encendido y apagado de los amarillos.... eso seria un destello...
no se si eso lo agregaste del programa original...
si quieres, puedes agregar otros call pdelay  para aumentar los tiempos..., cada vez que lee un  call pdelay, realiza el retardo y continua con el programa....
o como te an comentado, puedes recalcular los retardos...


Suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado jossuez

  • PIC10
  • *
  • Mensajes: 17
Re: Retardos para semaforo?? (ayuda)
« Respuesta #4 en: 08 de Abril de 2009, 18:26:08 »
Bienvenido al foro jossuez.
Los retardos ya los tienes hechos en el programa son,  pdelay de 500 msg y demora de 1seg estan hechos con este programa. http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=5968.0;attach=378
Con este programa puedes hacer retardos del tiempo que quieras, en ese programa de los semafors lo que hace es repetir varias veces el pdelay haciendo repeticiones del mismo.
call     pdelay
call     pdelay
call     pdelay
Como cada pdelay demora 500msg al hacerlo 3 veces demoras 1.5 seg y con 4 veces 2 seg. Asi que puedes hacer dos cosas, variar los retardos con ese programa que te pongo, o repetir mas veces el delay poniendo mas "call pdelay".Con la demora si quiers el doble de tiempo la puedes repetir tambien.
      bcf      PORTB,5   ;Apaga el rojo2       
      bsf      PORTB,0   ;Enciende el rojo1   
      bsf      PORTB,3   ;Enciende el verde2
      call   PDelay
      call   PDelay
      call   PDelay
      call   PDelay
Esto en un semaforo de verdad no creo que funcione, ponle por lo menos unos NOP intercalados
      bcf     PORTB,5
      NOP
      NOP
      NOP
      bsf    POTRB,0
      NOP
      NOP
      NOP
      bsf     portb,3
Asi puede funcionar aunque sigue sin ser muy correcto, pero no te voy a liar mas.

te aconsejo que le hagas caso a suky, en ese tutorial que te pone, te explica como aprender a hacer todo esto (ademas muy bien).


saludos desde Ferrol tapi8

Gracias por todas las respuestas, perdon por que me tarde mucho tiempo en contestar!! :oops:

Pero todas las respuestas me sirvieron de mucho!!! Al final he logrado que el semaforo dure 3 minutos!!

Ahora solo me falta saber que puedo utilizar para que en vez de "leds" prendan unas lamparas de 12 volts, ya que en la salidas del PIC solo tengo 3.9 volts de corriente directa.

Una vez mas muchas gracias por su ayuda!!!

Saludos!!


Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Retardos para semaforo?? (ayuda)
« Respuesta #5 en: 09 de Abril de 2009, 06:49:25 »
http://www.todopic.com.ar/foros/index.php?topic=13389.0
Fijate por ejemplo en este de Aitopes, solo tienes que cambiar el rele por tu lampara, le puedes eliminar los diodos (mira el consumo de tu lampara que no exceda la Imax del transistor, aunqe no lo creo)
Hay mas formas, la mejor es con optoacoplador porque aislas el PIC del circuito de fuerza.
Tambien en ese hilo tienes circuitos para lamparas a 220v.

saludos tapi8

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Retardos para semaforo?? (ayuda)
« Respuesta #6 en: 09 de Abril de 2009, 06:55:12 »
C:\Users\tapi\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\3G07V50C\Image3[1].gif
La de arriba es la direccion del hilo aqui esta el circuito

Desconectado jossuez

  • PIC10
  • *
  • Mensajes: 17
Re: Retardos para semaforo?? (ayuda)
« Respuesta #7 en: 09 de Abril de 2009, 11:48:08 »
C:\Users\tapi\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\3G07V50C\Image3[1].gif
La de arriba es la direccion del hilo aqui esta el circuito

Muchas gracias por responder!!

Probare con el circuito que me dices y te cuento como me fue!!

Gracias por todo!!

Saludos!!

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Retardos para semaforo?? (ayuda)
« Respuesta #8 en: 09 de Abril de 2009, 16:26:17 »
Jossuez en el segundo no me sale acceso directo mira el primero, es de este mismo foro, el 5ºo 6º circuito es rele y pic ese es el que te valdria, en ese hilo hay varios circuitos para diferentes aplicaciones y esa que te digo es lo que tu buscas. No es mas que un transistor con una resistencia uniendolo a la salida del PIC y en el colector la lampara, lo que tienes que usar es una fuente de alimentacion de dos salidas, una a 5V y otra a 12V. En ese mismo hilo tienes para conectar lamperas y motores a 220V por si te interesa.

saludos tapi8

Desconectado jossuez

  • PIC10
  • *
  • Mensajes: 17
Re: Retardos para semaforo?? (ayuda)
« Respuesta #9 en: 26 de Abril de 2009, 21:18:37 »
Jossuez en el segundo no me sale acceso directo mira el primero, es de este mismo foro, el 5ºo 6º circuito es rele y pic ese es el que te valdria, en ese hilo hay varios circuitos para diferentes aplicaciones y esa que te digo es lo que tu buscas. No es mas que un transistor con una resistencia uniendolo a la salida del PIC y en el colector la lampara, lo que tienes que usar es una fuente de alimentacion de dos salidas, una a 5V y otra a 12V. En ese mismo hilo tienes para conectar lamperas y motores a 220V por si te interesa.

saludos tapi8

Hola Tapi8!!!

Gracias por el circuito que me recomendaste!!

Pero he decidido cambiar las lamparas de 12 volts, por unas que enciendan con 127 volts.

Asi que he armado el siguiente circuito:



Funciona todo perfecto!!

Muchas gracias por toda la ayuda!!

Saludos!!
« Última modificación: 05 de Mayo de 2009, 23:50:37 por jossuez »

Desconectado klau24

  • PIC10
  • *
  • Mensajes: 10
Re: Retardos para semaforo?? (ayuda)
« Respuesta #10 en: 07 de Junio de 2009, 15:16:49 »
hola qe tal estoi trabajando con un pic 16f628a es un controlador de semaforo utilizo 2 semaforos diferentes, esperom e puedan ayudar con el codigo, porke stoi batallando para asiganr tiempos, quise basarme en el ejemplo anterior pero no me sale...

espero me puedan ayudar

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Retardos para semaforo?? (ayuda)
« Respuesta #11 en: 08 de Junio de 2009, 07:34:13 »
http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=5968.0;attach=378

Klau en esa direccion tienes un programa para generar demoras en asembler (por si no lo tenias).
 como es la secuencia de los semaforos y cuanto tiempo tiene que estar encendida cada lampara?, las lamparas van a 12V, 220V, 127V?. Estan sincronizados entre si?. En que pines los vas a conectar?, lo vas a hacer en asembler?
Esto es mas facil que el display de 7 segmentos, creo.

tapi8


 

anything