Autor Tema: Estoy atascado y no se seguir (principiante total)  (Leído 1837 veces)

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

Desconectado serlancelot

  • PIC10
  • *
  • Mensajes: 2
Estoy atascado y no se seguir (principiante total)
« en: 07 de Julio de 2011, 14:21:07 »
Hola, ante todo me presento soy jose ramón, y hace tiempo que me gustan los pic (por hobby y para hobby) pero siempre por un motivo o otro lo tengo que dejar y ahora he vuelto a intentar hacer un proyecto como casi todos que intento hacer de iluminación con led para maquetas...
La duda que tengo es como hacer varios efectos diferentes por cada patilla del micro.
necesito hacer una serie de destellos el primer grupo lo tengo son 2 led ese funciona bien pero no pasa a hacer el siguiente efecto que son 3 led, todos los efectos se tienen que ejecutar a la vez... no se si me explico.
Este es el codigo (si se puede mejorar se aceptan ideas):

program efectos
dim repeticion as byte
TRISA = 0

MAIN:
     ' //Programa 1

    inicio_s:
                  porta.1 = 1
                  porta.0 = 1
                  DELAY_MS(200)

                  porta.1 = 0
                  porta.0 = 0
                  DELAY_MS(255)

                  porta.1 = 1
                  DELAY_MS(20)

                  porta.0 = 1
                  DELAY_MS(100)

                  porta.1 = 0
                  porta.0 = 0
                  DELAY_MS(220)

                  porta.1 = 1
                  DELAY_MS(40)

                  porta.0 = 1
                  DELAY_MS(240)

                  porta.1 = 0
                  porta.0 = 0
                  DELAY_MS(220)

           s:
                   inc (repeticion)
                   porta.1 = 1
                   porta.0 = 1
                   delay_ms(30)

                   porta.1 = 0
                   porta.0 = 0
                   delay_ms(70)

                   porta.1 = 1
                   delay_ms(20)

                   porta.0 = 1
                   delay_ms(10)

                   porta.1 = 0
                   porta.0 = 0
                   delay_ms(5)

                   porta.1 = 1
                   delay_ms(40)

                   porta.0 = 1
                   delay_ms(30)

                   porta.1 = 0
                   porta.0 = 0
                   delay_ms(50)
                  if repeticion =40 then
                     repeticion = 0
                     delay_ms(3000)
                     goto inicio_s
                     else
                     goto s
                     end if


   ' //programa 2
    f:
                  porta.2 = 1
                  porta.3 = 1
                  DELAY_MS(200)

                  porta.2 = 0
                  porta.3 = 0
                  DELAY_MS(255)

                  porta.2 = 1
                  DELAY_MS(20)

                  porta.3 = 1
                  DELAY_MS(100)

                  porta.2 = 0
                  porta.3 = 0
                  DELAY_MS(220)

                  porta.2 = 1
                  DELAY_MS(40)

                  porta.3 = 1
                  DELAY_MS(240)

                  porta.2 = 0
                  porta.3 = 0
                  DELAY_MS(220)

                  porta.2 = 1
                  porta.3 = 1
                  DELAY_MS(220)


END.


El problema esta en el goto a inicio "s" que inicia de nuevo el proceso sin ir al de las "f" como se puede solucionar? tendria que hacer varios programas y luego incluirlos con la orden include?

Un saludo a todos y gracias de antemano.

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Estoy atascado y no se seguir (principiante total)
« Respuesta #1 en: 18 de Julio de 2011, 11:50:00 »
Hola creo que el problema es esto:

if repeticion =40 then
                     repeticion = 0
                     delay_ms(3000)
                     goto inicio_s
                     else
                     goto s
                     end if

cambia el goto inicio_s por goto f

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Estoy atascado y no se seguir (principiante total)
« Respuesta #2 en: 18 de Julio de 2011, 11:55:24 »
if repeticion =40 then
                     repeticion = 0
                     delay_ms(3000)
                     goto inicio_s
                     else
                     goto s
                     end if

puedes probrar quitar el ELSE y el goto s

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Estoy atascado y no se seguir (principiante total)
« Respuesta #3 en: 18 de Julio de 2011, 14:25:49 »
Es que creo que nunca puedes ir a la rutina del f por que dentro del s pnes despues del if:

que si se cumple la primera condicion hace

repeticion = 0
                     delay_ms(3000)
                     goto inicio_s
con esto despues del delay vas a inicio_, pero si no se cumple esto realizas el:
else
                     goto s
por tanto vas a la etiqueta del "s".
de este modo nunca sales de ese ciclo.
es el problema del uso de los "GOTO"
debes evitarlo en lo posible.

Puedes hacer 2 cosas o eliminas el goto s o el goto inicio_s. Tambien como dice el copmañero cambiar uno de los 2 gotos anteriores por uno que llama a "f"

F.
Todos los días se aprende algo nuevo.

Desconectado serlancelot

  • PIC10
  • *
  • Mensajes: 2
Re: Estoy atascado y no se seguir (principiante total)
« Respuesta #4 en: 23 de Julio de 2011, 15:05:26 »
Hola, gracias por las respuestas, el problema que hay es que s y inicio_s corresponden al mismo efecto, mientras ese efecto funciona (como si fuese un bucle) a la misma vez se tienen que ejecutar otros efectos diferentes. El problema que tengo es el como hacer un efecto diferente por cada patilla del pic (no se si me explico y si sera posible hacerlo). mientras tanto intentare hacer el resto de efectos y ver si se puede integrar de otra forma......
Un saludo y gracias.

Desconectado Noelillo

  • PIC12
  • **
  • Mensajes: 94
Re: Estoy atascado y no se seguir (principiante total)
« Respuesta #5 en: 24 de Julio de 2011, 15:19:03 »
Yo realice un circuito para luces de Navidad. mira esto haber si te vale.

Clear
 for N=0 to 10000   
 portb =  %11111100 :low ra5: high ra0 :delayms 1
 portb =  %10000100 :low ra0: high ra1 :delayms 1
 portb =  %10110100 :low ra1: high ra2 :delayms 1
 portb =  %10110100 :low ra2: high ra3 :delayms 1
 portb =  %10000100 :low ra3: high ra4 :delayms 1
 portb =  %11111100 :low ra4: high ra5 :delayms 1 
 next

aumenta el valor de los delay...