Das Programm misst Werte vom ADC, legt über die letzen 64 Werte eine Ausgleichsgerade und misst so die Steigung, die im Ruhszustand (also ADC Werte ändern sich nicht) auf 0 liegen sollte. Allerdings ist diese immer leicht negativ. Die rohen Messwerte und das Ergebniss lasse ich mir auch über den UART ausgeben, berechne auf dem PC (mit genau demselben Code) die Steigung und da bekomme ich die richtigen Werte. Wo steckt also der Fehler ?
Du könntest mal checken, in welchem Wertebereich deine int-Variablen so sein können. Auf einem PC ist int 32 bit breit, auf dem AVR nur 16 bit. Vielleicht läuft da was über.
Wenn ich daran zweifle ruf ich das auf:
1 | printf ("char %d short %d int %d long %d longlong %d |
2 | bit\n", |
3 | 8 * sizeof (char), 8 * sizeof (short), 8 * sizeof (int), |
4 | 8 * sizeof (long), 8 * sizeof (long long)); |
Besser noch:
1 | printf("char %d short %d int %d long %d longlong %d bit\n", |
2 | CHAR_BIT * sizeof (char), |
3 | CHAR_BIT * sizeof (short), |
4 | CHAR_BIT * sizeof (int), |
5 | CHAR_BIT * sizeof (long), |
6 | CHAR_BIT * sizeof (long long)); |
Es soll ja auch Plattformen geben, auf denen ein Byte nicht 8 bit breit ist.
Ich habe noch ein paar signed/long Cast Kombinationen ausprobiert, und jetzt läuft es. Zusätzlich hat noch ein Interrupt mit nichtgesicherten Registern die Ergebnisse ab und zu versaut..
@Rolf: Im Prinzip korrekt so, aber welche noch existierende Plattform hat Bytes <> 8-Bit (und wird in C programmiert)? Die letzten, von denen ich mal gehört habe, stammen aus den frühen 70ern.
Hi bei einigen DSP (TI, Analog) ist das wohl üblich das sizeof(char) == sizeof(short) == sizeof(int) und CHAR_BITS != 8 hatt man mir zumindest mal erzählt. Selber hatte ich meine Finger noch nicht an so einem Teil. Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.