Configurar Resistencias pull up en PIC16F628A por puerto

Cordial saludo colegas,

He investigado acerca de la habilitación de las resistencias de pull-ups, modificando el bit 7 del registro OPTION, pero luego de hacer una larga búsqueda
no he encontrado nada que me indique que exista alguna función para habilitar estas resistencias internas en puertos específicos.

Según lo que he encontrado, al poner en 0 el bit 7 del registro OPTION (RBPU) todas las resistencias pull-up quedan habilitadas, pero el problema es que solo necesito que se activen en ciertos pines del PORTB, por ejemplo PORTB.0 y PORTB.1, mientras en que otros pines del PORTB también se estén usando como entradas, por ejemplo PORTB.2 Y PORTB.3 (pero sin resistencias pull-up).

En el datasheet del PIC16F628A/REGISTER OPTION/Bit 7 aparece "0=PORTB pull-ups are enabled by individual port latch values", y aunque lo puse en el traductor, no entiendo ni papas lo que este comentario trata de indicar... Encontré una versión en español de este datasheet y lo mismo; no se entiende cómo proceder.

...Algún colega me pueda echar una mano. Es la primera vez que intento trabajar con esta funcionalidad.

Un cordial saludo y gracias de antemano!
 
Última edición:
Que yo sepa solo existe la opción de colocar todas las resistencias de Pull-Up o no en todo el puerto B en ese PIC.

Lo que se hace en esos casos es usar externamente los resistencias donde deben estar y en los otros pines no usarlos pero los internos o los usas o no en todos los pines del puerto B(B.0....B.7)
 
Última edición:
Ok sí, esta parte no tiene duda, (....aunque se podrían deshabilitar las pull-ups en pines específicos si se configuran como salidas, pero no me sirve así; los otros pines del mismo puerto también los necesito como entradas normales).

Encontré que el en PIC16F887 sí se podrían configurar pines individuales de un mismo PORTx como entradas con pull-ups mientras que otras entradas permanecen normales...

Aprovecho para consultar algo un poco diferente.... es posible poner un pin en alta impedancia? de modo que si está configurado como entrada en serie con un LED y una resistencia a 5V se apague al lograr configurarlo el pin en alta impedancia? El objetivo es apagar el led sin tener que utilizar un voltaje alto en ese pin.
Mensaje automáticamente combinado:

Como lo menciona @ricbevi, en el PIC16F628A se activan todas las resistencias pull-up del puerto B de una sola vez, no se pueden configurar independientemente por pin.



No confundas puerto con pin, un puerto se refiere a todos los bits y un pin es solo un bit del puerto.
Gracias D@rkbytes,
Ok sí, esta parte no tiene duda, (... se pueden deshabilitar las pull-ups en puertos específicos si se configuran como salidas).

Encontré que el en PIC16F887 sí se podrían configurar pines individuales de un mismo PORTx como entradas con pull-ups mientras que otras entradas permanecen normales...

Aprovecho para consultar algo un poco diferente.... es posible poner un pin en alta impedancia? de modo que si está conectado como entrada en serie con un LED y una resistencia a 5V, este se encienda al poner el pin en estado bajo y se apague al poner el pin en alta impedancia? El objetivo es apagar el led sin tener que utilizar un voltaje alto en ese pin.

Colegas, ando haciendo unas pruebas de laboratorio ya que no he encontrado información, al menos clara en referencia a poner un pin de PIC en alta impedancia.

Ha ver les pongo un ejemplo:

Que al configurar un pin como entrada en serie con un LED y una resistencia a 5V, éste se encienda al poner el pin en estado bajo y se apague al poner el pin en alta impedancia... El objetivo es apagar el led sin tener que utilizar un voltaje alto en ese pin.


Graacias.
 
Última edición:
Como lo menciona @ricbevi, en el PIC16F628A se activan todas las resistencias pull-up del puerto B de una sola vez, no se pueden configurar independientemente por pin.



No confundas puerto con pin, un puerto se refiere a todos los b
Lo que se me ocurre es poner el pin como entrada mediante TRISB.pin=1
Si, precisamente eso he estado probando, y hasta ahora me ha funcionado bien. De todas maneras quería conocer la opinión de otros colegas si este estado de impendancia además de ser viable también es estable.

Este tipo de configuración permite utilizar los pines multiplexados como entrada para por ejemplo inyectar en ellos un voltaje que pueda variar al activar resistencias por puerto, lo que me ahorra utilizar un multiplexor por separado.

Gracias colegas.
 

D@rkbytes

Moderador
Ninguna entrada de alta impedancia puede ser estable.
Se puede decir que su estado es flotante y por lo tanto carece de referencia lógica.
 
Depende del esquema y uso en sí es que puede no ser problemático el uso de esa forma.

Como dice D@rkbytes al ser alta impedancia cualquier ruido, etc puede interactuar con ella y ser origen de comportamientos extraños en ambientes ruidosos.
 
En realidad no queda indefinido, tenes el LED y la resistencia haciendo de pull UP. Y aun si así fuera ¿ Cual es el problema de que quede indefinido ? Excepto si estas buscando el menor consumo, si bien es una buena practica, no va a pasar mucho, en este caso. Solo quiere prender y apagar un LED. ¿ Quizá un charlieplexing ?

La pregunta es: ¿ Que es realmente lo que se quiere hacer y cual el motivo de hacerlo de esa forma ?
 
Necesito desarrollar un divisor de voltaje variable, utilizando para ello resistencias fijas en 4 pines como entradas a tierras; el voltaje(+) al otro extremo de las resistencias es común. Cuando un pin se ponga en estado BAJO, se activará solo esa resistencia produciendo una variación en el divisor de voltaje, mientras mantengo las otras 3 resistencias sin conexión a tierra.

Para evitar que el resto de pines conduzcan a tierra podría ponerlos en estado ALTO, pero este voltaje terminará conduciendo corriente hacia el puerto que está en esté en estado BAJO, estropeando todo...

Para evitar este estado en ALTO se me ocurrió poner los pines que no voy a utilizar en alta impedancia. Vengo haciendo pruebas y hasta ahora me ha funcionado, pero me preocupa el riesgo de inestabilidad con este arreglo, cuando esté expuesto al ruido.

Para solucionar esto de raíz, podría utilizar un multiplexor externo, pero precisamente es eso lo que quiero evitar. Necesito hacer mi divisor de voltaje lo mas sencillo posible. Será posible lograr esto con la estabilidad que se requiere?
 
Sigo sin entender a que te refieres con ruido y estabilidad, si el pin esta configurado como entrada no va a inyectar nada a las resistencias. Otra cosa es si quieres medir con ese pin, osea usarlo como entrada no ya para sacar el negativo a la resistencia sino para leer datos/tensión con el al mismo tiempo.

Si tanto te preocupa ¿ porque no usar un transistor para conmutar las resistencias ? FET o BJT, elección a gusto y piacere.
 

D@rkbytes,​


En otra versión del HW lo trabajaré con un MCP41100, pero lo solicité a China hace una semana y debo esperar regularmente 30 días sin meter la espera adicional por la temporada navideña, lo que a su vez, en ocasiones, se me han convertido en 45 días más... entonces por ahora debo trabajar en otra solución...

switchxxi,​

Te presento el esquemático del divisor de voltaje y el multiplexor de tierras que he logrado implementando el estado de alta impedancia en los pines por donde no quiero que circule corriente (no necesito un estado lógico específico, sino solo desconectar los pines que no requiero), pero como indico, me preocupa la estabilidad frente a ruidos.

Mi objetivo es utilizar la menor cantidad de componentes posibles (ahorrándome ya sea un Mux externo, o switch como FET, BJT, etc).

1607532996319.png
 
Última edición:
No debería haber problemas de ruido porque la señal siempre esta prefijada por la resistencia. Por ejemplo, si activo solo R4 y con eso tengo a la salida una tensión de 1v, a los otros 3 pines les va a llegar 1v continuo.

Si quieres que no haya ruido en el micro (porque lee señales análogas) y minimizarlo usa pines que tengan entradas schmitt trigger, lo demás son ya cuestiones de diseño en la placa (tierra, trazos, desacoplo de alimentación, etc).
 
No debería haber problemas de ruido porque la señal siempre esta prefijada por la resistencia. Por ejemplo, si activo solo R4 y con eso tengo a la salida una tensión de 1v, a los otros 3 pines les va a llegar 1v continuo.

Si quieres que no haya ruido en el micro (porque lee señales análogas) y minimizarlo usa pines que tengan entradas schmitt trigger, lo demás son ya cuestiones de diseño en la placa (tierra, trazos, desacoplo de alimentación, etc).
Gracias Switchxxi, me tranquiliza tu análisis. Me parece sencillo y “aterrizado”.

De todas formas, tengo planeado poner a prueba esas entradas de alta impedancia en diferentes escenarios.

Como medida preventiva, para sacar los pines de un estado a tierra no deseado, producto de una alteracion en el estado de alta impedancia, programare un comparador para activar una subrutina de restauración cuando el voltaje se salga del rango esperado, consecuencia de una resistencia equivalente más baja. Claro, no es tan sencillo pero lo intentaré.

Estoy analizando cómo hacer esto si por cualquier razón, las entradas se pusieran en nivel alto. Debo repasar mayas y hacer los cálculos creo...

Por fortuna, utilizaré esto en una aplicación no crítica. En la solucion es aceptable que de vez en cuando se presente alguna eventulidad desde que pueda ser corregida al instante.

Veamos como me va y les seguiré contando... mil gracias. Es bueno saber que no se está solo en estos temas, no tan comunes. Slds.
 
Última edición:
Si escribes el puerto, o mas bien, todos los pines que se usaran como salida para las resistencias con 0 y no lo tocas nunca más, solo tienes que jugar con el registro TRISx, jamás debería ponerse un pin a positivo al pasar de entrada a salida.

Ademas que los PICs comienzan con sus pines como entradas en el RESET. Entonces sería definir primero el valor del puerto (0 o 1), luego si es entrada o salida.

Lo mas fácil es usar un PIC con ADC para monitorear que la salida del divisor sea la que tiene que ser.

Si lo único que es preocupante es que la tensión supere los 3v, entonces si, un comparador comparando la salida con 3v.

También, ya que usas el comparador puedes hacer un ADC con una fuente de corriente (simple transistor) cargando un capacitor y comparando ese valor con el del divisor. El tiempo en que tarde en "saltar" el comparador va a ser proporcional a la tensión del divisor.
 
Última edición:
Vale gracias, revisaré las diferentes opciones y les estaré contando.

Ya inicié las pruebas de estabilidad. Se me ocurrió poner al lado del PIC una licuadora encendida en sus diferentes velocidades y hasta ahora ha trabajado bien, con estados fijos en las entradas. No se si parezca un poco exagerado o inapropiado, pero es con lo que cuento a la mano, y necesito avanzar.

Hoy seguiré la misma prueba mientras se conmuta una secuencia en las entradas.

Slds.
 
Que los pines estén configurados como entrada no deberían hacer que el micro se reseteara, sí el ruido por la linea de alimentación. Ahí ya estas hablando de filtros en la linea que alimenta el micro.

En estos casos ya entra la programación si es que la tarea es muy delicada para que el micro no haga nada raro cuando se resetee. La idea es que si eso pasa termine en un lugar definido y seguro.

Si se resetea por un glitch en la linea de alimentación incluso tienes un registro que guarda ese evento para definir que y como seguir en tu programa.
 
Arriba