HC4051 schwankende Werte.

Einen wunderschoenen!

Ich habe folgendes Problem. Ich lese ueber eine Anlogen Eingang die Acht Werte des 4051 ein diese Werte schwanken aber kontinuirlich. Wie kann ich das beheben?

Ich moechte an dem 4051 gerne 8 Hallsensoren des Typs A3144 auslesen. Mir wuerde auch nur ein An/Aus reichen.

An dem 4051 habe ich eine 100nF zwischen VDD und GND. Die in meinem Versuchsaufbau unbenutzten Pins habe ich ueber eine 10k Widerstand an GND.

Vielen Dank im vorraus!

int potiWert = 0;
int zaehler = 0;

int bit1 = 0;
int bit2 = 0;
int bit3 = 0;

void setup() {
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 Serial.begin(9600);
}

void loop () {
 for ( zaehler = 0 ; zaehler <= 7; zaehler++ ) {

  bit1 = bitRead(zaehler, 0);
  bit2 = bitRead(zaehler, 1);
  bit3 = bitRead(zaehler, 2);

  digitalWrite(2, bit1);
  digitalWrite(3, bit2);
  digitalWrite(4, bit3);

  potiWert = analogRead(A0);
  //potiWert = digitalRead(7);
 
  Serial.print(potiWert);
  Serial.print("\t");
 } 
 Serial.println("");
 delay (100); 
}

Werden die Meßergebnisse besser wenn Du den analogwert 2 mal ausliest und den zweiten Wert nimmst?
Grüße Uwe

petemanzel:
... 4051 ...

Was ist das? Hast Du einen Link auf ein Datenblatt?

Gruß

Gregor

74HC4051. 8-Bit Analogmultiplexer

uwefed:
Werden die Meßergebnisse besser wenn Du den analogwert 2 mal ausliest und den zweiten Wert nimmst?
Grüße Uwe

Wie meinst Du das?

Ich sehe die Werte im Serial Monitor. Hinzu kommt, wenn ich einen Hallsensor aktiviere aendert sich der gemessene Wert auch am naechsten Eingang (aber nur geringfuegig).

Ich bekomme auch keine Werte um 1000 bei inaktivem Hallsensor sondern eher um 300!

Offene Nachbar-Pins können das verursachen. Aber das hast du schon erkannt. Wobei der 10k Widerstand überflüssig ist. Die können direkt auf Masse.

Den Wiederstand habe ich jetzt entfernt und jetzt habe ich an den unbenutzten Pins auch durchgehend 0. Die anderen Pins spielen aber immer noch verrueckt!

Hallo,

ohne Schaltplan kann ich mir die Schaltung nur mit Hilfe der trüben Glaskugel im Geiste zusammenreimen.

Die Hallsensoren A3144 haben binäre Open Kollektor Schaltausgänge.

Wenn man die messen will, muss man den Z-Pin des 4051 entweder an einen Digitaleingang des Arduinos schalten bei dem der Pullup-Widerstand zugeschaltet ist, oder wenn es denn unbedingt ein Analogeingang sein soll dann braucht der einen externen Pullup-Widerstand von 4,7 - 10K Ohm.

Gruß
Peter

Ah ja, das hätte ich mir mal ansehen sollen. Das sind einfache digitale Schalter. Wieso willst du da also analog messen? Wenn du an einem OC Ausgang ohne Pullup mit dem ADC misst ist es kein Wunder dass da willkürlicher Unsinn rauskommt.

Hallo und vielen Dank!

Ich moechte ja gar nicht messen. Ich hatte ja bereits geschrieben, dass An/Aus reicht. Ich hatte auch den Z-Pin vom 4051 an digitalpin 7 vom Arduino. Hat aber auch nicht funktioniert.

Hast du INPUT_PULLUP aktiviert oder einen externen Pullup Widerstand verbaut?

Serenifly:
Hast du INPUT_PULLUP aktiviert oder einen externen Pullup Widerstand verbaut?

Hab das ganze jetzt so geaendert:

int sensorState = 7;
int zaehler = 0;

int bit1 = 0;
int bit2 = 0;
int bit3 = 0;

void setup() {
 pinMode(sensorState,INPUT_PULLUP );
  
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 Serial.begin(9600);
}

void loop () {
 for ( zaehler = 0 ; zaehler <= 7; zaehler++ ) {

  bit1 = bitRead(zaehler, 0);
  bit2 = bitRead(zaehler, 1);
  bit3 = bitRead(zaehler, 2);

  digitalWrite(2, bit1);
  digitalWrite(3, bit2);
  digitalWrite(4, bit3);

  sensorState = digitalRead(7);
    
  Serial.print(sensorState);
  Serial.print("\t");
 } 
 Serial.println("");
 //delay (100); 
}

Die Eingaenge stehen jetzt aber immer auf HIGH (1)!

Schaltplan zeigen und Bild vom Aufbau - das hilft!

Es gibt in Fritzing keinen A3144 also habe ich ein anderes Bauteil verwendet. Dient nur zur Veranschaulichung!