Autor Tema: PIC184620 en ASM, semaforo con petición peatones  (Leído 6720 veces)

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

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
PIC184620 en ASM, semaforo con petición peatones
« en: 17 de Junio de 2012, 09:27:16 »
Buenas tardes, he hecho con el pic18 ( el que trabajamos en los estudios) un semaforo simple:

Si RB0=1 (sea el on/off), semaforo rojo, temporizo 7 seg, apago rojo, enciendo amarillo, temporizo 3 seg., apago amarillo, enciendo verde, temporizo 7 seg. y reinicio ciclo.
todo sale perfecto, no hay mucha complicación.

La pregunta que tengo és la siguiente

si quiero agregar petición de peatones (pongamos RB1), donde agrego dicha etiqueta ? queiro decir, si la agrego al principio, i si RB1=1 a mitad secuencia, me hará toda la secuencia de rojo, amarillo y verde, cuando la secuencia de peatones y el paso a rojo de coche deveria empezar al instante que se pulsa RB1 y no espserar todo un ciclo.

Yo por mi poca experiencia la única solución que le veo es agregar muchos tests de RB1 durante toda la secuencia de rojo, amarillo y verde, claro asi funcionará, pero hago esta pregunta por si hay alguna etiqueta o algo similar (que seguro k si) que haga una subrutina siempre y cuando la otra esté o no activa.

espero haberme explicado bien, gracias y un saludo.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #1 en: 17 de Junio de 2012, 12:03:01 »
Hola, yo creo que por más que el peatón tenga priorodad, lo logico es que espere a que terminen de pasar los vehiculos.
Al pulsar, tendra que marcar una memoria o bandera de que pulso, y luego el programa, verifica si está dicha bandera o no.. para dar paso al peaton  :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #2 en: 17 de Junio de 2012, 14:36:24 »
todopic, gracias por responder.

Pensandolo quizas si que tampoco pasa nada por que el peatón se espere, de todas formas me gustaria saber como hacerlo.

Yo lo decia pq tenia un exercicio de PLC's que era del tipo ese, aunque lo he buscado y la peticion de peatones (PP) era con semaforo verde de coche siempre activado, osea  verde coche siempre verde mientras no hay petición de peatones, donde entonces entra la secuencia.

Intentaré hacer este con PIC18F


Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #3 en: 17 de Junio de 2012, 17:03:07 »
Pues solo tienes que hacer chequeos del pin RB1, no?
Asi seria si se activa por 1:

btfsc  aportb,1   ;chequeamos si esta a 0
goto  PEATONES  ; esta a 1, pone rojo para coches y da paso a peatones.
sigue programa.
 

El unico problema que tendras es si los tiempos los haces por bucle, ya que son tiempos grandes y no se enterara de que se pulsa, si haces los tiempos con un TIMER ya no tienes problema, si lo haces por bucle tendras que hacer tiempos mas pequeños y repetirlos varias veces y cada vez que vuelva al programa principal hacer el chequeo.

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #4 en: 17 de Junio de 2012, 19:32:38 »
claro, por eso decia si hay alguna opción tipo, haz esta parte del programa_especial mientras RB1=1,y en caso de que de RB1=0, sal de esa parte del programa y sigue con la secuencia normal, y seguimos en secuencia normal mientras RB1=0, cuando vuelva a 1, al instante ve a la parte de programa_especial y no tener que esperarme a que lea todas las lineas del codigo, ya que por temporizaciones y tal, pueden llegar a ser 60 seg.(en este caso del semaforo).

y claro, esto se me ocurre para este programa de semaforo, pero habrá otro que realmente lo necesitaré hacer, me suena que lei una vez algo, pero al ser nuevo en esto y tal, pues no recuerdo exactamente si era eso o no o si es posible o no.

gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #5 en: 18 de Junio de 2012, 05:41:34 »
Si entiendo bien es un semaforo que esta siempre en verde y cuando se pulsa se pone en rojo y da paso a peatones, ¿no?.
Entonces es tan simple como.

Código: [Seleccionar]
MAIN
bsf  VERDE
bcf  MUÑECO_ROJO ; en esta posicion esta siempre
btfsc  BOTON
goto  $-1             ; aqui esta hasta que se pulsa boton

PEATONES
bcf   VERDE    ;apaga verde coches
bsf   AMBAR   ; enciende ambar para cambiar a rojo
call   3SAG     ; llama temporizacion de 3 segundos
bcf   AMBAR   ;apaga ambar
bsf    ROJO     ;pone rojo para coches
bsf   MUÑECO_VERDE  ;da paso peatones
call   3SAG     
call   3SAG     
call   3SAG     
call   3SAG     ; temporiza 12 segundos para pasar peatones
goto  MAIN
Creo que asi ya esta lo que quieres. Esta hecho en plan rapido sobre la marcha, tienes que configurar puertos y FUSES, definir pines, etc.

Tienes que leer esto, cuando lo leas y lo entiendas, veras que facil es hacer semaforos y lo que quiras:

http://www.todopic.com.ar/foros/index.php?topic=24720.0

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #6 en: 18 de Junio de 2012, 07:35:02 »
gracias, tapi8.yo lo he hecho de la siguiente manera, agredeceria cualquier critica por vuestra parte, ya que seguro que será constructiva.

Todo funciona bien, pero lo dicho agradeceria algo tipo, pues yo esto lo hago de esta manera.... o yo esto asi es un lio lo haria de tal manera....

gracias.

Código: [Seleccionar]
;REGISTROS DEL SISTEMA
       #INCLUDE  P18F4620.INC
       LIST      P=PIC18F4620
       
;REGISTROS DEL USUARIO

TIEMPO1  EQU 0x12
TIEMPO2  EQU 0x13
TIEMPO3  EQU 0x13

;VECTOR DE RESET

  ORG  0X0000
  GOTO INICIO

;INICIO DE PROGRAMA

  ORG 0X0100
 
INICIO

;PROGRAMAMOS PUERTOS

  movlw B'01100000'
  movwf OSCCON ;Ajustamos el oscilador interno a 4 MHz
  movlw B'00001111'
  movwf ADCON1,.0 ;Todos los pines como I/O digitales
  clrf TRISA,.0 ;Puerto A como salida
                              ;Los demas se quedan como entradas
  clrf TRISD,.0 ;Puerto D como salida
                              ;Los demas se quedan como entradas


;INICIALIZAMOS REGISTROS USUARIO

  CLRF  TIEMPO1  ;Pone a 0 los 8 bits de tiempo a 0
  CLRF  TIEMPO2


;SALTAMOS A PROGRAMA PRINCIPAL

PROGRAMA_PRINCIPAL

  BTFSS  PORTB,0             ; es 1 RB0 ? (ON / OFF)
  GOTO  INICIO               ; no, borra registro y espera  a que RB0 sea 1
  GOTO  TEST_RB1            ; si, ve a testear si RB1=1, osea si hay peticion de peatones
   

TEST_RB1

  BTFSS  PORTB,1             ; es 1 RB1 ? hay peticion de peatones ?
  GOTO  SECUENCIA_ESPERA   ; no, pon semaforo en verde coches y rojo peatones y sigue testeando
                             ;los pulsadores RB0 y RB1, de momento no empieza secuencia
  GOTO  SECUENCIA            ; si, empezamos secuencia a semaforo coches y peatones




SECUENCIA_ESPERA


  movlw B'00001100'          ;cargamos todos los pueros a 0, menos en RA2 y RA3 que lo ponemos a 1
  movwf PORTD                ;y lo cargamos al port A, por lo tanto RA7=0, RA6=0, .....RA3=1, RA2=1, RA1=0, RA0=0
                             ;osea ponemos rojo coches y rojo peatones
  GOTO  PROGRAMA_PRINCIPAL


SECUENCIA

  movlw B'00000000'
  movwf PORTD
  movlw B'00001010'          ;cargamos todos los pueros a 0, menos en RA3 y RA1 que lo ponemos a 1
  movwf PORTD                ;y lo cargamos al port A
                             ;osea ponemos ambar coches y seguimos en rojo peatones

RETARDO_T1                           ; ESPERA DE 3 SEGONS
  CLRF TIEMPO1
  CLRF TIEMPO2
TEMPORIZA_T1
  DECFSZ  TIEMPO1,F
  GOTO    TEMPORIZA_T1

                                      ; FI ESPERA DE 3 SEGONS

  movlw B'00000000'
  movwf PORTD
  movlw B'00001001'
  movwf PORTD

                        ; INICIO ESPERA DE 1 SEGONS
RETARDO_T2 
  MOVLW  d'150'         
  MOVWF TIEMPO1

   
TEMPORIZA_T2
  DECFSZ  TIEMPO1,F
  GOTO    TEMPORIZA_T2

                       ; FI ESPERA DE 1 SEGONS

  movlw B'00000000'
  movwf PORTD
  movlw B'00010001'
  movwf PORTD


                                 ; INICIO ESPERA DE 7 SEGONS
RETARDO_T3
  CLRF TIEMPO1
 
TEMPORIZA_T3A
  DECFSZ  TIEMPO1,F
  GOTO    TEMPORIZA_T3A

TEMPORIZA_T3B
  DECFSZ  TIEMPO2,F
  GOTO    TEMPORIZA_T3B

                               ; FI ESPERA DE 7 SEGONS

  movlw B'00000000'
  movwf PORTD
  movlw B'00001001'
  movwf PORTD

                        ; INICIO ESPERA DE 1 SEGONS
RETARDO_T4 
  MOVLW  d'150'         
  MOVWF TIEMPO1

   
TEMPORIZA_T4
  DECFSZ  TIEMPO1,F
  GOTO    TEMPORIZA_T4

                       ; FI ESPERA DE 1 SEGONS

  movlw B'00000000'
  movwf PORTD
  movlw B'00001100'
  movwf PORTD

                                 ; INICIO ESPERA DE 7 SEGONS
RETARDO_T5
  CLRF TIEMPO1
 
TEMPORIZA_T5A
  DECFSZ  TIEMPO1,F
  GOTO    TEMPORIZA_T5A

TEMPORIZA_T5B
  DECFSZ  TIEMPO2,F
  GOTO    TEMPORIZA_T5B

                               ; FI ESPERA DE 7 SEGONS



  GOTO  PROGRAMA_PRINCIPAL   ;seguimos con la secuencia del semaforo, pero
                             ;pero analizamos de nuevo RB0 y RB1
 
END

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #7 en: 18 de Junio de 2012, 07:58:17 »
Hazle caso a Todopic.
Completa el ciclo, y si en el siguiente tienes demanda de peatones, es cuando tienes que dar salida a dicho verde. Normalmente tienes que cumplir unos tiempos mínimos por cuestiones de seguridad.

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #8 en: 18 de Junio de 2012, 08:19:26 »
fuente, no hay problema, sale perfecto esperando el ciclo, aunque haciendolo con interruptor, en caso de que sea un pulsador como hago para hacer una memoria ?

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #9 en: 18 de Junio de 2012, 08:24:27 »
Levanta un flag y lo bajas cuando compruebes si hay demanda.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #10 en: 18 de Junio de 2012, 08:24:48 »
Hola, como te comentan los amigos, lo que haces es encender la luz verde, y te quedas testeando si pulsan...
Al pulsar, tendras que encender unos 4 segundos la Luz amarilla ve los vehiculos, luego la roja, y el peaton ...
Aqui, te haces una demora para el peatonal...
comienzas el ciclo nuevamente....

Problema de este sistema...  siempre alguien que no tenga nada que hacer, estaria pulsando, para molestar...  o para hacer parar inutilmente a un vehiculo.
Por eso, yo si o si, le daria un tiempo minimo de paso a los vehiculos  :mrgreen:

Por lo cual, al pulsar, marcaria una memoria.

El sensado del pulsador, lo haria dentro de la subrutina de demora

Saludos!
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado aklamath

  • PIC10
  • *
  • Mensajes: 13
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #11 en: 18 de Junio de 2012, 11:47:39 »
fuente, no entiendo eso de la flag, bueno mas que no entender, no se como se hace una memoria o un flag.

agradeceria algo de ayuda al respecto.

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #12 en: 18 de Junio de 2012, 12:44:27 »
Reserva una posición de memoria, un byte, y cuando detectes que se pulsa el pulsador de demanda de peatones, pones a 1 el bit que más rabia te dé.
Te recomiendo algo de organización en eso, pon por ejemplo el de menor peso, los otros 7 quedarán libres para otras cosas que necesites. Puedes declarar constantes con nombres representativos para no liarte.

Cuando hagas la comprobacion, si el bit que has elegido tenía un 1, das paso a los peatones y vuelve a ponerlo a 0 para no estar dando paso a los peatones en cada ciclo sin necesidad.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #13 en: 18 de Junio de 2012, 13:18:26 »
Citar
MAIN
bsf  VERDE
bcf  MUÑECO_ROJO ; en esta posicion esta siempre
call  3MINUTOS   ; asi cada vez que se accione hasta que pasen 3 minutos no vuelve a accionarse
btfsc  BOTON
goto  $-1             ; aqui esta hasta que se pulsa boton

PEATONES
bcf   VERDE    ;apaga verde coches
bsf   AMBAR   ; enciende ambar para cambiar a rojo
call   3SAG     ; llama temporizacion de 3 segundos
bcf   AMBAR   ;apaga ambar
bsf    ROJO     ;pone rojo para coches
bsf   MUÑECO_VERDE  ;da paso peatones
call   3SAG     
call   3SAG     
call   3SAG     
call   3SAG     ; temporiza 12 segundos para pasar peatones
goto  MAIN

Citar
Problema de este sistema...  siempre alguien que no tenga nada que hacer, estaria pulsando, para molestar...  o para hacer parar inutilmente a un vehiculo.
Por eso, yo si o si, le daria un tiempo minimo de paso a los vehiculos 

Tienes toda la razon, Norberto, no habia caido en eso, creo que ahora ya lo hace.

Fuente creo que aqui no se necesita el flag, ya que hasta que no pasen 3 minutos no atendera al pulsador, cuando pasen esos 3 minutos si se pulsa atiende al peaton, bueno hay muchas maneras de hacerlo....


aklamath, como te dice Fuente tienes que ser mas ordenado programando, sino es dificil seguir el programa. Ya cuesta mirar los propios, que estan hechos por uno mismo, cuanto mas de otro desordenados. No te enfades nos pasa a todos.  :lol:


Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: PIC184620 en ASM, semaforo con petición peatones
« Respuesta #14 en: 18 de Junio de 2012, 14:53:16 »
El pulsador lo tienen que poder accionar en cualquier momento del ciclo, quedando memorizado en el flag que se ha solicitado el paso para darle salida a la fase de vede de peatones cuando le corresponda.


 

anything