Hallo Leute, ich bin seit ein paar Stunden am rumtüfteln, aber ich komm auf keinen grünen Zweig. Hintergrund: Ein DC-Motor (inkl. Encoder) wird mit einer konstanten Drehzahl gesteuert und es wird die Zeit zwischen zwei auftretenden Flanken bestimmt. Der Zyklus wird i mal durchlaufen und es soll nacheinander die Differenz der beiden Zeitwerte (int) in ein zweidimensionales Array FELD geschrieben werden und später via UART an den PC geschickt werden. Wenn ich das ganze mit nur einem Prüfzyklus probieren und somit nur ein eindimensionales Array habe, dann klappt das wunderbar. Sobald ich aber ein mehrdimensionales Array verwende spuckt er mir am Terminalprogramm nur "Schrott" raus. Das zweidimensionale Array habe ich mal mit von der Größe her so angenommen, damit es fürs erste von der Größe her passt. Mein Codeausschnitt:
1 | ...
|
2 | int Feld [2][2000] = {0}; |
3 | |
4 | for (int i=0;i<Anzahl;i++) |
5 | {
|
6 | OCR1AL = n_soll[i]; // Motor ansteuern |
7 | RESET_T4(); |
8 | RESET_T5(); |
9 | RESET_T3(); |
10 | k=0; // Laufindex zum Beschreiben der Drehzahldaten |
11 | |
12 | |
13 | while (counter4_OVERFLOW < Zeit[i]*5) // Zeitdauer Zeit[i] des i-ten Prüfzykluses |
14 | {
|
15 | |
16 | if(counter5_OVERFLOW >= 2) // alle 20ms |
17 | {
|
18 | diff_time = (counter2 - counter1); |
19 | Feld[i][k] = diff_time; // Ablegen der Zeitdifferenz im Drehzahlarray Feld |
20 | k++; |
21 | counter5_OVERFLOW = 0; |
22 | }
|
23 | |
24 | }
|
25 | y_dat[i] = k; // Anzahl der vorhandenen Drehzahl des i-ten Prüfzykluses in y_dat ablegen |
26 | |
27 | }
|
28 | |
29 | OCR1AL = 0; // Abbremsen des Motors |
30 | |
31 | int gogo = Feld[0][0]; |
32 | |
33 | uart_puts( "N\n" ); |
34 | char buffer1 [20]; |
35 | itoa(gogo,buffer1, 10); |
36 | uart_puts(buffer1); |
37 | uart_puts( "\n" ); |
38 | |
39 | ...
|
40 | |
41 | ISR(TIMER4_COMPA_vect) // Overflows Zeitdauer |
42 | {
|
43 | counter4_OVERFLOW++; |
44 | }
|
45 | |
46 | ISR(TIMER5_COMPA_vect) // Overflows Regelung |
47 | {
|
48 | counter5_OVERFLOW++; |
49 | }
|
50 | |
51 | ISR(INT0_vect) // Impulse zum detektieren der Zeitabschnitte |
52 | {
|
53 | counter1=counter2; |
54 | counter2=TCNT3; |
55 | }
|
Bitte um Hilfe.