TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: serlancelot 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.
-
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
-
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
-
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.
-
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.
-
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...