PIC Y Teclado

Estoy realizando un proyecto con un PIC17C44 donde controlo unas temperaturas, de forma que cuando se superan unos valores determinados introducidos desde un teclado tipo membrana se producen unas alarmas. El problema que tengo es que en este teclado, formado por 5 botones, cada vez que presiono un botón se introduce un 0 lógico en una linea del bus de datos; es decir, utilizo 5 lineas del bus de datos para informar de cuál de los 5 botones se ha presionado. Debido a esto, no sé cuál es la filosofía a la hora de programar el PIC para que éste utilice el bus de datos para sus operaciones internas como sacar mensajes en un LCD o utilizar la RAM, y además lo utilice para saber qué botón se ha presionado; porque si el PIC está utilizando el bus para sus operaciones, ¿no se está corrompiendo la información que hay en el bus cuando se mete en alguna de las lineas que comparte con el teclado un 0 lógico al haber presionado un botón?.

2 respuestas

Respuesta
1
Pedro, necesitaría más información. No me queda claro a que llamas bus de datos. Me imagino que tienes un teclado que interrogas de manera matricial y de alguna forma obtienes la tecla que se ha pulsado.
Hay varias maneras de saber cuál se pulsó y el resultado se suele alojar en un registro o bien se lo transporta en W.
Cuando dices que hay información en el bus, no se de que hablas. ¿Llamas bus a W?.
Bueno, si me aclaras el panorama tal vez pueda ayudarte un poco más.
Hola de nuevo, y gracias por contestarme. Voy a intentar explicarme algo mejor. Llamo bus de datos a las 8 patitas que que forman el Port B del Pic y que las utilizo para escribir y leer datos de una RAM externa al PIC y para escribir datos en el LCD. Estas 8 lineas que salen del Port B están puestas a pull-up; pero por otro lado, 5 de estas 8 lineas son utilizadas por 5 botones, (no matriciales), de forma que cada vez que se presiona uno de estos botones cierra un circuito que hace que entre un 0 lógico en dicha linea del Port B. Debido a esto, mi pregunta es la siguiente: supongamos que el Pic, en un momento dado está, por ejemplo, enviando datos al LCD mediante este Port B, si en ese preciso instante se presiona un botón del teclado, meterá un 0 lógico en la linea del Port B con la que esta conectada el botón cuando este se presiona. Por tanto, la información que se estaba enviando al LCD queda modificada, ya que el botón presionado ha metido un 0.
Espero que ahora me haya explicado mejor, gracias por contestarme y un saludo.
Ahora entiendo un poco más. Resulta que en este tipo de circuitos donde hay multiplexados y las patas se comparten con diversos dispositivos, el diseño del hard debe ser muy delicado.
En verdad allí radica el éxito de compartir paras. Imaginemos un display inteligente que posee las 8 patillas del puerto b conectadas con su entrada.
Uno puede poner y sacar unos y ceros en esas patillas, el display no las leerá hasta que se de la orden de ENABLE.
Esto significa que si cambian estas patillas nada sucederá.
En el caso de la memoria seguramente hay un chip enable que hace que la memoria lea la información. Mientras el chip enable está desconectado, no sucede nada.
En el casoi de tu pulsador, entiendo que mandas la señal del puerto a masa. Seguro que hay una resistencia en ese pulsador. Si el puerto está en modo salida y el puerto pone un 1 en esa pata, la resistencia hará que no suceda un corto circuito.
En este momento el micro le estaría enviando información al display o memoria. Cuando el micro esté en modo lectura, le prestará atención a el pull up y al pulsador.
Bueno, sin el circuito se hace difícil. Mucho más si es que otra persona diseñó el hard y uno intenta deducirlo.
Respuesta
1
Me imagino que estas usando la capacidad del 17C44 de direccionar memoria externa para atender y comandar el teclado, tus sensores y tu display, ¿verdad?
Bueno. Este PIC permite que lo uses en distintos modos, llamados microprocesador, microcontrolador extendido, o microprocesador extendido.
Dependiendo del modo que hallas elegido para programarlo, deberás creal la logia adicional en tu circuito para decodificar las direcciones que asignes al teclado, al display y a tus sensores. Y en el caso del teclado y tus sensores, cuando lo direcciones deberás previamente configurar el bus de datos como "entrada" puesto que estos periféricos que estas direccionando entregan datos, no los reciben. En cambio, cuando direcciones el display, deberás configurarlo como salida.
En pocas palabras, no puedes "colgar" todos los dispositivos del bus de datos y ya. Deberás crear circuitos adicionales que se fijen que numero esta presente en el bus de direcciones y solo cuando ese numero coincida con el que asignaste a ese circuito de decodificación se habilite la conexión de ese dispositivo con el bus de datos.
Y la filosofía de programación que te convendrá emplear se llama "pooling", se trata de ir direccionando uno a uno los dispositivos y fijarse su estado (x ej: ¿Hay una tecla pulsada en el teclado?) O bien enviarles un nuevo comando ( en el caso del display, un nuvo carácter o cadena, según quieras).
Espero que mi respuesta te haya clarificado un poco el panorama.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas