Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[asking] LCD+ADC+TRIAC. help me to combine these programs please.

Status
Not open for further replies.
i think this may work...................
Code:
void adc()  //Function to drive ADC
{
while(1)
{
  ADD_C=0;  // Selecting input channel 2 using address lines
  ADD_B=0;
  ADD_A=1;
  delay(2);
  ale=1;
  delay(2);
  sc=1;
  delay(1);
  ale=0;
  delay(1);
  sc=0;
  while(eoc==1);
  while(eoc==0);
  oe=1;
  BCD();
  lcd_command(0x88);
  delay(2);
  oe=0;
  firing(); 
}
}

try this

i dont understand why i should call void firing (), it is inside interrupt routine. i thin it should check every interrupt.

Code:
// Program to interface TGS2600 using ADC 0809. The output of TGS2600 is displayed on LCD. Controller interrupt is used to generate the clock for driving ADC 0808.
#include<reg52.h>
sbit ale=P1^0;  //address latch enable
sbit oe=P1^3;  //output enable
sbit sc=P1^1;  //start conversion
sbit eoc=P1^2;  //end of conversion
sbit clk=P1^7;  // clock
sbit ADD_A=P1^4;  // Address pins for selecting input channels.
sbit ADD_B=P1^5;
sbit ADD_C=P1^6;
sfr lcd_data_pin=0xA0;  //P2 port
sbit rs=P3^7;
sbit rw=P3^1;
sbit en=P3^6;
sbit triac=P3^0;
sfr input_port=0x80;  //P0 port
unsigned int bitvalue,decimal_value,key,left_value,value,number,ascii1,ascii2,ascii3,flag,key1,lastReading;
void cct_init(void);
void initint0(void);

void timer0() interrupt 1  // Function to generate clock of frequency 500KHZ using Timer 0 interrupt.
{
clk=~clk;
}

void delay(unsigned int count) //delay function in mS
{
unsigned int i;                         
    while(count) {
        i = 115;
                while(i>0) i--;
        count--;
}}

void cct_init(void)
 {
 P3=0x05;	//triac is on when active low. initialy triac is off.
 }

void initINT0(void)	  //activate int0
 {
 IT0=1;	 //interupted when transition from logic 1 to 0 (zero cross detector)
 EX0=1;
 EA=1;
 }

void external0_isr(void) interrupt 0 //interrupt routine

{
lastReading=input_port;
 if((lastReading>=52) && (lastReading<=77))	//1st condition
      {triac=1;
       delay(4);
       triac=0;
       delay(1);
       triac=1;}

          else if((lastReading>=77) && (lastReading<=103))	//2nd condition
              {triac=1;
               delay(3);
               triac=0;
               delay(1);
               triac=1;}

             else if((lastReading>=103) && (lastReading<=128))	//3rd condition
               {triac=1;
                delay(2);
                triac=0;
                delay(1);
                triac=1;}

                else if(lastReading>128) //4th condition; full power
                  {triac=0;
				   delay(1);
                   triac=1;}

else  //5th condition; triac not firing
{triac=1;}
}



void lcd_command(unsigned char comm)  //Function to send command to LCD.
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(10);
en=0;
}

void lcd_data(unsigned char disp)  //Function to send data to LCD.
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(10);
en=0;
}

lcd_dataa(unsigned char *disp)  //Function to send string data to LCD.
{
int x;
for(x=0;disp[x]!=0;x++)
{
  lcd_data(disp[x]);
}
}

void lcd_ini()  //Function to inisialize the LCD
{
lcd_command(0x38); 
delay(5);
lcd_command(0x0E); 
delay(5);
lcd_command(0x80);  //Force cursor to blink at line 1 positon 0
delay(5);
}

void BCD()  // Binary to decimal conversion to send the data to LCD
{
  key1++;
  key=0;
  flag=0;
    number=input_port;
    number= number*39;
    number= number/100;
    value=number%10;
number=number/10;
ascii1=value+48;
if(number!=0)
{
  value=number%10;
  number=number/10;
  ascii2=value+48;
    flag=1;
}
else
{
   ascii2=48;
   flag=1;
}
if(number!=0)
{
 value=number%10;
    number=number/10;
    ascii3=value+48;
    key=2;
}
else
{
  ascii3=48;
  key=2;
}
if(key==2)
lcd_data(ascii3);
if(flag==1)
lcd_data(ascii2);
lcd_data(ascii1);
if(key1==3)
{
key1=0;
ascii3=0;
ascii2=0;
ascii1=0;
delay(10);
} 
}



void adc()  //Function to drive ADC
{
while(1)
{
  ADD_C=0;  // Selecting input channel 2 using address lines
  ADD_B=0;
  ADD_A=1;
  delay(2);
  ale=1;
  delay(2);
  sc=1;
  delay(1);
  ale=0;
  delay(1);
  sc=0;
  while(eoc==1);
  while(eoc==0);
  oe=1;
  BCD();
  lcd_command(0x88);
  delay(2);
  oe=0;
  }
}


void main()
{
cct_init();
initINT0();
eoc=1;
ale=0;
oe=0;
sc=0;
key1=0;
TMOD=0x02;  //timer0 setting for generating clock of 500KHz using interrupt enable mode.
TH0=0xFD;
IE=0x82;
TR0=1;
lcd_ini();

lcd_dataa("PPM : ");
lcd_command(0x88);
adc();

}

this is my updated code.
 

Code:
// Program to interface TGS2600 using ADC 0809. The output of TGS2600 is displayed on LCD. Controller interrupt is used to generate the clock for driving ADC 0808.
#include<reg52.h>
#include<stdio.h>
sbit ale=P1^0;  //address latch enable
sbit oe=P1^3;  //output enable
sbit sc=P1^1;  //start conversion
sbit eoc=P1^2;  //end of conversion
sbit clk=P1^7;  // clock
sbit ADD_A=P1^4;  // Address pins for selecting input channels.
sbit ADD_B=P1^5;
sbit ADD_C=P1^6;
sfr lcd_data_pin=0xA0;  //P2 port
sbit rs=P3^7;
sbit rw=P3^1;
sbit en=P3^6;
sbit triac=P3^0;
sbit intr0=P3^2;
sfr input_port=0x80;  //P0 port
unsigned int bitvalue,decimal_value,key,left_value,value,number,ascii1,ascii2,ascii3,flag,key1,lastReading;
void initINT0(void);

void timer0() interrupt 1  // Function to generate clock of frequency 500KHZ using Timer 0 interrupt.
{
clk=~clk;
}

void delay(unsigned int count) //delay function in mS
{
unsigned int i;                         
    while(count) {
        i = 115;
                while(i>0) i--;
        count--;
}}


void initINT0(void)	  //activate int0
 {
 IT0=1;	 //interupted when transition from logic 1 to 0 (zero cross detector)
 EX0=1;
 EA=1;
 }




void lcd_command(unsigned char comm)  //Function to send command to LCD.
{
lcd_data_pin=comm;
en=1;
rs=0;
rw=0;
delay(10);
en=0;
}

void lcd_data(unsigned char disp)  //Function to send data to LCD.
{
lcd_data_pin=disp;
en=1;
rs=1;
rw=0;
delay(10);
en=0;
}

lcd_dataa(unsigned char *disp)  //Function to send string data to LCD.
{
int x;
for(x=0;disp[x]!=0;x++)
{
  lcd_data(disp[x]);
}
}

void lcd_ini()  //Function to inisialize the LCD
{
lcd_command(0x38); 
delay(5);
lcd_command(0x0E); 
delay(5);
lcd_command(0x80);  //Force cursor to blink at line 1 positon 0
delay(5);
}

void BCD()  // Binary to decimal conversion to send the data to LCD
{
  key1++;
  key=0;
  flag=0;
    number=input_port;
    number= number*39;
    number= number/100;
    value=number%10;
number=number/10;
ascii1=value+48;
if(number!=0)
{
  value=number%10;
  number=number/10;
  ascii2=value+48;
    flag=1;
}
else
{
   ascii2=48;
   flag=1;
}
if(number!=0)
{
 value=number%10;
    number=number/10;
    ascii3=value+48;
    key=2;
}
else
{
  ascii3=48;
  key=2;
}
if(key==2)
lcd_data(ascii3);
if(flag==1)
lcd_data(ascii2);
lcd_data(ascii1);
if(key1==3)
{
key1=0;
ascii3=0;
ascii2=0;
ascii1=0;
delay(10);
} 
}



void adc()  //Function to drive ADC
{
  ADD_C=0;  // Selecting input channel 2 using address lines
  ADD_B=0;
  ADD_A=1;
  delay(2);
  ale=1;
  delay(2);
  sc=1;
  delay(1);
  ale=0;
  delay(1);
  sc=0;
  while(eoc==1);
  while(eoc==0);
  oe=1;
  BCD();
  lcd_command(0x88);
  delay(2);
  oe=0;
  }
void external0_isr(void) interrupt 0 //interrupt routine

{
 if((input_port>=52) && (input_port<=77))	//1st condition
      {delay(5);
       triac=0;
	   delay(1);}

          else if((input_port>=77) && (input_port<=103))	//2nd condition
              {delay(4);
               triac=0;
			   delay(1);}

             else if((input_port>=103) && (input_port<=128))	//3rd condition
               {delay(3);
                triac=0;
				delay(1);}

                else if(input_port>128) //4th condition; full power
                  {triac=0;
				  delay(1);}

	                else
					{triac=1;
					}

triac=1;
EA=0;
EA=1;
}


void main()
{
initINT0();
intr0=1;
triac=1;
while(1)
{
eoc=1;
ale=0;
oe=0;
sc=0;
key1=0;
TMOD=0x02;  //timer0 setting for generating clock of 500KHz using interrupt enable mode.
TH0=0xFD;
IE=0x82;
TR0=1;
lcd_ini();

lcd_dataa("PPM : ");
lcd_command(0x88);
adc();
}
}

i would like to update my code, but i cant find edit button. so i posted again.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top