Hi,
I trying a simple program where the LED will turn on if the input to an ADC is above a certain voltage. I have connected some LEDs to PORTB of the microcontroller and i applied a 4V voltage directly to the ADC input which is AN0. Somehow the LED will keep on lighting even after i stop applying the 4V voltage to the ADC input. Is there anything wrong with my code? Pls help, thanks.
Here is my code
//program to turn on LED if voltage above the preset voltage-PIC18F1220
#include <p18f1220.h>
#include <delays.h>
#pragma config WDT = OFF //watchdogtimer off
#pragma config LVP = OFF //lowvoltageprogramming off
#pragma config OSC = INTIO2 //select internal oscillator
#pragma config BOR = OFF // brownout reset off
#pragma config MCLRE = OFF //master clear off
#pragma code
float getVoltage(void) //func to read ADC
{
ADCON0bits.GO = 1; //start ADC
Delay100TCYx (2);
while(ADCON0bits.GO == 1); //wait for completion
return (ADRESH*0.018); // x with 0.018 to convert back to actual value
}
void main (void)
{
OSCCON = 0x43; //set internal freq 1Mhz
OSCTUNE = 0
ADCON1=0x7e; //select AN0 as analog
ADCON0 =0x0; //select Vdd Vss as reference, select input AN0
ADCON2=0x27; // left justified, use internal conversion clock
ADCON0bits.ADON = 1 ;
TRISA = 1; //set portA as input
TRISB = 0; //set port B as output
PORTB = 0b00000000; //reset port B
while (1)
{
if (getVoltage() >3||getVoltage()<5)
PORTB =0b11111111; //LED ON
else
PORTB = 0b00000000; //LED OFF
}
}
I trying a simple program where the LED will turn on if the input to an ADC is above a certain voltage. I have connected some LEDs to PORTB of the microcontroller and i applied a 4V voltage directly to the ADC input which is AN0. Somehow the LED will keep on lighting even after i stop applying the 4V voltage to the ADC input. Is there anything wrong with my code? Pls help, thanks.
Here is my code
//program to turn on LED if voltage above the preset voltage-PIC18F1220
#include <p18f1220.h>
#include <delays.h>
#pragma config WDT = OFF //watchdogtimer off
#pragma config LVP = OFF //lowvoltageprogramming off
#pragma config OSC = INTIO2 //select internal oscillator
#pragma config BOR = OFF // brownout reset off
#pragma config MCLRE = OFF //master clear off
#pragma code
float getVoltage(void) //func to read ADC
{
ADCON0bits.GO = 1; //start ADC
Delay100TCYx (2);
while(ADCON0bits.GO == 1); //wait for completion
return (ADRESH*0.018); // x with 0.018 to convert back to actual value
}
void main (void)
{
OSCCON = 0x43; //set internal freq 1Mhz
OSCTUNE = 0
ADCON1=0x7e; //select AN0 as analog
ADCON0 =0x0; //select Vdd Vss as reference, select input AN0
ADCON2=0x27; // left justified, use internal conversion clock
ADCON0bits.ADON = 1 ;
TRISA = 1; //set portA as input
TRISB = 0; //set port B as output
PORTB = 0b00000000; //reset port B
while (1)
{
if (getVoltage() >3||getVoltage()<5)
PORTB =0b11111111; //LED ON
else
PORTB = 0b00000000; //LED OFF
}
}