Hallo.
Ich arbeite mich gerade durch den Capsense Source Code (PSOC3) durch.
Wenn sich der Wert am Sensor ändert,z.b. durch Temperaturschwankung,
soll eine Referenz(SensorBaseline[]) diese folgen.Eigentlich ganz simple
aber trotzdem verstehe ich den Algorithmus nicht:
UpdateSensorBaseline()
{
uint32 calc;
uint16 RawData;
//new sample
RawData = input;
/* Make full Baseline 23 bits */
calc = (uint32) SensorBaseline[sensor] << 8u;
calc |= (uint32) SensorBaselineLow[sensor];
/* Add Raw Data to Baseline */
calc += RawData;
/* Sub the high Baseline */
calc -= SensorBaseline[sensor];
/* Put Baseline and BaselineLow */
SensorBaseline[sensor] = ((uint16) (calc >> 8u));
SensorBaselineLow[sensor] = ((uint8) calc);
}
//global deklariert:
uint16 SensorBaseline[max_SENSOR];
//used to store fraction byte of baseline value
uint8 SensorBaselineLow[max_SENSOR];
Warum bildet man nicht einfach die Differenz des Sensorwertes und
der Referenz: RawData - SensorBaseline=Diff. Und addiert Diff anschl.
zur Referenz: Diff+SensorBaseline=SensorBaseline.
Mich verwundert auch der Kommentar:
//used to store fraction byte of baseline value
uint8 SensorBaselineLow[max_SENSOR];
Was soll hier ein fraction Byte bedeuten?
Das ist ein IIR-Filter mit y_n+1 = (y_n * 255 + x ) / 256 Wegen der einfacheren Berechnung ist 255 als y_n * 256 - y_n realisiert MfG
Ahh,jetzt machts Sinn. Dankeschön. Aber wie komm ich auf : y_n * 256 - y_n = 255? Und warum gibt es dort ein fraction Byte: SensorBaselineLow?
Christian schrieb: > Ahh,jetzt machts Sinn. Dankeschön. > Aber wie komm ich auf : y_n * 256 - y_n = 255? nicht 255 y_n * 255 ist ersetzt worden durch y_n * 256 - y_n > Und warum gibt es dort ein fraction Byte: SensorBaselineLow? Damit man zwar in ganzen Zahlen rechnen kann aber trotzdem sowas wie "Kommastellen" hat. Du kannst ja auch anstelle von in Euro in Cent rechnen. Anstelle von 3 Euro 80 + 5 Euro 75 3.80 5.75 ------ 9.55 rechnest du einfach 380 575 ---- 955 das heisst dein Ergebnis ist 9 Euro. und die 55 sind das 'Kleingedruckte', die Nachkommastellen. Hier halt nicht dezimal, sondern in Form von 8 Bit
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.