Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Activar dos salidas simultaneas en un pic


       



#1  Activar dos salidas simultaneas en un pic
eb7azn

Registrado: 12 May 2006
Mensajes: 4
citar
Question
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

#2  
Ehecatl

Registrado: 18 Mar 2005
Mensajes: 158
Ubicación: Mexico, D.F.
citar
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?

#3  
eb7azn

Registrado: 12 May 2006
Mensajes: 4
citar
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

#4  
EinSoldiatGott
Colaborador
Registrado: 04 Dic 2005
Mensajes: 926
citar
eb7azn escribió:
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


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

#5  
fdesergio

Registrado: 03 Nov 2005
Mensajes: 129
citar
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

#6  
eb7azn

Registrado: 12 May 2006
Mensajes: 4
citar
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

#7  
fdesergio

Registrado: 03 Nov 2005
Mensajes: 129
citar
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

#8  
FueraDeLugar

Registrado: 17 Abr 2006
Mensajes: 11
Ubicación: Venezuela
citar
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.

#9  
EinSoldiatGott
Colaborador
Registrado: 04 Dic 2005
Mensajes: 926
citar
FueraDeLugar escribió:
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

 Responder





 Temas de interés 
No hay mensajes nuevos soft para eje X-Y-Z. para pc?
No hay mensajes nuevos Sensor optico para eje de motor
No hay mensajes nuevos Como manipular el eje Y en circuit maker
No hay mensajes nuevos Minitorno dremel con eje flexible
No hay mensajes nuevos Fuente DC de voltaje variable a 22Khz

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||