Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 658 → Rev 659

/programy/C/PIC/mereni/inertial/main.c/main.c
0,0 → 1,89
#include "main.h"
 
#define REV "$Rev$"
 
unsigned int32 time; // pocitadlo preteceni casovace
 
#define BUFLEN 100
 
#int_RTCC
void RTCC_isr(void) // preruseni od pretekleho casovace
{
time++;
}
 
// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>
#include <math.h>
 
float quadraticerror(float average, float buf[], int16 size) // compute average quadratic error
{
int16 i;
float err=0;
 
for(i=0; i<size; i++) err += (buf[i]-average)*(buf[i]-average); // sum quadratic errors
err = sqrt((1/(float)size)*err);
return err;
}
 
void main()
{
 
float x[BUFLEN], y[BUFLEN], z[BUFLEN];
float xavg, yavg, zavg;
int i;
port_b_pullups(FALSE);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
setup_adc_ports(AN0_TO_AN2|VSS_VREF);
setup_adc(ADC_CLOCK_DIV_64);
 
usb_init(); // initialise USB module
 
while (TRUE)
{
while(!usb_cdc_connected());
time=0;
set_timer0(0);
printf(usb_cdc_putc,"time[s] X Xerr Y Yerr Z Zerr \n\r");
 
while(usb_cdc_connected()) // pockej nez se pripoji seriovy port PC
{
for(i=0; i <BUFLEN; i++)
{
set_adc_channel(0);
delay_us(10);
x[i]=read_adc();
xavg+=x[i];
set_adc_channel(1);
delay_us(10);
y[i]=read_adc();
yavg+=y[i];
 
set_adc_channel(2);
delay_us(10);
z[i]=read_adc();
zavg+=z[i];
}
xavg=xavg/BUFLEN;
yavg=yavg/BUFLEN;
zavg=zavg/BUFLEN;
 
// odesli namerene hodnoty
printf(usb_cdc_putc, "%7.3f %4.3f %4.3f %4.3f %4.3f %4.3f %4.3f \n\r",((time << 16) + get_timer0())/15625.0, xavg, quadraticerror(xavg,x,BUFLEN), yavg, quadraticerror(yavg,y,BUFLEN), zavg, quadraticerror(zavg,z,BUFLEN)); //konstanta k je kvuli prevodu do rozzumnych jednotek [s]
}
}
}