hi friends
i am doing a simple project in pic18 , doing a adc and display the output in lcd, i am using one chennal for analog input i got the 10 bit output clearly but i don't know how to show the 10 bit value in lcd please explain the logic only please :sad:
Here is the code for PIC18 using ADC for displaying current and Voltage in the LCD
#include <p18xxxx.h>
#include <delays.h>
#include "lcd.h"
#include <string.h>
#define LCD_RS PORTAbits.RA3
#define LCD_EN PORTAbits.RA1
#define LCD_WR PORTAbits.RA2
#define set_dd_line1_pos1 0x80
#define set_dd_line2_pos1 0x80
char value1 [ ] = "0V";
char value2 [ ] = "5V";
void lcd_write_cmd(unsigned char cmd)
{
unsigned char temp2;
LCD_RS = 0;
Delay10TCYx(4);
temp2 = cmd;
temp2 = temp2 >> 4;
PORTD = temp2 & 0x0F;
Delay1KTCYx(1);
lcd_strobe();
Delay1KTCYx(1);
temp2 = cmd;
PORTD = temp2 & 0x0F;
Delay1KTCYx(1);
lcd_strobe();
Delay1KTCYx(1);
}
void lcd_clear(void)
{
lcd_write_cmd(0x01);
Delay1KTCYx(2);
}
void lcd_write_data(char data)
{
char temp1;
LCD_RS = 1;
Delay10TCYx(4);
temp1 = data;
temp1 = temp1 >> 4;
PORTD = temp1 & 0x0F;
Delay1KTCYx(1);
lcd_strobe();
Delay1KTCYx(1);
temp1 = data;
PORTD = temp1 & 0x0F;
Delay1KTCYx(1);
lcd_strobe();
Delay1KTCYx(1);
}
void lcd_goto(unsigned char LCD_POS)
{
lcd_write_cmd(LCD_POS);
Delay1KTCYx(2);
}
void lcd_strobe(void)
{
LCD_EN = 1;
Delay10TCYx(4);
LCD_EN = 0;
Delay10TCYx(4);
}
void lcd_init(void)
{
LCD_RS = 0;
LCD_WR = 0;
Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);
PORTD = 0x03;
lcd_strobe();
Delay1KTCYx(250);
PORTD = 0x03;
lcd_strobe();
Delay1KTCYx(250);
PORTD = 0x03;
lcd_strobe();
Delay1KTCYx(250);
PORTD = 0x02;
lcd_strobe();
Delay1KTCYx(250);
Delay1KTCYx(250);
lcd_write_cmd(0x28)
lcd_write_cmd(0x01);
Delay1KTCYx(20);
Delay1KTCYx(20);
lcd_write_cmd(0x0F);
Delay1KTCYx(20);
lcd_write_cmd(0x06);
Delay1KTCYx(20);
}
main(void)
{
char outchar;
unsigned char Sizevalue1, Sizevalue2, Sizevalue3;
unsigned char index;
#define constant 0x01
#define constant2 0x05
TRISA = 0x00;
TRISD = 0x00;
PORTD = 0x00;
ADCON0 = 0b11000001;
ADCON1 = 0b00001110;
for(;
{
ADCON0bits.GO = 1;
(PIR1bits.ADIF == 0);
PORTD = ADRESH;
if(ADRESH < constant)
{
Sizevalue1 = strlen(value1); // get size of array
LCD_EN = 0;
LCD_RS = 0;
LCD_WR = 0;
lcd_init();
LCD_RS = 1;
lcd_goto(set_dd_line1_pos1);
for (index = 0; index < Sizevalue1; index++)
{
outchar = value1[index];
lcd_write_data(outchar);
}
Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);
lcd_goto(set_dd_line1_pos1);
PIR1bits.ADIF = 0;
lcd_clear();
}
if(ADRESH > constant2)
{
Sizevalue2 = strlen(value2);
LCD_EN = 0;
LCD_RS = 0;
LCD_WR = 0;
lcd_init();
LCD_RS = 1;
lcd_goto(set_dd_line1_pos1);
for (index = 0; index < Sizevalue1; index++)
{
outchar = value2[index];
lcd_write_data(outchar);
}
Delay1KTCYx(250);
Delay1KTCYx(250);
Delay1KTCYx(250);
lcd_goto(set_dd_line1_pos1);
PIR1bits.ADIF = 0;
lcd_clear();
}
}
}