Hi zusammen,
also ich hab zwei kleine Problemchen im Programm, die ich noch beheben
muss.
Auf die Lösung komm ich irgendwie nicht, vielleicht weiß einer ja Rat.
1 | unsigned int Drehz_setzen(unsigned int Soll_dr)
|
2 | {
|
3 | unsigned int a = 0;
|
4 | a = (Soll_dr/15)*2;
|
5 | Hexwert = MIN + a; // MIN+Soll_dr*7,5
|
6 |
|
7 | if (Hexwert > MAX) // Begrenzung auf den max. Registerwert
|
8 | {
|
9 | Hexwert = MAX;
|
10 | }
|
11 |
|
12 | return Hexwert;
|
13 | }
|
MIN = 65135, MAX = 65535
Nach dem Kompillieren von diesem Code, bekomme ich eine Warnung : Value
truncated. Ich bin aber der Meinung, dass alles passt, ich überschreite
den Wertebereich doch gar nicht, die Soll_dr kann maximal 3000 sein.
Die zweite Sache: ich bestimme die Drehzahl aus Encoderimpulsen. Der
Code dafür:
1 | unsigned long int Drehzahl(void)
|
2 | {
|
3 | unsigned long int Drehz =0;
|
4 |
|
5 |
|
6 | if (CC1_CC9 < CC9alt)
|
7 | {
|
8 | Counter_dif = 0-(CC1_CC9-CC9alt);
|
9 | }
|
10 | else
|
11 | {
|
12 | Counter_dif = CC1_CC9-CC9alt;
|
13 | }
|
14 | CC9alt = CC1_CC9;
|
15 | Drehz = 1200000L/(int)Counter_dif; // Drehzahl in Umdrehungen pro Minute
|
16 |
|
17 |
|
18 | return Drehz;
|
19 | }
|
Die ermittelte Drehzahl stimmt fast immer (ist mit einem Drehzahlmesser
überprüft), allerdings bekomme ich manchmal noch so komische Drehzahlen
von 4294967175....ich geh davon aus, dass die Berechnung in manchen
Fällen ne negative Zahl ergibt. Dachte aber, dass ich diesen Fall mit
der if-Verzweigung abgefangen habe.