Saturday, January 2, 2021

ADC vs Analog Voltage Displaying with PIC18F4550 in CCS PICC

In previous posts, I have shown about using the ADC module of PIC18F4550 programming, and LCD programming interface in CCS PICC

In this post, I use PIC18F4550 to read two analog input channels. A character LCD as used in the previous post displays the value of ADC reading of each channel and its analog voltage value. However, here I use the full 10-bit ADC resolution of this device.

00:00 / 00:00
PIC18F4550 ADC Reading And LCD Displaying With CCS PICC
ADC reading and its value displaying

Source code from GitHub gist:

#include<18f4550.h>
#device ADC=10
/*Use high speed clock no PLL prescaler
no system clock post scaler */
#fuses HS,PLL1,CPUDIV1
#use delay(clock=20M)
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include<lcd.c>
void adcConfig(void){
//RA0 AND RA1 As Input
set_tris_a(0x03);
//PORTD as output
set_tris_d(0x00);
//Set RA0 To Analog
setup_adc_ports(AN0_TO_AN1);
//Select ADC internal RC Clock
setup_adc(ADC_CLOCK_INTERNAL);
}
int16 getAnalog(char channel){
set_adc_channel(channel);
delay_ms(1);
int16 analogValue=read_adc();
while(!adc_done());
return analogValue;
}
void main(){
float voltage;
int16 adcValue;
lcd_init();
adcConfig();
while(1){
lcd_gotoxy(1,1);
adcValue=getAnalog(0);
voltage=(adcValue*5.0)/1024;
printf(LCD_PUTC,"AN0: %Lu %.2fV ",adcValue,voltage);
lcd_gotoxy(1,2);
adcValue=getAnalog(1);
voltage=(adcValue*5.0)/1024;
printf(LCD_PUTC,"AN1: %Lu %.2fV ",adcValue,voltage);
delay_ms(500);
}
}
view raw adcLcd.c hosted with ❤ by GitHub

Click here to download zip file of this example.

PIC18F4550 ADC Reading And LCD Displaying With CCS PICC
Schematic Diagram


No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)