Autor Tema: MCLR como entrada (PIN_E3)  (Leído 1626 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
MCLR como entrada (PIN_E3)
« en: 29 de Marzo de 2023, 07:27:28 »
¡¡ Saludos al foro !!

Estoy intentando simular un PIC18F2580 con el PROTEUS. En este diseño necesito utilizar el pin de reset (PIN_E3) como un pin de entrada digital. Para ello configuro el fuse correspondiente a cero (NOMCLR en CCS). En el pin coloco una resistencia pull-up de 10K.

Pues cuando arranco el código el pin se pone a cero lógico y no a uno como debería, así que no consigo simular la entrada ya que siempre es cero.

Como ya he dicho el micro es un PIC18F2580 y el hardware no tiene más el pin 1 (PIN_E3/VPP/MCLR) puesto a VCC con una resistencia pull-up. El software en CCS lleva la configuración que puede reducirse a:

#fuses        INTRC_IO
#fuses        NOMCLR

Al simular el circuito vemos que el pin se pone a cero y no hay forma de que cambie a uno, que es el valor que debería tener.

¿Alguien tiene alguna idea sobre este problema?

Gracias por anticipado!!
« Última modificación: 29 de Marzo de 2023, 07:36:37 por PicMinor »

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:MCLR como entrada (PIN_E3)
« Respuesta #1 en: 29 de Marzo de 2023, 07:47:04 »
Hola, quizás el compilador interpreta ese pin como salida. Declaralo como entrada aunque sea redundante ya que es un pin de entrada únicamente.
O puede que esa versión de Proteus te juegue una mala pasada. Has probado en físico para ver qué tal va?

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:MCLR como entrada (PIN_E3)
« Respuesta #2 en: 29 de Marzo de 2023, 08:14:47 »
¡ Gracias por tu respuesta !

He probado a declaralo explicitamente como entrada, he forzado el "tris", he probado con varias versiones de Proteus y no hay manera de que funcione la simulación.

Con un circuito real todo va perfectamente, por supuesto.

¡ Un saludo !


Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:MCLR como entrada (PIN_E3)
« Respuesta #3 en: 29 de Marzo de 2023, 09:51:30 »
Ok, es típico de las simulaciones. Me he quebrado la cabeza muchas veces con éste tipo de comportamientos. Pero claro, uno espera que la simulación funcione como debe ser para analizar y corregir antes de llevarlo a lo físico.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:MCLR como entrada (PIN_E3)
« Respuesta #4 en: 30 de Marzo de 2023, 03:33:46 »
¡ Gracias por la respuesta !

He conseguido "forzar" el uno lógico pero de una manera absurda. Al parecer el modelo de simulación requiere 250mA!!! para ponerse a uno. Actúa como si aplicara una resistencia de pull-down de 20 ohmios.

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:MCLR como entrada (PIN_E3)
« Respuesta #5 en: 30 de Marzo de 2023, 07:44:34 »
En realidad estás superando la capacidad máxima que puede drenar corriente el pin. Posiblemente en lo físico se dañaría. Ya que en la simulación, se sigue comportando como salida.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:MCLR como entrada (PIN_E3)
« Respuesta #6 en: 30 de Marzo de 2023, 10:18:02 »
¡ Gracias por la respuesta !

He conseguido "forzar" el uno lógico pero de una manera absurda. Al parecer el modelo de simulación requiere 250mA!!! para ponerse a uno. Actúa como si aplicara una resistencia de pull-down de 20 ohmios.

¿Has intentado reducir el valor de la resistencia a un menor valor, tal vez 1K o 100 ohmios?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:MCLR como entrada (PIN_E3)
« Respuesta #7 en: 30 de Marzo de 2023, 18:51:51 »
¡ Gracias por las respuestas !

El código de prueba que utilizo es éste:

Código: C
  1. // ===========================================================================================================
  2. //              C Ó D I G O     P R O B L E M Á T I C O     E N     L A     S I M U L A C I Ó N
  3. // ===========================================================================================================
  4. #include        <18F2580.h>                                         // Micro Utilizado
  5.  
  6. #fuses          INTRC                                               // Oscilador Interno
  7. #fuses          NOMCLR                                              // Patilla de Reset ¡¡¡ NO HABILITADA !!!
  8.  
  9. void main()     {
  10.         unsigned int Val_Tris;                                      // Para el puerto
  11.         short        Val_Pin;                                       // Para el Pin
  12.  
  13.         setup_oscillator(OSC_32MHZ);                                // Oscilador Interno A 32 Mhz
  14.         Val_Tris = get_tris_e();                                    // El valor es 0x00 (Todo salidas)
  15.         set_tris_e(0x08);                                           // Lo forzamos como entrada
  16.         Val_Tris = get_tris_e();                                    // El valor es 0x08 (Pin E3 como entrada)
  17.  
  18.         do {                                                        // Bucle de prueba
  19.                 Val_Pin=input(PIN_E3);                              // Lee el MCLR
  20.         }while(!Val_Pin);                                           // Bucle infinito mientras sea cero
  21.  
  22.         do{}while (true);                                           // Nunca llega aquí salvo con 10 ohmios!!
  23. }
Creo que el código está bien. No lleva nada "exótico" salvo el fuse NOMCLR que es el que genera el problema.

Aquí hay un esquema para trastear:
« Última modificación: 30 de Marzo de 2023, 18:55:32 por PicMinor »

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re:MCLR como entrada (PIN_E3)
« Respuesta #8 en: 31 de Marzo de 2023, 03:08:23 »
No será que cuando se utiliza ese pin como I/O solo se pueda usar como entrada. Esto figura bien claro en el datasheet.

Algún tipo de pic, solo permite esa opción. No sé si será el caso con este pic y tú estás queriéndolo utilizar como salida.

F.
Todos los días se aprende algo nuevo.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:MCLR como entrada (PIN_E3)
« Respuesta #9 en: 31 de Marzo de 2023, 03:45:11 »
¡ Gracias por la respuesta !

Citar
tú estás queriéndolo utilizar como salida.

No es así. Lo que quiero es usarlo como entrada y es la simulación la que aparentemente lo pone como salida en bajo. Si revisas el código verás que lo estoy leyendo, no escribiendo.

¡ Saludos !

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:MCLR como entrada (PIN_E3)
« Respuesta #10 en: 31 de Marzo de 2023, 09:58:24 »
No será que cuando se utiliza ese pin como I/O solo se pueda usar como entrada. Esto figura bien claro en el datasheet.

Algún tipo de pic, solo permite esa opción. No sé si será el caso con este pic y tú estás queriéndolo utilizar como salida.

F.

Código: C
  1. set_tris_e(0x08);                                           // Lo forzamos como entrada
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:MCLR como entrada (PIN_E3)
« Respuesta #11 en: 31 de Marzo de 2023, 16:33:58 »
Si dices que en físico se comporta como debe, entonces puedes quedarte tranquilo con el código. El tema viene por el lado del simulador.
Prueba con otro PIC, por ejem. el 18F2550 para ver que tal se lleva con el simulador.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:MCLR como entrada (PIN_E3)
« Respuesta #12 en: 31 de Marzo de 2023, 21:27:48 »
¡ Gracias por la respuesta !

Efectivamente, he probado con otros micros y funciona bien la simulación. No entiendo por qué en el 18F2580 no lo hace. Tampoco funciona en el 18F4580. Sí lo hace en el 18F2550 y en el 16F886.

Además es curioso que en el 18F4580 no permite cambiar el TRISE que por defecto viene a 0x07 poniendo el pin E3 como salida. Sin embargo en el 16F886 lo pone automáticamente como entrada (TRISE=0x08).

Es muuuuuuy raro.

¡ Saludos !
« Última modificación: 31 de Marzo de 2023, 21:30:30 por PicMinor »

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:MCLR como entrada (PIN_E3)
« Respuesta #13 en: 31 de Marzo de 2023, 21:52:05 »
buena día colegas, interesante lo del pin aunque como siempre detalles en la simulación nos hacen hondar y regresar a los apuntes, en la teoría para el pic18f2580 y guiándonos de la hoja de datos, el pin solamente se puede usar como entrada, hasta hay se entiende bien, para configurarlo para que lo podamos usar como entrada es directo en los fuses en la pagina 353 y en la 148 la configuración del resto del puerto y recalca que que se tiene que configurar el pin como digital solo si se deshabilita el mclre, aunque con el registro trise podemos configurar como entrada y salida, para el bit re3 no esta implementado para usarse aunque en el programa lo pongamos como 1 o 0 en el micro lo leerá como 0, esa es en la parte de configuración, ahora en la parte de leer el pin, sabemos que en los micros 18f para escribir en un puerto es con el registro lat en este caso es el late que como recalca la hoja de datos solamente es para re0 re1 y re2 ya que re3 no es salida, y para leer es con el registro port en este caso el porte aunque curiosamente la misma hoja de datos en su pagina 148 dice textualmente que ese registro no esta implementado en la familia pic18f2x80, tampoco el registro trise y el registro cmcon entonces aunque quisiéramos nombrarlos pues no pasaría nada, entonces la pregunta es como podemos manejar el pin re3 para leerlo? pues la respuesta esta en la pagina 146 que dice que en este caso de los dispositivos de 28 pines solo el porte esta disponible si el master clear esta deshabilitado y en este caso el puerto e esta conformado de un solo bit que es el re3 y ya se puede leer como pin individual o como puerto completo pero solo se verán los cambios en ese bit, así por eso funciona en las pruebas reales entonces volviendo al simulador por eso se confunde y salen datos en el pin que no concuerdan con la realidad.

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:MCLR como entrada (PIN_E3)
« Respuesta #14 en: 31 de Marzo de 2023, 22:09:20 »
colega en el caso del pic16f886 el registro tris e y porte si están implementados según la hoja de datos y en la pagina 59 y 60 dicen que el bit re3 siempre se leerá como 1 así que cuando inicia esta como entrada cuando esta deshabilitado el master clear y cuando esta habilitado se lee como 0 y dato interesante este pin tiene resistencia pull up interna que se puede usar