Autor Tema: leer y escribir en el mismo pin  (Leído 2372 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rafaelrg06

  • PIC12
  • **
  • Mensajes: 54
leer y escribir en el mismo pin
« en: 10 de Julio de 2015, 10:22:44 »
Hola amigos:
Tengo un problema que creía que podría poder solucionar sin problemas, pero al parecer me he equivocado. El asunto es simple, tengo un  proyecto con un 16f88 (inicialmente era un 628, pero luego cambié al 16f88 que tiene la misma distribución de pines con un poco más de recursos); el asunto es que me falta 1 pin en el diseño y decidí multiplexar un pin de micro para usarlo en un momento como salida y en otro como entrada, es decir, nunca hago simultáneamente las dos cosas (quemaría al pic) y entre la escritura del pin y la lectura hay un tiempo prudencial de varios ciclos. 
La simulación funciona adecuadamente, pero en la práctica nada. El hardware lo hice junto a un amigo, al cual le di los planos para que él lo revisara y la revisión dio que todo estaba bien (revisamos antes de montar), luego lo volví a revisar para comprobar una vez más, en fin, creo que no es problema de hardware, además, el mismo ya funcionaba cuando no había puesto la multiplexación. Por lo que creo que el asunto problema está en la multiplexación del pin.
¿Alguien conoce una manera segura (probada) de multiplexar un pin en un pic, de manera que se pueda leer y escribir en él?
Yo diseño con ccs y proteus. De antemano las gracias a los que me puedan ayudar en esta tarea.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: leer y escribir en el mismo pin
« Respuesta #1 en: 10 de Julio de 2015, 11:22:23 »
Que tal rafaelrf06,

Lo que tu intentas hacer definitivamente es posible. Eso es muy usado por ejemplo con el protocolo I2C en el cual el pin de datos en ocasiones es de salida y en otros es de entrada.

Creo que sería más facil ayudarte si colocaras tu código para ver como estas haciendo el cambio del pin de entrada a salida y viceversa.

Saludos.

elreypic.

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re: leer y escribir en el mismo pin
« Respuesta #2 en: 10 de Julio de 2015, 11:48:39 »
mas bien que cuelgue un esquemático del hardware y explique que hace...    es que no somos adivinos.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: leer y escribir en el mismo pin
« Respuesta #3 en: 10 de Julio de 2015, 13:09:32 »
Como te dicen los compañeros, seria mejor que colgadas tu código.

Lo mas probable que te pase sea que estas intentando leer el pin, mientras este esta configurado como entrada o viceversa.

Cuando el pin se comporta como transmisor, debe estar configurado como salida, y cuando se comporte como receptor, debes cambiar la configuración del pin a entrada. En ambos casos acuerdate de que estén configurados como digitales y no como analógicos.

Un saludo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: leer y escribir en el mismo pin
« Respuesta #4 en: 10 de Julio de 2015, 13:14:50 »
esto me hace acordar de la placa que arregle hace poco, de un detector de alta/baja tension. Tenia un PIC de 8 pines, entonces para poder manejar todo, 1 solo pin manejaba:

2 leds + detecta una llave (Todo con resistencias)... Realmente la soluciona era MALA, no me parece nada buena, por no poner algo mas o usar SMD, pero es lo que habia :P

Pero como te dijeron la solucion es totalmente posible. Lo que si vas a tener que tener precaucion que tu "entrada" no afecte la salida del PIC. Es decir que la misma señal de entrada pueda manejar esa salida.

Desconectado rafaelrg06

  • PIC12
  • **
  • Mensajes: 54
Re: leer y escribir en el mismo pin
« Respuesta #5 en: 10 de Julio de 2015, 14:41:20 »
Hola amigos, gracias por sus respuestas.

Bueno, cuando te estaba elaborando la respuesta, hicimos una revisión junto a mi compañero y descubrimos el problema: un divisor de voltaje mal calculado que estaba dando 10.9 voltios en vez de 5v en los 3 pines de entrada (incluyendo el A0 de la multiplexación)…. Pienso que ese es el problema de por que el hardware no funcionaba correctamente. Pero de cualquier manera les voy a poner los segmentos de códigos solicitados por si aún así hay problemas en el software.
Antes que nada quiero explicar que el hardware es básicamente una matriz de leds de 3 filas (A0, A1 y A2)*10 columnas (puerto b completo + A6 y A7), donde las 3 filas se atienden con el clásico transistor que alimenta todos los leds de la fila mientras se completa la escritura del display con los 10 pines de las columnas. Además de esto las 3 entradas y master clear, las entradas son A0 (multiplexado i/o), A3 y A4.

Yo necesitaba 3 pines de entrada y solo me quedaban 2 libres para leer entradas, entonces decidí usar el pin que faltaba de la primera fila, ya que al ser un display, el mismo enciende primero la primera fila, luego la segunda y finalmente la tercera. El algoritmo básicamente coloca en el valor cero (0) una variable  “leer_s” cada vez que se enciende la fila 1, y pone el valor 1 cuando esta fila está apagada o las otras están encendidas. Esta variable la reviso cuando voy a leer los 3 pines que necesito, y solo se leen si la variable está en 1.
El código es un poco extenso, por eso voy a poner los fragmentos de código que tienen que ver con la lectura/escritura del pin en cuestión.
El pin específico es A0, que lo definí como “stop”
La parte que tiene que ver con la escritura es, en este caso switch es una variable con valores de 0, 1 ó 2 y es que define que fila se va a “encender”, notar que en el caso de fila 1 ( case(0)) la variable leer?s vale 0, indicando de esta manera al módulo más abajo que no puede leer, ya que la lectura solo es con leer_s igual a 1:
Escritura:
*********************************************

  switch(i)
   {
      case(0):
            output_high(fila1);
         leer_s = 0;   //Indica que no se debe leer las señales
         break;
      case(1):
            output_high(fila2);
         leer_s = 1;
         break;
      case(2):
            output_high(fila3);
         leer_s = 1;
         break;
   }//Cierre del switch fila
**************************************


La parte que tiene que ver con la lectura es la siguiente:
********************************************
if((antirebote == 0)&&(leer_s == 1))  //esta es la parte que define si leer o no el pin A0 (stop)
 {
    if((!input(stop)) && (!input(derecha)) && (!input(izquierda)))//
       apagado_s = 1;//
    else
       apagado_s = 0;//
   ////////////////////////////////////////////////////////////////////////////////   
   if((input(stop)) && (!input(derecha)) && (!input(izquierda)))//Condición exclusiva de STOP
      stop_s = 1;//Activado izquierda
   else
      stop_s = 0;//

Bueno, muchísimas gracias por su ayuda y si en el código hay error por favor, corríjanme, pero creo que el fallo es de hardware (aun no lo he corregido pero va una resistencia de 14K (según cálculos) donde estaba puesta una de 1k.
Saludos cordiales

Desconectado rafaelrg06

  • PIC12
  • **
  • Mensajes: 54
Re: leer y escribir en el mismo pin
« Respuesta #6 en: 10 de Julio de 2015, 14:57:21 »
Bueno, no podía dejar de decirle además que después de lo anterior hice un programa para probar las salidas del pic y quisiera decirle que... EL PIC FUNCIONA ADECUADAMENTE!!!! (al menos las salidas, cuando pruebe las entradas les diré).

saludos a todos


 

anything