Hallo Zusammen,
kann mir jemand auf die Sprünge helfen was ich hier falsch mache:
1 unsigned int cell_voltage [ 2 ][ 26 ] = {{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }};
2 unsigned long cell_current [ 2 ][ 6 ] = {{ 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 }};
3
4
5
6 cell_current [ j ][ 0 ] = ADC_Read ( j + 2 );
7 cell_current [ j ][ 1 ] = ADC_Read ( j + 2 );
8 cell_current [ j ][ 2 ] = ADC_Read ( j + 2 );
9 cell_current [ j ][ 3 ] = ADC_Read ( j + 2 );
10 cell_current [ j ][ 4 ] = ADC_Read ( j + 2 );
11
12 cell_current [ j ][ 5 ] = cell_current [ j ][ 0 ] + cell_current [ j ][ 1 ] + cell_current [ j ][ 2 ] + cell_current [ j ][ 3 ] + cell_current [ j ][ 4 ];
13 cell_current [ j ][ 5 ] = ( cell_current [ j ][ 5 ] / 4 ) & 0xFFFF ;
14
15 cell_voltage [ j ][ 24 ] = cell_current [ j ][ 5 ] & 0xFF ; //Module current lowbyte
16 cell_voltage [ j ][ 25 ] = ( cell_current [ j ][ 5 ] >> 8 ) & 0xFF ; //Module current highbyte
Eigentlich sollte ich in cell_voltage[j][24-25] einen digitalen Rohwert
um die 2050 bekommen, es kommen aber ca. 2560 raus. So schwer kann das
doch nicht sein :/ ?
VG und Danke!
von
Stefan (Gast)
02.05.2016 11:08
Teil durch 5 wenn du schon 5 Werte summierst
von
Cube_S (Gast)
02.05.2016 11:08
Nicht durch 4 sondern durch 5 teilen?
Falls cell_voltage und cell_current static storage duration haben sind
die Initialiser dort überflüssig. andernfalls würde ich memset
verwenden. 1 unsigned int cell_voltage [ 2 ][ 26 ];
2 memset ( cell_voltage , 0 , sizeof ( cell_voltage ) );
von
Marcel P. (Gast)
02.05.2016 12:29
Noch als Tipp. ich habe so etwas ähnliches mal gemacht. hab das
folgendermassen gelösst:
1 #define N_SAMPLES 5 // geht natürlich auch mit einer Variable...
2
3 unsigned int cell_voltage [ 2 ][ 26 ] = {{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }};
4 unsigned long cell_current [ 2 ] = { 0 , 0 };
5
6 for ( int i = 0 ; i < N_SAMPLES ; i ++ ) {
7 cell_current [ j ] += ADC_Read ( j + 2 );
8 }
9
10 cell_current [ j ] = ( cell_current [ j ] / N_SAMPLES ) & 0xFFFF ;
11
12 cell_voltage [ j ][ 24 ] = cell_current [ j ] & 0xFF ; //Module current lowbyte
13 cell_voltage [ j ][ 25 ] = ( cell_current [ j ] >> 8 ) & 0xFF ; //Module current highbyte
Dabei muss beachtet werden, das die Variable cell_current so gross ist,
das sie die Summe natürlich aufnehmen kann (stichwort int16, int32, etc)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.