¿Cómo configurar los puertos en MicroCode Studio?

#1
Buenas noches. Mi nombre es Gerardo Salazar.

Mi proyecto es el siguiente:
Es un elevador de 2 pisos y la idea es que al tocar un botón, él suba y por unos reed swich se apague, eso está programado, pero si le vuelvo a dar al botón de subir el sigue subiendo, igualmente al bajar al darle para bajar el llegaría a detenerse cuando el reed swich lo indique.

Ahora bien, a veces me funciona y a veces no me funciona.
Quisiera que alguien pudiera corregir el código para saber qué estoy haciendo mal.
Lo estoy programando con un PIC16F877 y estoy usando el puerto D porque con los demás ya tengo programado un display de 7x5 para una animación de una flecha que sube y otra que baja.

Eso esta casi resuelto, lo que persigo es:
1) Que al tocar el botón de subida o de bajada sea detenido por un reed switch conectado en el puerto.
2) Al estar al final de recorrido, si alguien toca el botón de subida que no funcione, sino el botón contrario.

Espero haberme explicado. Gracias por su tiempo.

PHP:
TRISD.0=0
TRISD.1=1
TRISD.2=0
TRISD.3=1
TRISD.6=0
TRISD.7=0


FLAG    VAR BIT
FLAG2   VAR BIT              
B0      VAR BYTE 
B1      VAR BYTE
B2      VAR BYTE
B3      VAR BYTE  
x       var byte 
clear

Main:
; Antirebote para el PushButton
    BUTTON PORTD.0,0,255,0,B0,1,SUBE
    BUTTON PORTD.2,0,255,0,B1,1,BAJA
    BUTTON PORTD.4,0,255,0,B2,1,APAGASUBE
    BUTTON PORTD.5,0,255,0,B3,1,APAGABAJA
    GOTO Main

SUBE:
    IF FLAG=0 and FLAG2=0 THEN  
      HIGH PORTD.1
      FLAG=1 
    ELSE
      FLAG=0
      LOW PORTD.1
    ENDIF
    GOTO MAIN
BAJA:
    IF FLAG2=0 and FLAG=0 THEN 
      HIGH PORTD.3
      FLAG2=1 
    ELSE
      FLAG2=0 
      LOW PORTD.3
    ENDIF
    GOTO Main

APAGASUBE:
    IF PORTD.6=0 THEN 
    LOW PORTD.1
    ENDIF
    GOTO MAIN
APAGABAJA:
    IF PORTD.7=0 THEN 
    LOW PORTD.3
    ENDIF
    GOTO MAIN
    END
 
Última edición por un moderador:
#2
Buenas Gerardo
Lo ideal seria que adjuntaras la simulación,pero lo que mas o menos entendí es que si el ascensor esta abajo al pulsar el botón bajar no haga nada, pero al pulsar subir el ascensor suba y viceversa si el ascensor esta arriba y se pulsa el botón subir no haga nada y al pulsar bajar el ascensor baje.

Te adjunto la simulación y el código modificado para que lo veas.
 

Adjuntos

#4
Buenas tardes, acá les dejo la simulación para el elevador, señor torres el codigo que me envio esta excelente, y vi me error y apredi esa parte, ahora bien, un detalle, cuando activo el circuito se enciende el motor de subir de una vez y solo se para si le vuelvo a dar al boton, ahora bien, retomo las caracteristicas para terminar de desarrollarlo,

1) al prender el circuito debe estar en espera para esperar la orden de subir o de bajar
2) al tocar el boton de subida o de bajada haga su funcion, y se pare cono un reed swicht ( funcniona)
3) si el ascensor esta arriba que el boton de subir no funcione, y cuando este abajo el boton de bajada no funcione, es para evitar que esta arriba o abajo el boton correspondiente no funcione. (funciona, gracias a torres)
4) el control tiene una matriz de leds que cuando suba salga una flecha que indica que esta subiendo y cuando baje salga la flecha hacia abajo. y cuando este parado aparezca una P

ok. la animacion esta hecha, la probe en otro circuito y funcniona bien, lo que hay es que asociar la subida, la parada, o la bajada, con la animacion. aca dejo la simulacion y el codigo en pbp, para saber en donde esta el error.
gracias.

la idea es seguir aprendiendo y sumar conocimiento a la tecnologia..
saludos desde Venezuela
 

Adjuntos

#5
Buenas Gerardo.
tengo unas dudas sobre tu circuito:
1- como es que al activar el circuito el motor se activa?, ya lo probaste físicamente?,
configuraste las salidas para que iniciara en 0??.

2- Porque hay 4 botones en tu simulación?? si son solo son dos pisos (planta baja y 1º piso)
 
#6
Buenos dias amigo Torres, tiene 4 botones porque en el piso de arriba (que en realidad son 4 metros) tengan la opción de llamarlo y bajarlo, y en planta baja tengan la misma opcion, no lo he probado en físico pero en la simulación al activar el circuito el led que indicaría que sube se prende, use el comando clear pero no funcionó, si lo de los botones es un error entonces los voy a cambiar y colocarlos en puertos diferentes,
 
#7
Buen día Gerardo
Bueno ahora entiendo lo de los botones, 2 botones estarán dentro del elevador(sube y baja), un botón de sube estará en piso de arriba para llamar al elevador en caso que este abajo y un botón baja estará en la planta baja en caso que el elevador este arriba. esa parte esta bien no tienes que cambiar nada.
Y lo del motor encendido al activar el circuito tienes que poner esto en la cabezera de tu codigo:
portd.1 = 0 ;poner salida subir a 0 , esto es para que no arranque el motor cuando actives el circuito
portd.3 = 0 ;poner salida baja a 0 esto es para que no arranque el motor cuando actives el circuito
 
#8
Listo, amigo Torres, solo me falta la Animación, voy a tratar de hacerla ahora el la tarde y la Subo a ver que error estoy cometiendo, gracias por su aporte.
 
#9
buenas tardes, acá les dejo la simulación de un circuito que es de un elevador, ya funciona bien pero le agrege una matriz de leds para darle un toque mas visual pero no me funciona, lo hice aparte y funciona pero cuando lo coloco con circuito de los botones no funciona nada, allí están los dos circuitos con animación y sin animación, las características son:
1) cuando presiones el pulsador de subida se vea la flecha hacia arriba
2) cuando presiones el pulsador de bajada se vea la flecha hacia abajo
3) cuando se pare el elevador no se vean las flechas

las simulaciones están hechas solo que no he podido asociar los botones con las animaciones
espero que puedan ver el error que estoy cometiendo, hay un circuito que funciona con la animación y hay otro que funciona los botones

gracias por su tiempo
 

Adjuntos

#10
Buenas Gerardo
Lo que pasa es que no estas llamado a la Subrutina de animaciones desde tu programa principal te paso el ejemplo en tu codigo:
PHP:
; CODIGO PARA APAGAR EL ASCENSOR AL LLEGAR ARRIBA
APAGASUBE:
codigo
else
gosub subeflecha ;llamar a la subrutina de animacion sube flecha
goto apagasube
ENDIF

;Subrutina de animacion de sube flecha
SUBEFLECHA: 
codigo
Return ;regresa donde se produjo el gosub
 
Última edición:
#11
buenas tardes, acá esta todo el circuito simulado y programado, le agregue una animación de parada, es decir que cuando el ascensor este parado aparezca una P en la matriz de led, quiero agradecer públicamente al señor torres, por su aporte al foro, saludos a todos desde venezuela
 

Adjuntos

#12
Buenas Gerardo
Un ultimo detalle para tu circuito
1-Hay un delay en tu animacion (cuando el reed switch es apagado tarda un tiempo en apagar el motor, esto es porque tu animacion tiene pausas y por ende tiene que terminar la animacion para volver a tu programa principal). Te paso un ejemplo en tu codigo para que lo puedas corregir.
PHP:
SUBEFLECHA:
for x = 1 to 10
TU CODIGO
if portd.4 = 0 then return   ;checar que el reed switch sube no este en 0, esto es para evitar el excesivo delay de la animacion
NEXT
RETURN
BAJAFLECHA:
  for x = 1 to 10
Tu codigo
if portd.5 = 0 then return   ;checar que el reed switch baja no este en 0, esto es para evitar el excesivo delay de la animacion
 Next
Return
2- Y por ultimo no te olvides de los fuses para tu micro:
PHP:
@ DEVICE pic16F877A, WDT_OFF ' Watchdog Timer desconectado 
@ DEVICE pic16F877A, PWRT_ON ' Power-On Timer conectado 
@ DEVICE pic16F877A, BOD_OFF ' Brown-Out Detect desconectado
@ DEVICE pic16F877A, LVP_OFF ' Low-Voltage Programming desconectado 
@ DEVICE pic16F877A, CPD_OFF ' Data Memory Code Protect desconectado 
@ DEVICE pic16F877A, PROTECT_OFF ' Program Code Protection desconectado
 
#13
Buenas tardes, aca dejo el proyecto completo del el elevador de dos niveles, una vez mas agradezco al señor torre por su conocimiento y aporte al proyecto, de verdad gracias una vez mas.
 

Adjuntos

Arriba