Pages: [1]   Go Down
Author Topic: Probleme mit dem Zählen von Impulsen  (Read 1187 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 1
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

ich habe hier einen Abtastkopf an meinem Gaszähler hängen und versuche die Impulse zu zählen. Der Zähler arbeitet mit einem Magneten an der Walze und bei jeder Umdrehung wird im Abtastkopf ein Reed-Relais geschlossen und anschliessen wieder geöffnet. Ich habe dafür einen Jeenode Arduino Controller verwendet, der daran angeschlossen.
Das eigentliche Zählen sieht wie folgt aus:

Port connector(1);

static unsigned long last;

int gescount,bettersend = 0;

MilliTimer countsend1;
 
void setup () {


    
    connector.mode2(INPUT); // Set AIO mode as input
    connector.digiWrite2(0); // Activate pull-up resistor for

last = millis();
}
 
void loop () {
 

   static boolean ledOn = false;

 if (countsend1.poll(1000)) {
  bettersend=0;
  
}

int pushed = connector.digiRead2();
 


    if (!ledOn && pushed == 0) {
        ledOn = true;
        
    } else if (ledOn && pushed == 1 && bettersend == 0) {
        ledOn = false;
 
    gescount +=1;

    

     bettersend=1;
    }

 
}

Es handelt sich hierbei um eine verkürzt Version des Quellcodes der nur den wichtigen Teil des Zählens enthält.

Mein eigentlicher Gedanke ist nun das er nur nach eine steigenden Flanke und einer fallenden Flanke das ganze als Umlaufen zählt.
Außerdem soll durch "bettersend" eine 1 Sekunden Sperre eingestellt werden, damit er nur jede Sekunde maximal einen Impuls zählt. Das ganze klappt aber nicht und ich habe immer zuviele Impulse gezählt. Wenn ich das ganze händisch mit einem Magneten teste, finde ich keinen Fehler aber bei richtigen Test am Gaszähler habe müsste ich zum Beispiel 323 Impulse drauf haben, habe aber 510 gezählt. Eine direkte ungenauigkeit ist für mich nicht zu erkennen? Ich zähle also aus irgendeinem Grund nicht immer richtig.

Kann mir bitte jemand helfen, wie ich das richtig mache, mit dem Zählen.

Vielen Dank.

Gruß kami
Logged

Stuttgart
Offline Offline
God Member
*****
Karma: 13
Posts: 511
logic enrichments
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn ich ganz ehrlich bin, steige ich bei deinem Code nicht durch. Bin eh nicht so der Softwarecrack. Aber ich befürchte mal ganz vorsichtig, daß du das Entprellen nicht sauber gelöst hast.

Lass mal die Sicherheitsgeschichte (ich denke bettersend) weg und mach einen kleinen Kondensator parallel zum Reedrelais. Poste dann deine Erfahrungen hier oder zeige die verwendete Schaltung auf.
« Last Edit: December 29, 2010, 04:04:13 pm by Realizer » Logged

Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

0
Offline Offline
Newbie
*
Karma: 1
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

okay ich habe jetzt mal mit der Software des Controllers versucht eine Entprellung zu schaffen. Zurzeit habe ich den  Schalter wie hier bei dem Phototransitor zu sehen angeschlossen.

http://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor#Phototransistor

Wie sollte ich das entprellen mit HArdware richtig lösen? Kondensator parallel dazu schalten? Wenn ja wie groß?


Gruß kami
Logged

Oldenburg
Offline Offline
Sr. Member
****
Karma: 16
Posts: 270
Arduino, imagine the possibilities!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

der folgende Code ist ungetestet und nicht sehr elegant.

Quote
#define reedPin 2

int zaehler;

void setup(){
  pinMode (reedPin,INPUT);
  digitalWrite (reedPin,HIGH);
}

void loop(){
  if (digitalRead(reedPin)==HIGH){
    delay(2);
    zaehler++;
    while(digitalRead(reedPin)==HIGH){
    }
    delay(2);
  }
}


Gruß

Sebastian
Logged

Libraries:
  - multiCameraIrControl [V1.6]
  -

Stuttgart
Offline Offline
God Member
*****
Karma: 13
Posts: 511
logic enrichments
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das mit dem HW-Entprellen ist so ne Sache... 0,1 uF würde ich mal testen. Sicher bist du mit einer Softwarelösung in dem Fall besser bedient. Ich habs auch nur deswegen geschrieben, damit man die Falschzählungen wegen dem Prellen ausschließen kann (oder zumindest eingrenzen).

Bezieht sich auch am ehesten auf Reedrelais oder irgendwelche mechanischen Taster.
« Last Edit: December 30, 2010, 03:16:35 pm by Realizer » Logged

Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1128
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kondensatoren sind dabei keine so eine schöne Lösung ich würde mit
http://arduino.cc/en/Reference/AttachInterrupt aus dem "Fundus" arbeiten.
Du kannst dann in der ausgeführten Funktion ein Bit setzten oder dirket Zählen und ein Bit zum "sperren" setzten für 10-30ms und dann somit "Blind" sein für das Prellen auch nichtr .
Der Vorteil an den Interrputs ist der das du wahlweise auf Wechseln des Zustandes oder auf die Steigende oder Fallende Flanke reagieren kannst.
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Pages: [1]   Go Up
Jump to: