Autor Tema: El puerto A del PIC18F1330  (Leído 9110 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
El puerto A del PIC18F1330
« 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:
 

* Micro_1330.jpg
(94.82 kB, 832x357 - visto 419 veces)


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!
« Última modificación: 06 de Octubre de 2025, 07:15:34 por PicMinor »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:El puerto A del PIC18F1330
« Respuesta #1 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?



¿La función input_a, lee el registro PORTA o LATA?
« Última modificación: 06 de Octubre de 2025, 21:09:28 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Re:El puerto A del PIC18F1330
« Respuesta #2 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!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:El puerto A del PIC18F1330
« Respuesta #3 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
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:El puerto A del PIC18F1330
« Respuesta #4 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 ;