Eingangspegel eines Impulses (zum Teil) im undefinierten Bereich

Hallo allerseits!

Ich möchte mit einem Arduino Mega incl. TFT-Touchscreen einen Impulszähler basteln. Dieser soll Impulse eines Durchflussmessers (Open-Collector-Schaltung; magnetisch induktiv; [u]klick' mich für mehr Infos[/u]) via Digital-Input zählen und mir aller 1 Sekunde die n Impulse durch (millis()%1000) teilen und anzeigen.

In der Theorie auf dem Steckbrett funktioniert alles wunderbar, jedoch am Durchflussmesser nicht. Eine Untersuchung mit einem Oszi ergab, dass der LOW-Pegel des Durchflussmessers bei ~3,4 V liegt, der HIGH-Pegel an der Betriebsspannung (hier 5 V). Nun habe ich das Problem dass der Interrupt weder bei RISING, FALLING, LOW noch bei CHANGE auslöst, gerade weil das LOW des Durchflussmessers nicht LOW genug für den Arduino ist.

Da ich in Elektronik noch relativ neu bin: Wie muss ich an das Problem herangehen? Einen Analog-Eingang würde ich nur ungern nehmen wollen.

Wie gross hast Du denn Deinen Pull-Up gewählt? Ein LOW bei 3V4 scheint mit etwas gar neben den Gleisen.

Ich habe mich an den vom Hersteller Vorgeschlagenen von 2,2k gehalten. Ich habe ihn versuchsweise etwas erhöht, aber damit manipuliere ich ja nur den HIGH-Pegel.

Das Problem an sich hat sich jetzt geklärt; habe bauartgleichen Messer genommen, LOW bei 0V, HIGH bei Betriebsspannung. Der Messer scheint wohl mal ohne einen Pull-Up angeschlossen worden zu sein.

Aber die Frage an sich ist trotzdem interessant... Wie könnte man eingehende Pegel manipulieren um sie für einen Digital-Eingang besser lesbar zu machen?

Aber die Frage an sich ist trotzdem interessant... Wie könnte man eingehende Pegel manipulieren um sie für einen Digital-Eingang besser lesbar zu machen?

Mit einem Operationsverstärker in Komparatorschaltung oder besser als Komparator mit Hysterese.
Grüße Uwe

GOOGLE MAL nach Schmitt-Trigger

circuit99:
GOOGLE MAL nach Schmitt-Trigger

TTL Schmitttrigger haben fixe Schaltpegel. Du mußt den Schmitttrigger mit einem Operationsverstärker bauen.
Grüße Uwe

Hallo @pxlbrnd,

ich kann es mir nicht vorstellen, dass das nicht funktioniert. Der Hersteller gibt einen Wert von 1-2,2k an, aber dies muss ja nicht der Wert bei 5V sein. Normalerweise schaltet der Hallsensor sauber durch und zieht das Signal nach 0V. Es sei denn, du hast tatsächlich einen "falschen" Widerstandswert eingesetzt. Ich würde diesen sogar als Versuch verdoppeln. Ich schätze das dein Widerstand zu klein bemessen ist (nach dem Motto: wer viel misst, misst Mist) :-))
Einen OP oder Sonstiges wirst du nicht brauchen.

Gruß Gerd

Hallo pxlbrnd,

Ich stehe gerade vor einem ähnlichen Problem. Hättest du die Möglichkeit deinen Sketch zu sharen? Ich würde gerne den BIOTech DFM-Opto Typ 01 Gase 1-30l/min einsetzen.
Schöne Grüße!

@COOL:
Es funktioniert ja jetzt. :slight_smile:
Der Durchflussmesser hat wohl was abbekommen. Bei einem anderen gleicher Bauart funktioniert alles prima.

@aegidos
Ich weiß leider nicht ob man den Code auch bei deinem Sensor einsetzen kann.

unsigned long Pulszaehler = 0;
unsigned long Pulszaehlergesamt = 0;
const int SignalPin = 21;
void PRINT() {
  Serial.print("Durchflussmenge [l/h]:\t");
  Serial.print((Pulszaehler)*3.60); // 1 Impuls pro ml pro Sekunde; 3.6 ml/s = 1 l/h
  Serial.print("\t\tGesamtzahl Impulse bisher:\t\t");
  Serial.println(Pulszaehlergesamt);
  Serial.print("Laufzeit [h:m:s]:\t\t\t"); // ab hier fancy Laufzeit anzeigen
  Serial.print(millis()/3600000); 
  Serial.print(":"); 
  Serial.print((millis()/60000)%60); 
  Serial.print(":");  
  Serial.print((millis()/1000)%60);
 }
   
void setup(void) {
  Serial.begin(115200);
  attachInterrupt(2, PULS, CHANGE); //Interrupt-Pin2 = Pin21 auf Arduino Mega
  pinMode(SignalPin,INPUT);
}

void loop(void) {
  if (millis()%1000 == 0){ 
  PRINT(); 
  Pulszaehler=0;
  }
}
 
void PULS(){
  if(digitalRead(SignalPin) == HIGH){
  Pulszaehler++;
  Pulszaehlergesamt++;
  }
}

(den TFT-Code habe ich mal weggeschnitten; den kann ich dir bei Bedarf schicken.)