Hallo, ich spiele momentan mit einem CNY-70 zur optischen Erkennung eines Zählwerks. Die Messung läuft auf den ADC und wird in einer ISR ständig auf eine Variable gelegt. Nun zur eigentlichen Frage... ich habe folgenden Auswertecode und möchte mal jemand mit c-Erfahrung draufschauen lassen, um hier einen grundsätzlichen Fehler auszuschließen. Grund ist, dass ich immer mehr Impulse messe, wie eigentlich da sind. (ja ich weiss, CNY ist nicht der Beste für sowas). Bei meinen Beobachtunen hat der Sensor aber immer die richtige Anzahl Impulse geliefert. hier der code :
1 | uint8_t pu = 0; // Zähler für Stromimpulse |
2 | uint8_t signal = 0; // Signalsteuerung Strom 0= messen AN 1= messen aus |
3 | uint8_t signalg = 0; // Signalsteuerung Gas 0= messen AN 1= messen aus |
4 | |
5 | //Hauptschlfeife
|
6 | // *************
|
7 | |
8 | while(1) |
9 | {
|
10 | |
11 | #if USE_ADC
|
12 | ANALOG_ON; |
13 | |
14 | #if CNY70
|
15 | // Strom
|
16 | if (var_array[4] < var_array[24]) // var4 enthält ADC-Wert CNY-70 Stromzähler, var 24 Schaltschwelle |
17 | {
|
18 | if (signal ==0) // nur Flanke zählen |
19 | {
|
20 | pu++; |
21 | //lcd_print(1,8,"P:%3i",pu);
|
22 | signal = 1; |
23 | }
|
24 | }
|
25 | else signal = 0 ; |
26 | |
27 | if (pu == 75) { // 75 Umdr. sind 1kWh |
28 | var_array[28]++; // var 28 Strom in kWh |
29 | pu = 0; |
30 | }
|
31 | |
32 | // Gas
|
33 | if (var_array[5] > var_array[25]) // var5 enthält ADC-Wert CNY-70 Gaszähler, var 25 Schaltschwelle |
34 | {
|
35 | if (signalg ==0) // nur Flanke zählen |
36 | {
|
37 | var_array[27] = var_array[27] + 10; // Gaszähler Liter |
38 | signalg = 1; |
39 | }
|
40 | }
|
41 | else signalg = 0 ; |
42 | |
43 | if (var_array[27] >= 999) { |
44 | var_array[26]++; // Gaszähler m3 |
45 | var_array[27] = 0; } |
46 | |
47 | #endif //CNY70
|
48 | |
49 | #endif //USE_ADC
|
Danke