Vous êtes sur la page 1sur 6

// ADC Conversion Example

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include<math.h>
#include "lcd1.c"
#include <stdlib.h>
#include <string.h>
//float lkbuffa[]={1.0 , 2.5 , 3.0 , 1.5 , 0.5 , 2.0 };
//----------------------------------------void adc_init(void); // Will set up the registers for A/D conversion
int bufferlength(char*);
void number(float);
float value(float);
//..............function definations.................................
int display1(float *ptr,float r)
{
float temp;
// number((*r));
int i=0,x,y;
for(;i<5;i++)
{
//
temp=*(ptr+i);
// while(i<6); // if(lkbuffa[i]==temp)
if((*(ptr+i)==r)&&i<5)
return(i);
}
return(5);
}
//----------------------------------------------- Begin Code -----------------------------------------------------------int main(void)
{
//.....................gain....................................
float lkbuffv[]={1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0};//gain
int lkbuffc1[]={7,8,9,10,11,12,13,14,15};
char lkbuffg[]={'7','6','8','9','10','11','12','13','14','15'};
//......................attenuation values...........................
float lkbuffa[]={1.0,2.5,3.0,1.5,2.0};
// float lkbuffa[]={1.0,1.3,2.0,2.1,2.4,3.0};
float lkbuffc2[]={6.0,4.0,2.0,5.0,3.0,1.0};
char lkbuffCT[]={'4','1','0','3','2'};//'0','5','3','1'};
unsigned char
buffc[]={0b00000000,0b00000001,0b00000011,0b00000100,0b00000101,0b00000110,0b00000111,0
b00001000,0b00001001,0b00001010,0b00001011,0b00001100,0b00001101,0b00001110,0b00001111
};

char buffer[33], buf[]="Gain:",buf1[]="attn:";char M[1],numbuff[33];


volatile uint16_t word;
float a,b,numb;
int k,j,g,X,Y;
// ------------Call the init function-------------------------LCDinit();
LCDclr();
//LCDhome();
DDRF = 0x00; // configure a2d port (PORTF) as input so we can receive analog signals
PORTF = 0x00; // make sure pull-up resistors are turned off (else well just read 0xCFF)
DDRA = 0xFF;//output
DDRD = 0xFF;//output
DDRC=0xff;
PORTC=0xFF;
while(1)
{
adc_init();// Call the init function
while(ADCSRA & 0b01000000); // wait for conversion to complete (bit 6 will change to 0)
PORTA = ADCL;
PORTD= ADCH;
word = ( PORTD << 8 ) + PORTA;
a=((float)word/1023)*5;
//..........gain 0 and atteneution 0..........................
if(a>=1.5&&a<=2.5)//in between 1.5 to 2.5
{
g='0';
LCDGotoXY(0,0);
LCDstring("Gain:",5);//gain
LCDsendChar(g);
LCDGotoXY(0,1);
LCDstring("attn:",5);//attns= bufferlength(&numbuff);
LCDsendChar(g);
PORTC=buffc[0];
}
//----------------------------------------GAIN------------------------------(LEAVE THIS GAIN PART)
/*else
if(a>=0&&a<1.5)//0 to 1.5 gain
{
b=(2.0-a);
LCDGotoXY(0,0);
LCDstring(buf,(sizeof(buf)-1));//gain
number(b);
LCDGotoXY(0,1);
LCDstring("VGA VAL:",8);
numb=value(b);
number(numb);
for(;k<10;k++)
{
if(lkbuffv[k]==numb)

j=k;
// break;}
}
itoa(lkbuffc1[j],numbuff,2);
//s= bufferlength(&numbuff);
//LCDsendChar(lkbuffc1[j]);
LCDstring(numbuff,4);
//LCDsendChar(lkbuffg[j]);
PORTC=buffc[j];
// break;
}*/
//----------------------------------ATTENUATION --------------------else
if(a>2.5&&a<=5.0)//2.5 to 5.0 attenuation
{
b=(a-2.0);
LCDGotoXY(0,0);
LCDstring(buf1,(sizeof(buf1)-1));//attn
numb=b;
number(b);
LCDGotoXY(0,1);
X = display1(&lkbuffa,numb);
LCDstring("VGA VALUE",2);
if(X<5)
{
number(b);
LCDstring("N:",2);
LCDsendChar(lkbuffCT[X]);
LCDsendChar('X');
itoa(X,M,10);
LCDstring(M,1);
}
if(X==5)
{
numb=value(b);
number(numb);
Y=display1(&lkbuffa,numb);
LCDsendChar('Y');
itoa(Y,M,10);
LCDstring(M,1);
LCDstring("N:",2);
LCDsendChar(lkbuffCT[Y]);
}
//..............
/* numb=value(b);
number(numb);
display1(&lkbuffa,&numb,&X);

LCDsendChar('X');
itoa(X,M,10);
LCDstring(M,1);
LCDstring("N:",2);
LCDsendChar(lkbuffat[X]); */
//....................
//number(lkbuffc2[X]);
PORTC=buffc[X];
}//while
// while(1);
// return 0;
} // end main()
}
//-----------ADC INITIALIZATION--------------------------void adc_init(void)
{
ADCSRA=1<<ADEN;//sbi(ADCSRA,ADEN); // enables ADC by setting bit 7 (ADEN) in the
ADCSRA
ADCSRA=~(1<<ADFR);//cbi(ADCSRA,ADFR); // single sample conversion by clearing bit 5
(ADFR) in the ADCSRA
ADCSRA = ((ADCSRA & 0b11111000) | 0b00000110); // selects div by 64 clock prescaler
ADMUX = ((ADMUX & 0b00111111) | 0b01000000); // selects AVCC as Vref
ADMUX&=~(1<<ADLAR);//cbi(ADMUX,ADLAR); // selects right adjust of ADC result
ADMUX &= 0b11100000; // selects single-ended conversion on PF0
}
//---------------------DELAY------------------------------int delay(void)
{
unsigned int count ;
for (count=0;count<=0x9FFF;count++)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
return 1;
}

//---------------------------no of charecters to be displayed in LCD-------------------------int bufferlength(char *p)

{
int j,count=0;
for(j=0;j<(sizeof(*(p)));j++)
{
if(p[j]!='\0')
++ count;
}
return (count);
}
//...............................number function...........................................................
void number(float num)
{
float num1;
int g,h,i;
char buffer[33];
if(num<0)
{
g=num;
num1=(num-(float)g);
num1=num1*10;
h=num1;
itoa(num,buffer,10);
i= bufferlength(&buffer);
LCDstring(buffer,i);
LCDsendChar('.');
itoa(h,buffer,10);
i= bufferlength(&buffer);
LCDstring(buffer,i);
}
else
{
g=num;
num1=(num-(float)g);
num1=num1*10;
h=num1;
itoa(num,buffer,10);
i= bufferlength(&buffer);
LCDstring(buffer,i);
LCDsendChar('.');
itoa(h,buffer,10);
i= bufferlength(&buffer);
LCDstring(buffer,i);
}//else
}
//.....................................value function......................................................
float value(float n)
{

float r,x,z,t;
x=n;
int a=5,b,c;
t=n*10.0;
c=((int)t/a);
b=((float)(c*a))-t;
r=(float)b;
if(r==0.0)
{
z=x;}
else
{
z=ceil(x);
}
return z;
}

/* }
else
if(X==7)
{
numb1=value(b);
display1(&lkbuffa,&numb1,Y);
number(numb1);
LCDstring("N:",2);
number(lkbuffc2[Y]);
//LCDsendChar(lkbuffat[X]);
//itoa(lkbuffc2[Y],N,10);
//LCDstring(N,1);
PORTC=buffc[Y];
// break;
}*/

Vous aimerez peut-être aussi