Recientemente he comenzado a entrometerme con el PIC18f458. A continuación se muestra el código en el que he configurado el adc interno de 10 bits.
#define _XTAL_FREQ 10000000
#include<P18F458.h>
#include <xc.h>
#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config LVP=OFF
void main (void)
{
TRISAbits.TRISA0 = 1; //Configure RA0 pin on PORTA as Input
TRISB = 0;
//ADC Configuration
ADCON1bits.PCFG3 = 1; /*Configure AN0 as input channel and select
ADCON1bits.PCFG2 = 1; +VREF = VDD = 5V and -VREF = VSS = 0V*/
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 0;
ADCON1bits.ADFM = 0; //Store 8 bit in ADRESH and 2 bits in ADRESL
ADCON0bits.CHS0 = 0; // Select AN0 as the input channel
ADCON0bits.CHS1 = 1;
ADCON0bits.CHS2 = 1;
ADCON0bits.ADCS1 = 1;
ADCON0bits.ADCS0 = 1;
ADCON0bits.ADON = 1; //Turn ON ADC
PIR1bits.ADIF = 0; //AD Interrupt Flag
PIE1bits.ADIE = 1; //Enable AD interrupt
INTCONbits.GIE = 1; //Enable Global Interrupts
ADCON0bits.GO = 1; //Start AD Conversion
while(!PIR1bits.ADIF);
PIR1bits.ADIF = 0;
while(1)
{
temp = 0;
ADCON0bits.GO = 1;
while(!PIR1bits.ADIF); //Wait till conversion is completed
PIR1bits.ADIF = 0; //If completed, clear ADIF bit
PORTB = ADRESH; //Copy digital data to temp variable
}
He realizado los siguientes cambios dentro del código y, como se recomendó, conecté 8 LED a PORTB para verificar la salida de 8 bits de adc de ADRESH; sin embargo, los LEDS se están comportando de manera extraña. Los primeros 4 LED conectados al PORT - B0, B1, B2 y B3 están ENCENDIDOS constantemente, independientemente de cómo varíe la entrada 10K POT mientras que entre los últimos 3 LEDS, uno sigue parpadeando y el segundo último LED a veces se apaga y enciende mientras se enciende la olla. ¿Alguien puede decirme qué está pasando? ¿Hay algún problema con el código?
Actualmente, también estoy trabajando en la configuración de UART para transmitir estos datos para un mejor análisis. Mientras tanto, cualquier ayuda y orientación con respecto a esto sería apreciada. Gracias a todos.