Fehlerkorrektur beim ADC auslesen...
Hallo Liebe Leut, ich habe einen PI und dazu einen pcf8591 um Analoge
werte auszulesen...
jetzt ist es so, dass ich relativ schnell (alle 300ms) die Werte
auslese. Diese kommen auch "zumeist" Korrekt an! Doch leider übernimmt
er gelegentlich einen "anderen" ADC wert...
z.B.
A0 = 0
A1 = 120
A2 = 57
A4 = 255
jetzt lese ich die ganze Zeit wie werte ein... hin und wieder Springt
der A2 dann z.B. auf 0...
wie bewerkstellige ich hier am besten eine "Fehlerkorrektur", meine Idee
war es beim einlesen eine "MAXIMALDIFFERENZ" zu definieren... und wenn
diese überschritten wird, soll diese Ignoriert werden.
Die Weiterverarbeitung bewerkstellige ich in Javascript...
=> die werte "Langsamer" auszulesen sorgt zwar dafür dass etwas weniger
Fehler kommen, aber auch da habe ich irgendwann mal genau diesen Fehler.
Man könnte fast meinen der kommt alle X mal auslesen. Evtl. kann auch
jemand den Fehler im "Code" erkennen...
hier das C-Script.
1 | #include <wiringPi.h>
|
2 | #include <stdlib.h>
|
3 | #include <unistd.h>
|
4 | #include <stdio.h>
|
5 | #include <pcf8591.h>
|
6 |
|
7 | #define PINBASE 100
|
8 |
|
9 | /*
|
10 | cc -o test2 test2.c -lwiringPi
|
11 | */
|
12 |
|
13 | int main (void)
|
14 | {
|
15 | int i;
|
16 | int adc0;
|
17 | int adc1;
|
18 | int adc2;
|
19 | int adc3;
|
20 |
|
21 | if (pcf8591Setup(PINBASE, 0x48) < 0)
|
22 | {
|
23 | printf("pcf8591Setup failed:\n");
|
24 | }
|
25 |
|
26 | adc0 = analogRead(PINBASE + 0);
|
27 | adc1 = analogRead(PINBASE + 1);
|
28 | adc2 = analogRead(PINBASE + 2);
|
29 | adc3 = analogRead(PINBASE + 3);
|
30 | printf("[%d,%d,%d,%d]\n",adc0,adc1,adc2,adc3);
|
31 | }
|