Multiplexer und Drehpotis: Potis geben nur Werte ab halber Drehung raus...

Hallo geehrte Schwarmintelligenz.

Bauteile: Multiplexer Texas Instrument CD4051B, Teensy 3.2, acht 10Kohm Drehpotis.

Ich denke und hoffe, dass dieses Problem von der Sorte ist, wo ihr sofort das Problem erkennt, da es so easy ist!

Ich habe acht Drehpotis an einen Teensy über einen Multiplexer angeschlossen, so wie es in den Anfängerkursen immer erklärt wird.
Nun werden die Werte der Potis aber erst ab halber Drehstrecke abgefragt. Drehe ich einen Poti die erste Wegstrecke, werden keine Werte ausgegeben, und ab da aber ganz normal ab 0 bis 1023.

Nunja, könnte ein Lötfehler sein, als Laie kann ich aber keine Lötbrücken oder ähnliches messen, ausserdem läuft es soweit ja, ein Lötfehler würde, denke ich, das ganze Programm nicht laufen lassen.

Beim Multiplexer kommen jedenfalls 5 Volt an, was für ihn laut Datenblatt wohl richtig ist.
Die Serials sind sauber verbunden und Vee, Vss und der INH, also der Enable/Disable Anschluss liegen auf Ground auch vernünftig verlötet.

Den Sketch habe ich unkommentiert angefügt, da er sehr einfach ist. Denke eh nicht, dass im Programm der Fehler liegt.

Danke euch vielmals im Voraus...

LG aus DK nach D...

int potiWert[8];
int cWert[8];
int cWertAlt[8];

byte controllerNummer[] = {22,23,24,25,26,27,28,29};

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

int ledPin14 = 14;
int ledPin13 = 13;
const unsigned long leuchtDauer = 100;
unsigned long startZeit;

void setup() {
 pinMode(ledPin13, OUTPUT);  
 pinMode(ledPin14, OUTPUT);
 pinMode(20, OUTPUT);
 pinMode(21, OUTPUT);
 pinMode(22, OUTPUT);
 Serial.begin(31250);
}

void loop () {
  digitalWrite(ledPin13, HIGH);
 for ( byte i = 0 ; i <= 7; i++ ) {

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

  digitalWrite(20, bit1);
  digitalWrite(21, bit2);
  digitalWrite(22, bit3);

  potisAbfragen(i, A5);
 }}

void potisAbfragen(byte zaehler, int analogPin){

  potiWert[zaehler] = (9 * potiWert[zaehler] + 1 * analogRead(analogPin)) / 10;
   cWert[zaehler] = map(potiWert[zaehler],0,1023,127,0);
    if (cWert[zaehler] != cWertAlt[zaehler]) {
     // usbMIDI.sendControlChange(controllerNummer[zaehler],cWert[zaehler],0);
      
  Serial.println(cWert[zaehler]);
  Serial.println(controllerNummer[zaehler]);
  LED1();
   cWertAlt[zaehler] = cWert[zaehler];}
   LED0();
   }

void LED1(){
   digitalWrite(ledPin14, HIGH);  //Eine LED leuchtet, wenn der Poti benutzt wird.
   startZeit = millis(); 
}
void LED0(){
   if (millis() - startZeit >= leuchtDauer) {  // wenn die Leuchtdauer vorbei ist die LED ausschalten
    digitalWrite(ledPin14, LOW);}}

Wie hast Du denn die Drehpotis angeschlossen?

Gruß Tommy

Die Potis sind alle an Plus sowie Minus in Serie gelötet und dann an den selben Anschluss, also Ground und 5V, gelötet am Teensy wie der Multiplexer.
Den Messanschluss (oder wie immer der heisst :wink: ) der Potis an die zugehörigen Stellen des Multiplexers.
Ist ja immer so ein bisschen durcheinander an so nem IC, aber der Screen im Sketchfenster zeigt mit hier, dass alles läuft, bis eben auf das Problem mit den Werten....

AxelMunshine:
Die Potis sind alle an Plus sowie Minus in Serie gelötet und dann an den selben Anschluss, also Ground und 5V, gelötet am Teensy wie der Multiplexer.

Sorry, mal das mal auf (Bleistift genügt). "In Serie" hat in der Elektrotechnik eine konkrete Bedeutung, die Du hoffentlich nicht meinst. Auch der 2. Satzteil ist etwas schwammig für mich. Nur damit wir nicht an einander vorbei reden.

Gruß Tommy

Sorry, aber meine PC-Kenntnisse sind dann nicht soweit, dass ich hier einfach mal ne Bleistiftzeichnung reinstelle, da die Fehlermeldung kommt, das Bild sei zu gross...
Bin halt ein grosser Dummer!

Ich versuche es nochmal: Ich habe die Potis an den Anschlüssen für Ground und V5 so gelötet, das die KAbel von einem Poti zum anderen gehen, und das letzte Poti dann mit einem Kabel an den Teensy gelötet, wo auch die Kabel zum IC abgehen...
Den mittleren Anschluss der Potis dann jeweils an den zugehörigen Port des IC gelötet, also Poti 1 an den Anschluss 0 beim IC usw...

Gruss, Axel...

Ok, so beschrieben klingt es eigentlich irgendwie richtig.

Übrigens kann man ein Bild auch verkleinern. Im Zweifel mit dem Bildbetrachter Irfanview der auch minimale Bearbeitungen kann.

Gruß Tommy

Okay, das ist doch mal ein Tipp, das mit dem Irfanview, werde ich mal austesten...
Wobei das auch wieder heisst, dass ich damit auch mal wieder einige Zeit beschäftigt sein werde... :wink:

Danke für den Tip...

Gruss, Axel Munshine

Das Programm ist fast selbsterklärend. Menüpunkt: Bild -> Größe ändern

Gruß Tommy

Hallo,

Faststone ist besser, sage ich als langer IrfanView Nutzer.

Kannst Du die Spannung am Schleifer eines Poti messen, ob die von 0-5V geht? Und dann am Auisgang des Multiplexers, wenn der fest auf einen Eingang eingestellt ist.

Ich konnte beim Poti messen, und da ist alles, wie es sein soll: 0 - 5V, vom kleinsten bis zum höchsten Drehwert gehen also sie Signale richtig raus...

Aber was meinst du mit dem Ausgang des Multiplexers?
Ich habe da ja nur die drei Select Outs, kann da also nichts einzeln messen...

Aber natürlich vielen Dank, für deine Mühen...

Gruss, Axel

AxelMunshine:
Aber was meinst du mit dem Ausgang des Multiplexers?
Ich habe da ja nur die drei Select Outs, kann da also nichts einzeln messen...

Na der Analogmultiplexer hat doch einen Analogausgang, der zum Analogeingang des MC führt. Er ist ja nur ein Umschalter und misst nicht.

Gruß Tommy

Hi

Der Multiplexer muß doch die x Poti's an den einen Analog-IN schalten.
Du hast Deine Poti-Schleifer an den Pins 1,2,4,5,12,13,14,15.
Per A,B,C wird ausgewählt, welcher Pin mit Pin 3 verbunden wird.

Wenn Du einen festen Kanal einstellst (A,B,C=0, wird dann wohl Channel 0, Pin 13 sein?), kannst Du zwischen dem Pin 13 und dem Pin 3 eine Spannung messen?
Also, fällt an dem Multiplexer eine Spannung ab, Die erst überwunden wird, wenn Du 'auf halbem Drehwinkel' bist?

Hat der Analog-IN einen PullUP und kann man Diesen irrtümlich einschalten?
(wobei dann durchgehend eine zu hohe Spannung 'gesehen' werden müsste)

Ich beziehe mich bei den oberen Pins auf dieses DaBla zum CD4051B

MfG