Autor Tema: Necesito ayuda en mi programa en Basic (MicroCode Studio)  (Leído 1363 veces)

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

Desconectado ANDRO17E

  • PIC10
  • *
  • Mensajes: 4
Necesito ayuda en mi programa en Basic (MicroCode Studio)
« en: 09 de Noviembre de 2022, 18:03:46 »
Hola gente, necesito una mano de ustedes. No puedo encontrar el error en mi programa de un ascensor de 3 pisos con un pic 16f628a. Este es el primero que programe tan complejo y todavía me falta agregarle el Display de 7seg. Saludos cordiales y espero encontrar una solucion en este foro. Desde ya gracias.

Les dejo el programa que hice:

CMCON=7
TRISA=0
TRISB=%11100111
PORTA=0
PORTB=0

PISO VAR BYTE
CABINA VAR BYTE

PISO=0
CABINA=0

PUNO var PORTB.5   'Piso uno
PDOS var PORTB.6   'Piso dos
PTRES var PORTB.7  'Piso tres

SUNO var PORTB.0   'SENSOR piso uno         
SDOS var PORTB.1   'SENSOR piso dos
STRES var PORTB.2  'SENSOR piso tres

PORTA.2=0          'MOTOR APAGADO
PORTA.1=0

INICIO:

        IF SUNO=1 THEN CABINA=1     'Poniendole valor a Cabina
        IF SDOS=1 THEN CABINA=2
        IF STRES=1 THEN CABINA=3
       
        IF PUNO=1 THEN GOTO UNO     'Al usar los Pulsadores
        IF PDOS=1 THEN GOTO DOS
        IF PTRES=1 THEN GOTO TRES
       
goto INICIO

UNO:                                'Si llaman o quieren ir al Piso UNO
       
        PISO=1
        IF CABINA=1 AND PISO=1 THEN
        GOTO PARAR
        PAUSE 500
        GOTO INICIO
        ELSE
        ENDIF
        '---------
       
        IF CABINA=2 AND PISO=1 THEN
        GOTO BAJAR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
        '----------
       
        IF CABINA=3 AND PISO=1 THEN
        GOTO BAJAR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
       
 
 DOS:                                'Si llaman o quieren ir al Piso DOS
       
        PISO=2
        IF CABINA=2 AND PISO=2 THEN
        GOTO PARAR
        GOTO INICIO
        ELSE
        ENDIF
        '----------
       
        IF CABINA=1 AND PISO=2 THEN
        GOTO SUBIR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
        '-----------
       
        IF CABINA=3 AND PISO=2 THEN
        GOTO BAJAR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
       
       
 TRES:                                'Si llaman o quieren ir al Piso TRES
       
        PISO=3
        IF CABINA=3 AND PISO=3 THEN
        GOTO PARAR
        GOTO INICIO
        ELSE
        ENDIF
        '-------
       
        IF CABINA=2 AND PISO=3 THEN
        GOTO SUBIR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
        '--------
       
        IF CABINA=1 AND PISO=3 THEN
        GOTO SUBIR
        PAUSE 1000
        ENDIF
       
        IF SUNO=1 THEN
        GOTO PARAR
        PAUSE 1000
        GOTO INICIO
        ELSE
        ENDIF
               
               
SUBIR:
        PORTA.2=0
        PORTA.1=1
        goto inicio

BAJAR:
        PORTA.2=1
        PORTA.1=0
        goto inicio

PARAR:
        PORTA.2=1
        PORTA.1=1
        piso=0
        goto inicio
end

Aca les dejo el circuito en Proteus:

 

* Ascensor foto.png
(38.57 kB, 778x515 - visto 208 veces)

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #1 en: 09 de Noviembre de 2022, 18:48:07 »
Deberías explicar cual es el error que tienes.

Yo lo que te sugiero si aún no tienes habilidad para programar directamente en el código, hagas un diagrama de flujo de todo el proyecto (que grande no es) y de esa manera puedes darte cuenta de errores y optimizar.

De lo contrario tu código pueda que funcione, pero es posible que no sea estable y no optimizado.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado ANDRO17E

  • PIC10
  • *
  • Mensajes: 4
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #2 en: 10 de Noviembre de 2022, 14:37:08 »
Muchas gracias por responder!

Al compilar no me salta ningún error, pero al simularlo en el Proteus no me funciona.

Si hice el diagrama y lo plasme en el programa pero aun así no se porque no funciona como yo lo deseo.

Lo que hace al simular es que al activar el sensor 1 o el 3 el motor gira solo hacia la izquierda y eso sin tocar ningún pulsador y no lo se porque. Es lo único que hace.

Si encuentran alguna solución o hacen algún programa similar se los agradecería, ya que con este proyecto finalizo uno de las pocas materias que me quedan para recibirme.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #3 en: 10 de Noviembre de 2022, 16:07:43 »
Muchas gracias por responder!

Lo que hace al simular es que al activar el sensor 1 o el 3 el motor gira solo hacia la izquierda y eso sin tocar ningún pulsador y no lo se porque. Es lo único que hace.


Según tu diagrama, los pulsadores están por defecto en 1 lógico, es decir es como si estuvieras presionandolos.

Debería ser algo así tu código:

Código: QBasic/QuickBASIC
  1. ....
  2.         IF PUNO=0 THEN GOTO UNO     'Al usar los Pulsadores
  3.         IF PDOS=0 THEN GOTO DOS
  4.         IF PTRES=0 THEN GOTO TRES
  5.         ...
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado ANDRO17E

  • PIC10
  • *
  • Mensajes: 4
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #4 en: 11 de Noviembre de 2022, 11:07:14 »
Gracias por responder.

Pero por lo que vi esos pines son actuvos con flancos positivos.

Saludos

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #5 en: 11 de Noviembre de 2022, 11:10:36 »
Gracias por responder.

Pero por lo que vi esos pines son actuvos con flancos positivos.

Saludos

No estás trabajando con interrupciones, estás trabajando por estados.

Esto de aquí:
Código: QBasic/QuickBASIC
  1. IF PUNO=1 THEN GOTO UNO
Significa que si PUNO está en 1 lógico salta a UNO. Y  por lo tanto cuando energizas tu hardware, casi inmediatamente salta a UNO el contador del programa, sin haber presionado el pulsador.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #6 en: 11 de Noviembre de 2022, 11:13:47 »
Gracias por responder.

Pero por lo que vi esos pines son actuvos con flancos positivos.

Saludos

No estás trabajando con interrupciones, estás trabajando por estados.

Esto de aquí:
Código: QBasic/QuickBASIC
  1. IF PUNO=1 THEN GOTO UNO
Significa que si PUNO está en 1 lógico salta a UNO. Y  por lo tanto cuando energizas tu hardware, casi inmediatamente salta a UNO el contador del programa, sin haber presionado el pulsador.

¿Por qué no debugas con Proteus? Ahí puedes ir avanzando poco a poco en tu programa y dar cuenta tu mismo de ese problema.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado ANDRO17E

  • PIC10
  • *
  • Mensajes: 4
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #7 en: 11 de Noviembre de 2022, 14:22:08 »
Hice otro dejando "banderas" para guardar el estado. Pero para probar solo hice con el primer pulsador y sacando los GOTO. Aun así no funciona...

Si es posible lo podríamos discutir de manera privada y mas directa, ya que noto que realmente sabes del tema y podes sacarme mis dudas, y sos el único que me respondió siguiendo el caso. Sino no hay problema. Gracias

Código: QBasic/QuickBASIC
  1. CMCON=7
  2. TRISA=0
  3. TRISB=%11100111
  4. PORTA=0
  5. PORTB=0
  6.  
  7. PISO1 VAR BYTE
  8. CABINA VAR BYTE
  9. BAJAR VAR BIT
  10. PARAR VAR BIT
  11.  
  12.  
  13.  
  14. PUNO var PORTB.5   'Piso uno
  15. PDOS var PORTB.6   'Piso dos
  16. PTRES var PORTB.7  'Piso tres
  17.  
  18. SUNO var PORTB.0   'SENSOR piso uno        
  19. SDOS var PORTB.1   'SENSOR piso dos
  20. STRES var PORTB.2  'SENSOR piso tres
  21.  
  22. PISO1=0
  23. CABINA=0
  24. BAJAR=0
  25. PARAR=0
  26.  
  27. PORTA.1=1
  28. PORTA.2=1
  29.  
  30. INICIO:
  31.  
  32.         IF PUNO=1 AND PISO1=0 THEN
  33.             pause 50
  34.             PISO1=1
  35.                 IF PISO1=1 AND SUNO=1 AND SDOS=0 AND STRES=0 THEN
  36.                 pause 50
  37.                 PARAR=1
  38.                     IF PARAR=1 THEN
  39.                     pause 50
  40.                     HIGH PORTA.1
  41.                     HIGH PORTA.2                  
  42.                     PISO1=0
  43.                     ENDIF
  44.             ENDIF
  45.         ELSE
  46.         ENDIF
  47.         '-----------
  48.         IF PUNO=1 AND PISO1=0 THEN
  49.             PAUSE 50
  50.             PISO1=1
  51.                 IF PISO1=1 AND SUNO=0 AND SDOS=1 AND STRES=0 THEN
  52.                 pause 50
  53.                 BAJAR=1
  54.                     IF BAJAR=1 THEN
  55.                     pause 50
  56.                     high PORTA.1
  57.                     low PORTA.2                
  58.                         IF SUNO=1 THEN
  59.                         pause 50
  60.                         PARAR=1                
  61.                             IF PARAR=1 THEN
  62.                             pause 50
  63.                             BAJAR=0
  64.                             PISO1=0
  65.                             HIGH PORTA.1
  66.                             HIGH PORTA.2
  67.                             ENDIF
  68.                         ENDIF
  69.                     ENDIF
  70.                 ENDIF
  71.             ELSE
  72.             ENDIF
  73.          '-----------
  74.         IF PUNO=1 AND PISO1=0 THEN
  75.             PAUSE 50
  76.             PISO1=1
  77.                 IF PISO1=1 AND SUNO=0 AND SDOS=0 AND STRES=1 THEN
  78.                 pause 50
  79.                 BAJAR=1
  80.                     IF BAJAR=1 THEN
  81.                     pause 50
  82.                     high PORTA.1
  83.                     low PORTA.2
  84.                         IF SUNO=1 THEN
  85.                         pause 50
  86.                         PARAR=1
  87.                         IF PARAR=1 THEN
  88.                             pause 50
  89.                             BAJAR=0
  90.                             PISO1=0
  91.                             HIGH PORTA.1
  92.                             HIGH PORTA.2
  93.                             ENDIF
  94.                         ENDIF
  95.                     ENDIF
  96.                 ENDIF
  97.             ELSE
  98.             ENDIF      
  99.            
  100. GOTO inicio

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #8 en: 11 de Noviembre de 2022, 15:21:58 »
Hice otro dejando "banderas" para guardar el estado. Pero para probar solo hice con el primer pulsador y sacando los GOTO. Aun así no funciona...

Si es posible lo podríamos discutir de manera privada y mas directa, ya que noto que realmente sabes del tema y podes sacarme mis dudas, y sos el único que me respondió siguiendo el caso. Sino no hay problema. Gracias

Código: QBasic/QuickBASIC
  1. CMCON=7
  2. TRISA=0
  3. TRISB=%11100111
  4. PORTA=0
  5. PORTB=0
  6.  
  7. PISO1 VAR BYTE
  8. CABINA VAR BYTE
  9. BAJAR VAR BIT
  10. PARAR VAR BIT
  11.  
  12.  
  13.  
  14. PUNO var PORTB.5   'Piso uno
  15. PDOS var PORTB.6   'Piso dos
  16. PTRES var PORTB.7  'Piso tres
  17.  
  18. SUNO var PORTB.0   'SENSOR piso uno        
  19. SDOS var PORTB.1   'SENSOR piso dos
  20. STRES var PORTB.2  'SENSOR piso tres
  21.  
  22. PISO1=0
  23. CABINA=0
  24. BAJAR=0
  25. PARAR=0
  26.  
  27. PORTA.1=1
  28. PORTA.2=1
  29.  
  30. INICIO:
  31.  
  32.         IF PUNO=1 AND PISO1=0 THEN
  33.             pause 50
  34.             PISO1=1
  35.                 IF PISO1=1 AND SUNO=1 AND SDOS=0 AND STRES=0 THEN
  36.                 pause 50
  37.                 PARAR=1
  38.                     IF PARAR=1 THEN
  39.                     pause 50
  40.                     HIGH PORTA.1
  41.                     HIGH PORTA.2                  
  42.                     PISO1=0
  43.                     ENDIF
  44.             ENDIF
  45.         ELSE
  46.         ENDIF
  47.         '-----------
  48.         IF PUNO=1 AND PISO1=0 THEN
  49.             PAUSE 50
  50.             PISO1=1
  51.                 IF PISO1=1 AND SUNO=0 AND SDOS=1 AND STRES=0 THEN
  52.                 pause 50
  53.                 BAJAR=1
  54.                     IF BAJAR=1 THEN
  55.                     pause 50
  56.                     high PORTA.1
  57.                     low PORTA.2                
  58.                         IF SUNO=1 THEN
  59.                         pause 50
  60.                         PARAR=1                
  61.                             IF PARAR=1 THEN
  62.                             pause 50
  63.                             BAJAR=0
  64.                             PISO1=0
  65.                             HIGH PORTA.1
  66.                             HIGH PORTA.2
  67.                             ENDIF
  68.                         ENDIF
  69.                     ENDIF
  70.                 ENDIF
  71.             ELSE
  72.             ENDIF
  73.          '-----------
  74.         IF PUNO=1 AND PISO1=0 THEN
  75.             PAUSE 50
  76.             PISO1=1
  77.                 IF PISO1=1 AND SUNO=0 AND SDOS=0 AND STRES=1 THEN
  78.                 pause 50
  79.                 BAJAR=1
  80.                     IF BAJAR=1 THEN
  81.                     pause 50
  82.                     high PORTA.1
  83.                     low PORTA.2
  84.                         IF SUNO=1 THEN
  85.                         pause 50
  86.                         PARAR=1
  87.                         IF PARAR=1 THEN
  88.                             pause 50
  89.                             BAJAR=0
  90.                             PISO1=0
  91.                             HIGH PORTA.1
  92.                             HIGH PORTA.2
  93.                             ENDIF
  94.                         ENDIF
  95.                     ENDIF
  96.                 ENDIF
  97.             ELSE
  98.             ENDIF      
  99.            
  100. GOTO inicio

Ok, no problema. Ahí existe la opción enviar mensaje privado
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re:Necesito ayuda en mi programa en Basic (MicroCode Studio)
« Respuesta #9 en: 13 de Noviembre de 2022, 18:29:45 »
Hice otro dejando "banderas" para guardar el estado. Pero para probar solo hice con el primer pulsador y sacando los GOTO. Aun así no funciona...

Si es posible lo podríamos discutir de manera privada y mas directa, ya que noto que realmente sabes del tema y podes sacarme mis dudas, y sos el único que me respondió siguiendo el caso. Sino no hay problema. Gracias

Código: QBasic/QuickBASIC
  1. CMCON=7
  2. TRISA=0
  3. TRISB=%11100111
  4. PORTA=0
  5. PORTB=0
  6.  
  7. PISO1 VAR BYTE
  8. CABINA VAR BYTE
  9. BAJAR VAR BIT
  10. PARAR VAR BIT
  11.  
  12.  
  13.  
  14. PUNO var PORTB.5   'Piso uno
  15. PDOS var PORTB.6   'Piso dos
  16. PTRES var PORTB.7  'Piso tres
  17.  
  18. SUNO var PORTB.0   'SENSOR piso uno        
  19. SDOS var PORTB.1   'SENSOR piso dos
  20. STRES var PORTB.2  'SENSOR piso tres
  21.  
  22. PISO1=0
  23. CABINA=0
  24. BAJAR=0
  25. PARAR=0
  26.  
  27. PORTA.1=1
  28. PORTA.2=1
  29.  
  30. INICIO:
  31.         'Piso 1
  32.         IF puno = 1 AND suno = 0 THEN
  33.                 WaitMs 50
  34.                 piso = 1
  35.                 bajar = 1
  36.                 subir = 0
  37.         Endif
  38.         IF piso = 1 THEN
  39.                 IF piso = 1 AND suno = 1 THEN
  40.                         WaitMs 50
  41.                         bajar = 0
  42.                         piso = 0
  43.                 Endif
  44.         Endif
  45.         '-------
  46.         'Piso 2
  47.         IF pdos = 1 AND sdos = 0 THEN
  48.                 WaitMs 50
  49.                 piso = 2
  50.                 IF suno = 1 THEN subir = 1
  51.                 IF stres = 1 THEN bajar = 1
  52.         Endif
  53.         IF piso = 2 THEN
  54.                 IF piso = 2 AND sdos = 1 THEN
  55.                         WaitMs 50
  56.                         bajar = 0
  57.                         subir = 0
  58.                         piso = 0
  59.                 Endif
  60.         Endif
  61.         '-------
  62.         'Piso 3
  63.         IF ptres = 1 AND stres = 0 THEN
  64.                 WaitMs 50
  65.                 piso = 3
  66.                 bajar = 0
  67.                 subir = 1
  68.         Endif
  69.         IF piso = 3 THEN
  70.                 IF piso = 3 AND stres = 1 THEN
  71.                         WaitMs 50
  72.                         bajar = 0
  73.                         subir = 0
  74.                         piso = 0
  75.                 Endif
  76.         Endif
  77.            
  78. GOTO inicio

Por si todavía estás con el tema la variable piso1 parece que te da todos los problemas.
Te recomiendo que uses un código más simple y lo compliques poco a poco.

Código: QBasic/QuickBASIC
  1. #define CONFIG = 0x3f50
  2. Define CLOCK_FREQUENCY = 4
  3. 'Define SIMULATION_WAITMS_VALUE = 1
  4. CMCON = 7
  5. 'AllDigital
  6. TRISA = 0
  7. TRISB = %11100111
  8. PORTA = 0
  9. PORTB = 0
  10.  
  11. DIM piso AS Byte
  12. DIM cabina AS Byte
  13. DIM bajar AS Bit
  14. DIM subir AS Bit
  15. DIM parar AS Bit
  16.  
  17. Symbol puno = PORTB.5  'Piso uno
  18. Symbol pdos = PORTB.6  'Piso dos
  19. Symbol ptres = PORTB.7  'Piso tres
  20.  
  21. Symbol suno = PORTB.0  'SENSOR piso uno
  22. Symbol sdos = PORTB.1  'SENSOR piso dos
  23. Symbol stres = PORTB.2  'SENSOR piso tres
  24.  
  25. piso = 0
  26. cabina = 0
  27. bajar = 0
  28. subir = 0
  29. parar = 0
  30.  
  31. PORTA.1 = 1
  32. PORTA.2 = 1
  33.  
  34. INICIO:
  35.         'Piso 1
  36.         IF puno = 1 AND suno = 0 THEN
  37.                 WaitMs 50
  38.                 piso = 1
  39.                 bajar = 1
  40.         Endif
  41.         IF piso = 1 THEN
  42.                 IF piso = 1 AND suno = 1 THEN
  43.                         WaitMs 50
  44.                         bajar = 0
  45.                         piso = 0
  46.                 Endif
  47.         Endif
  48.         '-------
  49.         'Piso 2
  50.         IF pdos = 1 AND sdos = 0 THEN
  51.                 WaitMs 50
  52.                 piso = 2
  53.                 IF suno = 1 THEN subir = 1
  54.                 IF stres = 1 THEN bajar = 1
  55.         Endif
  56.         IF piso = 2 THEN
  57.                 IF piso = 2 AND sdos = 1 THEN
  58.                         WaitMs 50
  59.                         bajar = 0
  60.                         subir = 0
  61.                         piso = 0
  62.                 Endif
  63.         Endif
  64.         '-------
  65.         'Piso 3
  66.         IF ptres = 1 AND stres = 0 THEN
  67.                 WaitMs 50
  68.                 piso = 3
  69.                 subir = 1
  70.         Endif
  71.         IF piso = 3 THEN
  72.                 IF piso = 3 AND stres = 1 THEN
  73.                         WaitMs 50
  74.                         bajar = 0
  75.                         subir = 0
  76.                         piso = 0
  77.                 Endif
  78.         Endif
  79.         '-------
  80.        
  81. GOTO INICIO
« Última modificación: 13 de Noviembre de 2022, 18:39:01 por dogflu66 »
Saludos desde Granada, España.