¿Por qué un pin GPIO siempre devuelve la lógica baja cuando los dispositivos están conectados a él?

0

Me hice un transceptor en el que quiero que controle un microcontrolador.

Creé un circuito de prueba de microcontrolador en el que algunos pines GPIO se levantan a través de resistencias de 10 K y cuando los probé con este código, devuelve los datos correctos:

cpl P3.5
mov A,#30h
jnb P3.5,theend
inc A
theend: 

La razón por la que uso 30h y 31h como valores es porque conecto el micro a mi computadora y 30h y 31h son códigos hexadecimales para los números 0 y 1.

Utilizo el mismo código y conecto cada pin GPIO individual a cada entrada individual circulada en mi circuito a continuación. El problema es que siempre se devuelven 30 horas, lo que significa que para mí, algunas cosas siempre envían ese pin a tierra, pero no tengo nada más conectado a los dos pines GPIO, excepto por cada entrada en círculo en el circuito a continuación. Los dos pines GPIO tampoco están conectados entre sí.

¿Cuál podría ser la causa de que los pines GPIO no funcionen como deberían? ¿Necesito diodos o algo entre los pines GPIO y un pin de entrada del dispositivo, como cualquier entrada en círculo en mi circuito?

ACTUALIZAR

El microcontrolador en cuestión es un AT89C2051 y la fuente de voltaje en todos los casos es 5VDC.

    
pregunta

1 respuesta

1

No estoy seguro acerca de Din, que debería funcionar bien manejado desde un puerto Micro. Sin embargo, TXEN es una conexión directa a una unión BE de transistores. Si el puerto Micro está bajo, entonces apagará el transistor, pero si el puerto Micro está alto, nunca se elevará por encima de VBE (alrededor de 0,8v). Por lo tanto, si lee el puerto, seguirá siendo bajo, aunque el controlador de salida se esté agotando. Es solo actual limitado a lo que el puerto puede proporcionar. Yo sugeriría usar una resistencia de la serie 1K desde la base hasta el puerto Micro y colocar la resistencia de 10 K en el BE del transistor.

No puedo encontrar la estructura del pin IO para el 2051, pero la estructura del ATTiny2313 es probablemente la misma: enlace

Mire la Figura 22 La E / S digital general.

Está conectando una unión de Emisor de Base de transistor directamente al pin de E / S, por lo que cuando el puerto se establece en alto, no puede elevarse por encima del voltaje VBE.

Aquí hay un blog que habla sobre la conexión de un transistor a un puerto Micro.

Finalmente, aquí hay un esquema de una estructura típica de pin de E / S de microprocesador:

Observe que el valor del pin Pullup / pulldown y de salida están controlados por búferes de tres estados y, por lo general, estos se desactivarán cuando use el Pin como entrada.

Sin embargo, si configura el Pin como una salida, aún puede leer el valor real del Pin utilizando el búfer X3. Si tuviera que emitir un 1 = alto en la salida del Pin, sería capaz de leer este valor nuevamente ... PERO ... si tuviera un cortocircuito en la salida del Pin a tierra, leería un 0 = Bajo.

Las dos opciones para el transistor se muestran en la RHS. El de arriba es el esquema proporcionado para la pregunta. Y aquí está impidiendo que la salida del Pin suba por encima del VBE del transistor (piense en ello como un diodo a través de la salida). Si lees este bit Pin, siempre leerá bajo. La corriente que se dirige a la unión VBE desde esta configuración no está controlada. Con eso quiero decir que es lo que puede ser suministrado por el búfer X2. Esto es probable en el rango de 20-40mA, y aunque no dañará el micro, no es una buena práctica. La resistencia de pull-up de 10k NO está configurando la corriente base.

La disposición del transistor inferior (Q2) es lo que sugeriría que se use, aquí la corriente de base en el transistor se controla por diseño. En este caso, aproximadamente 4,2 mA.

Espero que esto tenga sentido.

    
respondido por el Jack Creasey

Lea otras preguntas en las etiquetas