TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado 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:
#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!
-
¡ 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:
#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?
-
¡Gracias por la respuesta!
Los valores de los registros que comentas son:
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!
-
¡Gracias por la respuesta!
Los valores de los registros que comentas son:
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
-
Te falta:
#FUSES NOMCLR
y
setup_adc_ports(NO_ANALOGS, VSS_VDD); // Esto es en CCS
// Es lo mismo que escribir en ADCON1
// ADCON1 = ADCON1 & 0xE0 | 0x0F ;