1500 |
kaklik |
1 |
#include "main.h" |
|
|
2 |
|
|
|
3 |
#define REV "$Rev$" |
|
|
4 |
|
|
|
5 |
unsigned int32 time; // pocitadlo preteceni casovace |
|
|
6 |
|
|
|
7 |
#define BUFLEN 100 |
|
|
8 |
|
|
|
9 |
#int_RTCC |
|
|
10 |
void RTCC_isr(void) // preruseni od pretekleho casovace |
|
|
11 |
{ |
|
|
12 |
time++; |
|
|
13 |
} |
|
|
14 |
|
|
|
15 |
// Includes all USB code and interrupts, as well as the CDC API |
|
|
16 |
#include <usb_cdc.h> |
|
|
17 |
#include <math.h> |
|
|
18 |
|
|
|
19 |
float quadraticerror(float average, float buf[], int16 size) // compute average quadratic error |
|
|
20 |
{ |
|
|
21 |
int16 i; |
|
|
22 |
float err=0; |
|
|
23 |
|
|
|
24 |
for(i=0; i<size; i++) err += (buf[i]-average)*(buf[i]-average); // sum quadratic errors |
|
|
25 |
err = sqrt((1/(float)size)*err); |
|
|
26 |
return err; |
|
|
27 |
} |
|
|
28 |
|
|
|
29 |
void main() |
|
|
30 |
{ |
|
|
31 |
|
|
|
32 |
float x[BUFLEN], y[BUFLEN], z[BUFLEN]; |
|
|
33 |
float xavg, yavg, zavg; |
|
|
34 |
int i; |
|
|
35 |
port_b_pullups(FALSE); |
|
|
36 |
setup_psp(PSP_DISABLED); |
|
|
37 |
setup_spi(SPI_SS_DISABLED); |
|
|
38 |
setup_wdt(WDT_OFF); |
|
|
39 |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); |
|
|
40 |
setup_timer_1(T1_DISABLED); |
|
|
41 |
setup_timer_2(T2_DISABLED,0,1); |
|
|
42 |
setup_timer_3(T3_DISABLED|T3_DIV_BY_1); |
|
|
43 |
setup_comparator(NC_NC_NC_NC); |
|
|
44 |
setup_vref(FALSE); |
|
|
45 |
enable_interrupts(INT_TIMER0); |
|
|
46 |
enable_interrupts(GLOBAL); |
|
|
47 |
|
|
|
48 |
setup_adc_ports(AN0_TO_AN2|VSS_VREF); |
|
|
49 |
setup_adc(ADC_CLOCK_DIV_64); |
|
|
50 |
|
|
|
51 |
usb_init(); // initialise USB module |
|
|
52 |
|
|
|
53 |
while (TRUE) |
|
|
54 |
{ |
|
|
55 |
|
|
|
56 |
while(!usb_cdc_connected()); |
|
|
57 |
time=0; |
|
|
58 |
set_timer0(0); |
|
|
59 |
printf(usb_cdc_putc,"time[s] X Xerr Y Yerr Z Zerr \n\r"); |
|
|
60 |
|
|
|
61 |
while(usb_cdc_connected()) // pockej nez se pripoji seriovy port PC |
|
|
62 |
{ |
|
|
63 |
for(i=0; i <BUFLEN; i++) |
|
|
64 |
{ |
|
|
65 |
set_adc_channel(0); |
|
|
66 |
delay_us(10); |
|
|
67 |
x[i]=read_adc(); |
|
|
68 |
xavg+=x[i]; |
|
|
69 |
|
|
|
70 |
set_adc_channel(1); |
|
|
71 |
delay_us(10); |
|
|
72 |
y[i]=read_adc(); |
|
|
73 |
yavg+=y[i]; |
|
|
74 |
|
|
|
75 |
set_adc_channel(2); |
|
|
76 |
delay_us(10); |
|
|
77 |
z[i]=read_adc(); |
|
|
78 |
zavg+=z[i]; |
|
|
79 |
} |
|
|
80 |
|
|
|
81 |
xavg=xavg/BUFLEN; |
|
|
82 |
yavg=yavg/BUFLEN; |
|
|
83 |
zavg=zavg/BUFLEN; |
|
|
84 |
|
|
|
85 |
// odesli namerene hodnoty |
|
|
86 |
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] |
|
|
87 |
} |
|
|
88 |
} |
|
|
89 |
} |