here below i have copied my code...
it has three analog input and 3 svensegment display..
here when there is a fault call for first loop it runs properly...
but for second and third loop it breaks the loop of fault and m not getting where i have made a mistake...
can any one help me out????
in stimulation code runs properly but in hardware it shows this problem...
CODE:::
#include <16f876a.h>
#USE STANDARD_IO (C)
#USE STANDARD_IO (B)
//#INT_TIMER1
//#INT_CCP2
//#pragma cofig POSCMOD = OFF
#use delay (clock=4000000)
//#bit capture_2 = 0x0c.2;
//float r,f,w;
void display(int);
void disply(int);
void fault(int);
void mdisplay(int16);
//int frequency();
void main()
{while(1)
{int16 data;
{ int i;
output_low(pin_a5);
output_high(pin_a3);
output_high(pin_c1);
output_high(pin_c2);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data=read_adc();
output_bit(pin_c2,0);
if(data>=235||data<=3)
{fault(3);
}
output_bit(pin_c2,0);
mdisplay((data+185));
//delay_us(150);
}
output_bit(pin_c2,1);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data=read_adc();
if(data>=235||data<=3)
{fault(2);
}
output_bit(pin_c1,0);
mdisplay((data+185));
}
output_bit(pin_c1,1);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data=read_adc();
if(data>=235||data<=3)
{fault(1);
}
output_bit(pin_a3,0);
mdisplay((data+185));
}
/*for (i=0;i<=5;i++);
{ data=frequency();
mdisplay(data);
delay_ms(10);
}*/
}
}
}
void mdisplay(int16 data)
{int a,b,c,temp;
a=data%10;
temp=data/10;
b=temp%10;
c=data/100;
output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b2);
display(c);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(b);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(a);
delay_ms(10);
output_low(pin_b4);
}
void display(int a)
{output_low(pin_c3);
output_low(pin_c4);
output_low(pin_c5);
output_low(pin_c6);
output_low(pin_c7);
output_low(pin_b1);
output_low(pin_b0);
if(a==0)
{ output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
}
else if(a==1)
{output_high(pin_c4);
output_high(pin_c5);
}
else if(a==2)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b0);}
else if(a==3)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b0);
}
else if(a==4)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==5)
{output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==6)
{ output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==7)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
}
else if(a==8)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==9)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==10)
{output_high(pin_c3);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==11)
{output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
//
}
else if(a==12)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
}
void fault(int a)
{int16 data1;
switch(a)
{
case 1: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
do
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
output_bit(pin_a3,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_a3,1);
case 2: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
do
{ setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
output_bit(pin_c1,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_c1,1);
case 3: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
do
{setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
output_bit(pin_c2,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_c2,1);
}
output_bit(pin_a4,1);
output_bit(pin_a5,0);
}
void disply(int a)
{output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
if(a==1)
{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(11);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4); }
else{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(12);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4);
}
}
it has three analog input and 3 svensegment display..
here when there is a fault call for first loop it runs properly...
but for second and third loop it breaks the loop of fault and m not getting where i have made a mistake...
can any one help me out????
in stimulation code runs properly but in hardware it shows this problem...
CODE:::
#include <16f876a.h>
#USE STANDARD_IO (C)
#USE STANDARD_IO (B)
//#INT_TIMER1
//#INT_CCP2
//#pragma cofig POSCMOD = OFF
#use delay (clock=4000000)
//#bit capture_2 = 0x0c.2;
//float r,f,w;
void display(int);
void disply(int);
void fault(int);
void mdisplay(int16);
//int frequency();
void main()
{while(1)
{int16 data;
{ int i;
output_low(pin_a5);
output_high(pin_a3);
output_high(pin_c1);
output_high(pin_c2);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data=read_adc();
output_bit(pin_c2,0);
if(data>=235||data<=3)
{fault(3);
}
output_bit(pin_c2,0);
mdisplay((data+185));
//delay_us(150);
}
output_bit(pin_c2,1);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data=read_adc();
if(data>=235||data<=3)
{fault(2);
}
output_bit(pin_c1,0);
mdisplay((data+185));
}
output_bit(pin_c1,1);
for (i=0;i<=50;i++)
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data=read_adc();
if(data>=235||data<=3)
{fault(1);
}
output_bit(pin_a3,0);
mdisplay((data+185));
}
/*for (i=0;i<=5;i++);
{ data=frequency();
mdisplay(data);
delay_ms(10);
}*/
}
}
}
void mdisplay(int16 data)
{int a,b,c,temp;
a=data%10;
temp=data/10;
b=temp%10;
c=data/100;
output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b2);
display(c);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(b);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(a);
delay_ms(10);
output_low(pin_b4);
}
void display(int a)
{output_low(pin_c3);
output_low(pin_c4);
output_low(pin_c5);
output_low(pin_c6);
output_low(pin_c7);
output_low(pin_b1);
output_low(pin_b0);
if(a==0)
{ output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
}
else if(a==1)
{output_high(pin_c4);
output_high(pin_c5);
}
else if(a==2)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b0);}
else if(a==3)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b0);
}
else if(a==4)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==5)
{output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==6)
{ output_high(pin_c3);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==7)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
}
else if(a==8)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==9)
{output_high(pin_c3);
output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c6);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==10)
{output_high(pin_c3);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
else if(a==11)
{output_high(pin_c6);
output_high(pin_c7);
output_high(pin_b1);
//
}
else if(a==12)
{output_high(pin_c4);
output_high(pin_c5);
output_high(pin_c7);
output_high(pin_b1);
output_high(pin_b0);
}
}
void fault(int a)
{int16 data1;
switch(a)
{
case 1: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
do
{
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(1);
data1=read_adc();
output_bit(pin_a3,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_a3,1);
case 2: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
do
{ setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_ms(1);
data1=read_adc();
output_bit(pin_c1,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_c1,1);
case 3: output_bit(pin_a5,1);
output_bit(pin_a4,0);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
do
{setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(2);
delay_ms(1);
data1=read_adc();
output_bit(pin_c2,0);
if(data1<=3)
{ disply(1);}
else if(data1>=235)
{ disply(2);}
}
while(data1>=235||data1<=3);
output_bit(pin_c2,1);
}
output_bit(pin_a4,1);
output_bit(pin_a5,0);
}
void disply(int a)
{output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
if(a==1)
{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(11);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4); }
else{
output_high(pin_b2);
display(10);
delay_ms(10);
output_low(pin_b2);
output_high(pin_b5);
display(12);
delay_ms(10);
output_low(pin_b5);
output_high(pin_b4);
display(0);
delay_ms(10);
output_low(pin_b4);
}
}