TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: db25. en 28 de Abril de 2006, 18:53:17
-
Hola, ante todo decir que soy db25, he tenido que registrarme de nuevo pues no se porque pero no me deja entrar... supongo que sera por la mudanza del foro, bueno pues tras esta aclaracion (no os creais que me copio su nombre xD) sigamos con lo que realmente importa.
el programa supuestamente tiene que hacer lo siguiente:
si se aplica masa a porta0 se enciende un led en el portb0
eso en tres puertas, eso funciona bien, cuando en porta4 se pulsa una vez se enciende el portb7, si se pulsa otra se mantiene el 7 y se añade el 6, si se pulsa otra se mantiene el 7, 6 y se añade el 5. si se pulsa porta3 sucede lo contrario.
lo que me pasa es que si pulso 4 veces se encenderia el1º el 2º y el 3º led y la cuarta pulsacion no hace nada (logico solo son tres) pero si quiero apagar el 3º led tengo que dar 2 pulsaciones, es como si guardara las pulsaciones en memoria. Si alguien me puede hechar una mano se lo agradeceria.
o si se puede hacer que a la 4ª pulsacion empiece desde el principio?? (me quito un pulsacor y como si fuese algun bucle)
espero que me entendais, este es el programa:
TRISA.0=0
Cont var byte
inicio:
;programa para controlar la seleccion de bobinas que se activaran
;al realizarel disparo
if PORTa.4=0 then ;seleccion de potencia
cont=cont+1
pause 200
if cont = 1 then
high portb.7 ;potencia baja
cont=1
endif
if cont = 2 then
high portb.6 ;potencia media
cont=2
endif
if cont = 3 then
high portb.5 ;potencia alta
cont=3
endif
endif
if porta.3=0 then
cont=cont-1
pause 200
if cont = 1 then
low portb.6 ;potencia media
cont=1
endif
if cont = 2 then
low portb.5 ;potencia baja
cont=2
endif
if cont = 3 then
low portb.7 ;desconectado
cont=3
endif
endif
-----------------------------------------------------
;programa para controlar el disparo de los SCR
if PORTA.0 = 0 then ;fotodetector bobina 1
high PORTB.0 ;
else
low PORTB.0 ;
endif
if PORTA.1 = 0 then ;fotodetector bobina 2
high PORTB.1 ;
else
low PORTB.1 ;
endif
if PORTA.2 = 0 then ;fotodetector bobina 3
high PORTB.2 ;
else
low PORTB.2 ;
endif
----------------------------------------------------
goto inicio
Gracias de antemano, un saludo Jose Ramon
-
Hola:
Efectivamente, la variable sigue almacenando el valor, por eso cuando excedas el valor maximo tendrias que asignarle el ultimo valor. ejemplo:
if cont>3 then
cont=3
endif
Con eso si se sigue presionando el pulsante, el valor del contador sera 3, asi, si decrementas el siguiente valor, cont sera 2.
Suerte...!!! :mrgreen:
-
Hola, muchas gracias, como siempre, suele ser una tontada (es lo que nos pasa a los aficionadillos).
bueno pues ya me falta menos para terminar. gracias de nuevo.
Un saludo Jose Ramon
-
Hola, ya estoy de nuevo dando mal, puse lo que me comentaste y funciono bien hasta que decidi dejar el nivel minimo como predefinido (que este el led siempre encendido) al aumentar funciona bien pero al disminuir solo quita 1 y de hay ya no pasa??
este es el trozo de programa
TRISA.0=0
Cont var byte
inicio:
;programa para controlar la seleccion de bobinas que se activaran
;al realizarel disparo
high portb.3 ;potencia baja seleccion inicial
if PORTa.3=0 then ;seleccion de potencia
cont=cont+1
pause 500
if cont = 1 then
high portb.4 ;potencia media
cont=1
endif
if cont = 2 then
high portb.5 ;potencia alta
cont=2
endif
if cont>2 then
cont=2
endif
endif
if porta.4=0 then
cont=cont-1
pause 500
if cont = 1 then
low portb.5 ;potencia media
cont=1
endif
if cont = 2 then
low portb.4 ;potencia baja
cont=2
endif
if cont>2 then
cont=2
endif
endif
-----------------------------------------------------
te paso el archivo en proteus para ver si te hace lo mismo a ti.
gracias por todo, un saludo Jose Ramon
-
Hola:
if porta.4=0 then
cont=cont-1
pause 500
if cont = 1 then
low portb.5 ;potencia media
cont=1
endif
if cont = 2 then
low portb.4 ;potencia baja
cont=2
endif
if cont>2 then
cont=2
endif
endif
Fijate en ese codigo, es el que utilizas para decrementar en la ultima parte:
if cont>2 then
cont=2
endif
esto debes corregirlo, como se esta decrementando el if debe ser asi:
if cont<1 then
cont=1
endif
de tal forma que si sigues decrementando el contador sera siempre 1, y si incrementas, el valor maximo sera 2.
Eso debe ser lo que necesites, sino, me avisas....
Suerte...!!! :mrgreen:
-
Hola, antes me funciono y no combie el simbolo <> simplemente puse lo que comentaste lo coloque en ambos contadores y funciono bien eso es lo que me estraña, que simplemente combiar lo del led y no funcionar fue todo uno.
Gracias de nuevo
-
Hola:
Te funciono ya, o no todavia?
si te funciona con ese codigo, a mi me extraña mas que solo tienes declarado como entrada el A0 y los demas pines no...
-
Hola, nada, esto no chuta de ninguna forma, gracias por lo de TRISA.0=0 me lo deje de otra cosa que mire antes :D.
Hay alguna otra forma de hacerlo?? porque esto es de lo mas simple no??.
Gracias, un saludo Jose Ramon
-
Hola:
db25, revisa este codigo que es para la parte que esta fallando, cuando pulsas A4 aumenta, y cuando pulsas A3 disminuye, revisalo y me cuentas si es lo que quieres...
TRISA=%11111
TRISB=0
cont var byte
PORTB=0
cont=0
inicio:
if porta.4=0 then
pause 250
cont=cont+1
if cont >3 then cont=3
select case cont
case 1
high 7
case 2
high 6
case 3
high 5
end select
endif
if porta.3=0 then
pause 250
if cont <1 then cont=1
select case cont
case 1
low 7
case 2
low 6
case 3
low 5
end select
cont=cont-1
endif
goto inicio
end
Suerte...!!! :mrgreen:
-
Hola, no he tenido tiempo hasta hace un rato, perdona la tardanza, lo he probado y este si que funciona bien, le he cambiado alguna cosa para ajustarlo al proyecto y esta perfecto, se sabe cual era el fallo en el anterior o se da por perdido? me mosquea que antes funcionase y luego no ¿?, de todas formas gracias por todo.
un saludo Jose Ramon
Gracias
P.d hasta la siguiente xD
-
Hola:
Nunca probe tu codigo, pero como te dije antes, no vi en ninguna parte la configuracion de los puertos como entrada o salida, y la parte de controlar el contador cuando era menor a 1, en fin, me alegra que ya te funcione.
un saludo Jose Ramon
Gracias
P.d hasta la siguiente xD
Aqui estaremos para ayudar en lo que se pueda :D :mrgreen: