# Activar dos salidas simultaneas en un pic



## eb7azn (May 12, 2006)

Hola chic@s estoy comenzando a trabajar con pic's y no consigo hacer algo.
Se trata de activar dos salidas simultaneamente en función de activar dos entradas.
Lo que pretendo es lo siguiente:
intento mover una antena en el eje vertical y horizontal para hacer el seguimiento de un satelite.
Con el programa que estoy creando, (lo hago con el basic simulator), si pulso la tecla de subir el motor sube y si pulso la de girar a la dercha, hace lo debido.
El problema está cuando quiero pulsar las dos a la vez para que realice los dos movimientos, simpre me toma el ultimo que pulso.
Le estoy dando vueltas pero cada vez que intento aplicar una variable para activar las dos salidas el compilador me da error.
Podeis aportarme alguna idea.
Saludos


----------



## Ehecatl (May 12, 2006)

No me quedó claro lo que te sucede. ¿El error se presenta porque no puede detectar la pulsación de las dos teclas? o ¿se presenta porque no puedes activar las dos salidas al mismo tiempo?
Creo que en ambos casos es error de programación.
¿podrías poner algún segmento de tu código para ver mas claramente el problema?


----------



## eb7azn (May 13, 2006)

GRacias por tu respuesta Ehecalt, si efectivamente debe ser error de programación ada mi poca experiencia.
Las entradas del PIC las pongo a cero con los pulsadores pero, parece que el programa se queda en esa línea hasta que suelto la tecla.
Te copio la parte correspondiente del código:

' condicion de los pulsadores para grabar los valores max y min

vt0 = Not RA2  ' pulsador derecha
vt1 = Not RC4  ' pulsador izquierda
vt2 = Not RA4  ' pulsador arriba
vt4 = Not RA5  ' pulsador abajo
vt5 = Not RC5  ' pulsador para memorizar posiciones
vt6 = vt0 And vt5
vt7 = vt1 And vt5
vt8 = vt2 And vt5
vt9 = vt4 And vt5

If vt5 Then
If vt0 Then RC0 = 1 Else RC0 = 0  ' salida rele derecha
If vt1 Then RC1 = 1 Else RC1 = 0  ' salida rele izquierda
If vt2 Then RC2 = 1 Else RC2 = 0  ' salida rele salida rele arriba
If vt4 Then RC3 = 1 Else RC3 = 0  ' salida rele abajo
Endif

Si quieres dar u n vistazo puedo envierte el código completo, no es muy grande.
Gracias por anticipado


----------



## EinSoldiatGott (May 13, 2006)

eb7azn dijo:
			
		

> GRacias por tu respuesta Ehecalt, si efectivamente debe ser error de programación ada mi poca experiencia.
> Las entradas del PIC las pongo a cero con los pulsadores pero, parece que el programa se queda en esa línea hasta que suelto la tecla.
> Te copio la parte correspondiente del código:
> 
> ...



Bueno yo lo hago en ensamblador, pero sería así el problema es que seguramente le estas diciendo que te cheque cada entrada por separado, entonces ejecuta la primera revisión y como la encuentra verdadera, se brinca la siguiente, luego regresa vuelve a checar y pasa lo mismo por eso nunca hace la segunda.

Lo que puede hacer es decirle que mueva lo del puerto de entrad a una registro y que lo compare por ejemplo si hay un 00000011 quiere decir que presionó los 2 pulsadores entonces que haga tal cosa.

Si hay un 00000001 solo presionó uno, entonces que haga tal cosa.

Saludos


----------



## fdesergio (May 16, 2006)

Yo haria lo siguiente trabajando con las INT de RB, al producirse la INT cargo el valor de los bits de mayor peso de RB en un registro y adopto la salida adecuada, nunca te podra recibir las 2 teclas pulsadas por programa normal porque el solo realiza una instruccion por ciclo de reloj o revisa una entrada o revisa otra entrada, las dos imposible, hazlo como te digo pues yo hice algo parecido y me funciono OK


----------



## eb7azn (May 16, 2006)

Gracias por tu respuesta fdesergio, pero por desgracia tengo un gran problema y es que no se como hacerlo. Imagino que te refieres a trabajar con interrrupciones pero me viene grande ya que es la primera vez que me pongo delante de un micro


----------



## fdesergio (May 16, 2006)

generalmente los PIC stienen interrupcion por RB desde el bit 4 hasta el 7, sin importar que este haciendo el PIC si hay un cambio de estado en cualquiera de las 4 entradas (obviamnete previo las configuramos como entradas) se detiene el programa principal y se devia una rutina de interrupcion, ahi es donde miras cuantos tienes activas de esas entradas y tomas la decision pertinente, si quieres dame mas datos del proyecto y te ayudo, ah el problema es que yo programo en ensamblador, pero bueno ahi le hacemos sino sabes de ensamblador aprendes,avisame, chauuuuuuuuuuuuu


----------



## FueraDeLugar (May 18, 2006)

Me causa curiosidad...  ¿Que pic estas usando?

De verdad que nunca he trabajado con lenguajes de alto nivel para PICs pero si ese lenguaje te permite leer un puerto completo, ¿por que no pruebas tomar el valor del puerto completo y analizarlo según su valor numerico?.

Si dos entradas están activas, podrías evaluarlo de forma completa.


----------



## EinSoldiatGott (May 18, 2006)

FueraDeLugar dijo:
			
		

> Me causa curiosidad...  ¿Que pic estas usando?
> 
> De verdad que nunca he trabajado con lenguajes de alto nivel para PICs pero si ese lenguaje te permite leer un puerto completo, ¿por que no pruebas tomar el valor del puerto completo y analizarlo según su valor numerico?.
> 
> Si dos entradas están activas, podrías evaluarlo de forma completa.




Exactamente, eso es lo que le propuse arriba, en ensamblador es fácil, se mueve el dato actual en el puerto y se resta con otro, si la resta da 0 se hace tal cosa.

Saludos


----------

