#include #include #include #include"altera_avalon_pio_regs.h" #include int main() { int x[1503]; int y[1503]; int yinter[6001]; int yreal[6001]; int vmax; int vmin; int midv; int firstmid,secondmid; int i,j,k,l,m,z=0; int distance; int singlewave[6001]; int startpoint; int ydraw[6001]; int ydraw[6001]; int divider; int dcvalue; while(1) { if(IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_ACDC_0_BASE)==0) { divider=IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_DIVIDER_0_BASE); if(IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_SWITCH_0_BASE)==1) { /////////////////////////////generate x////////////////////////////////////// for(i=0;i<=255;i++) { x[i]=i*divider; printf("\nx=%d\t%d",i,x[i]); } /////////////////////////////generate y///////////////////////////////////// while(z<=1023) { y[z]=(50*sin((0.05*x[z]+1))+127; z++; y[z]=100; y[z]=(50*sin((0.05*x[z]+1))+127; if(IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_CS_0_BASE)==0 && IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_DIN_0_BASE)==1) { y[z]=IORD_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INPUT_0_BASE); z++; } } z=0; //////////////////////////////////lagrange interpolation method//////////////// for(i=0;i<=255;i++) { printf("\n=%d\ty=%d",i,y[i]); }z=0; for(i=0;i<=1000;i++) { j=i/divider; yinter[i]= 1023-(y[j+0]*(i-x[j+1])/(x[j+0]-x[j+1])*(i-x[j+2])/(x[j+0]-x[j+2])//*(i-x[j+3])/(x[j+0]-x[j+3]) +y[j+1]*(i-x[j+0])/(x[j+1]-x[j+0])*(i-x[j+2])/(x[j+1]-x[j+2]//*(i-x[j+3])/(x[j+1]-x[j+3]) +y[j+2]*(i-x[j+0])/(x[j+2]-x[j+0])*(i-x[j+1])/(x[j+2]-x[j+1]//*(i-x[j+3])/(x[j+2]-x[j+3]) +y[j+3]*(i-x[j+0])/(x[j+3]-x[j+0])*(i-x[j+1])/(x[j+3]-x[j+1]//*(i-x[j+2])/(x[j+3]-x[j+2]))); yreal[i]=1023-yinter[i]; printf("\n%d\t%d",i,yreal[i]); } /////////////////////////////finding vmax and vmin////////////////////////// vmax=0; vmin=1023; for(i=0;i<=1000;i++) { if(yreal[i]vmax) { vmax=yreal[i]; } } printf("\n=%d\t%d",vmax,vmin); ////////////////////////////mid point of sinewave/////////////////////////// midv=(vmax_vmin)/2; printf("\n%d,midv); ///////////////////////////location of 1st mid///////////////////////////// for(i=0;i<=1001;i++) { if((yreal[i]=midv) { firstmid=k; printf("\nfirstmid=%d",firstmid); break; } } /////////////////////////location of 2nd mid////////////////////////////////// for(l=k;l<=1001;l++) { if((yreal[l]>yreal[1+1])) { if(yreal[l]<=midv) { printf("\n%d,l); break } } } for(m=1;m<=1001;m++) { if(yreal[m]<=midv) { secondmid=m; print("\nsecondmid%d",secondmid); break; } } ////////////////////freq (if distance = 0), only for DC////////////////////// distance=(secondmid-firstmid)*2; printf("\ndistance=%d",distance); ////////////////////generate sinewave////////////////////////////////////// for(i=firstmid;i<=(distance+firstmid);i++) { singlewave[i]=yreal[i]; printf("\n%d\tsinglewave=%d",i,singlewave[i]); ///////////////////find start point///////////////////////////////////// if(distance<300) { startpoint=300%distance; printf("\n%d",startpoint); } else if(distance>300) { startpoint=distance-300; printf("\n%d",startpoint); } ///////////////////////////generate 600 data/////////////////////////////// for(i=0;i<=600;i++) { ydraw[i]=yreal[startpoint+i]; printf("\n%d",ydraw[i]); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,i); IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,ydraw[i]); } IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,600) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,vmin/51); printf("\n%d\t%d",vmax,vmax/51); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,601) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,((vmin%51)*10/51); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,602) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,(((vmin%51)*100/51)-(((vmin%51)*100/51)/10*10))); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,603) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,vmax/51); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,604) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,((vmax%51)*10/51); IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,605) IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,(((vmax%51)*100/51)-(((vmax%51)*100/51)/10*10))); } } else if(IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_ACDC_0_BASE)==1) { if(IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_CS_0_BASE)==1) { dcvalue=IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INPUT_0_BASE); for(i=0;i<=599;i++) { IOWR_ALTERA_AVALON_PIO_DATA(OUT_PORT_FROM_THE_COUNTER_0_BASE,i); IOWR_ALTERA_AVALON_PIO_DATA(IN_PORT_TO_THE_INTERPOLATION_0_BASE,dcvalue); } } } } return 0;