TODOPIC

Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: PicMinor en 06 de Octubre de 2025, 07:01:01

Título: El puerto A del PIC18F1330
Publicado por: PicMinor en 06 de Octubre de 2025, 07:01:01
¡ Saludos al foro !

Me ha surgido una curiosa situación:
Antes de montar físicamente un circuito tengo la costumbre de preparar el código con el MPLAB y el PROTEUS.
Para un proyecto que estoy preparando he decidido utilizar el PIC18F1330 con el que no había trabajado anteriormente.
A la hora de simular me he encontrado con un curioso problema.

Utilizo este código:
Código: [Seleccionar]
#include  <18F1330.h>
#fuses    INTRC_IO   
#use Delay (Clock=8000000)

void main() {
    char Lectura;

    set_tris_a (0xFF);
    do {
        Lectura=input_a();
    }while(true);
}

y el circuito en el Proteus es éste:
  - Tienes que ingresar para ver archivos adjuntos -  

Como se ve en la imagen todos los pines del puerto A están en alto (Cuadraditos rojos). Sin embargo al correr el programa en la simulación el valor de Lectura es de 0x8C (10001100) en lugar de 0xFF que es lo que debería de ocurrir. Curiosamente el PIN_A5 lo lee como cero y es el MCLR.

Lo he simulado con otros micros, el 16F88 por ejemplo y el resultado es 0xFF como era de esperar.

Ante esta situación tengo dudas de continuar el diseño ya que no sé si el problema es de la simulación o es un comportamiento "especial" de este micro y hay que utilizar alguna configuración determinada.

¿Alguien puede darme alguna pista?

¡Gracias por anticipado!
Título: Re:El puerto A del PIC18F1330
Publicado por: DominusDRR en 06 de Octubre de 2025, 21:07:25
¡ Saludos al foro !

Me ha surgido una curiosa situación:
Antes de montar físicamente un circuito tengo la costumbre de preparar el código con el MPLAB y el PROTEUS.
Para un proyecto que estoy preparando he decidido utilizar el PIC18F1330 con el que no había trabajado anteriormente.
A la hora de simular me he encontrado con un curioso problema.

Utilizo este código:
Código: [Seleccionar]
#include  <18F1330.h>
#fuses    INTRC_IO   
#use Delay (Clock=8000000)

void main() {
    char Lectura;

    set_tris_a (0xFF);
    do {
        Lectura=input_a();
    }while(true);
}

y el circuito en el Proteus es éste:
  - Tienes que ingresar para ver archivos adjuntos -  

Como se ve en la imagen todos los pines del puerto A están en alto (Cuadraditos rojos). Sin embargo al correr el programa en la simulación el valor de Lectura es de 0x8C (10001100) en lugar de 0xFF que es lo que debería de ocurrir. Curiosamente el PIN_A5 lo lee como cero y es el MCLR.

Lo he simulado con otros micros, el 16F88 por ejemplo y el resultado es 0xFF como era de esperar.

Ante esta situación tengo dudas de continuar el diseño ya que no sé si el problema es de la simulación o es un comportamiento "especial" de este micro y hay que utilizar alguna configuración determinada.

¿Alguien puede darme alguna pista?

¡Gracias por anticipado!

Tal vez debes configurar los registros ADCON1 y  CMCON como indica las hojas de datos o ¿tu compilador ya los hace por ti?

(https://pbs.twimg.com/media/G2ncuaVXsAAbuFX?format=png&name=small)

¿La función input_a, lee el registro PORTA o LATA?
Título: Re:El puerto A del PIC18F1330
Publicado por: PicMinor en 07 de Octubre de 2025, 04:01:12
¡Gracias por la respuesta!

Los valores de los registros que comentas son:
Código: [Seleccionar]
Address     Symbol Name         Value          Hex        Decimal          Binary       Char

   F92  TRISA                          0xFF        0xFF            255          11111111  '.'
   F89  LATA                           0x00        0x00              0          00000000  '.'
   F80  PORTA                          0x8C        0x8C            140          10001100  '.'
   005  Lectura                        0x8C        0x8C            140          10001100  '.'
   FC1  ADCON1                         0x00        0x00              0          00000000  '.'
   FB4  CMCON                          0x00        0x00              0          00000000  '.'

¿Hay algo extraño?

¡Gracias por anticipado!
Título: Re:El puerto A del PIC18F1330
Publicado por: DominusDRR en 07 de Octubre de 2025, 09:58:26
¡Gracias por la respuesta!

Los valores de los registros que comentas son:
Código: [Seleccionar]
Address     Symbol Name         Value          Hex        Decimal          Binary       Char

   F92  TRISA                          0xFF        0xFF            255          11111111  '.'
   F89  LATA                           0x00        0x00              0          00000000  '.'
   F80  PORTA                          0x8C        0x8C            140          10001100  '.'
   005  Lectura                        0x8C        0x8C            140          10001100  '.'
   FC1  ADCON1                         0x00        0x00              0          00000000  '.'
   FB4  CMCON                          0x00        0x00              0          00000000  '.'

¿Hay algo extraño?

¡Gracias por anticipado!

Pues deberías leer las hojas de datos del microcontrolador para determinar que valores deben tener esos registros para que sean de tipo digital y no analógicas, ni entradas a los comparadores analógicos. Y si no son correctos esos valore, tu debes escribir el valor adecuado
Título: Re:El puerto A del PIC18F1330
Publicado por: Eduardo2 en 07 de Octubre de 2025, 13:24:22

Te falta:

Código: [Seleccionar]
   #FUSES NOMCLR
y

Código: [Seleccionar]
    setup_adc_ports(NO_ANALOGS, VSS_VDD);  // Esto es en CCS
    // Es lo mismo que escribir en ADCON1
    // ADCON1 = ADCON1 & 0xE0 | 0x0F ;