Arduino Mega mit Multiplexer verbinden

Hallo,

ich wollte hier mal fragen ob sich jemand mit dem Multiplexer "ADG406BNZ" auskennt und wie man diesen an den Arduino Mega 2560 verbindet.

Ziel ist das ansteuern bzw. freigeben einzelner MISO Pins.
Wie verbinde ich diese? Wie verbinde ich den Multiplexer mit dem Arduino, welche Pins beim Arduino?
Wie kontrolliere ich die genaue Abfrage jedes einzelnen MISO Anschluss?

Wie wähle ich aus ob In oder Output beim Multiplexer?
Gibt es hier vielleicht eine Anleitung von Arduino?

Bisher habe ich in diesem bereich noch nicht viel gefunden.

Datenblatt: https://www.mouser.de/datasheet/2/609/ADG406_407_426-1502903.pdf

MFG

Orste

Wofür willst Du MISO-Pins einzeln freigeben? SPI ist ein Bus, dessen Funktionsweise Du anscheinend noch nicht verstanden hast.

Gruß Tommy

Hallo,

ich habe den Zusammenhang nicht verstanden. Mit dem Teil kannst Du mehrere analoge Spannungen umschalten. mit den Anschlüssen A0-A3 wählst du aus welcher der Eingänge S1-S16 auf den Ausgang D geschaltet wird. En sagt : jetzt gilt es .

Heinz

Hey Tommy,

ich arbeite nach den Lösungsvorschlägen meines Prof.

da die RFID Reader nicht zusammen funktionieren will er die Reader einzeln ansprechen bzw. die Miso Schnittstelle einzeln freigeben lassen über den Multiplexer.

Edit: Zum letzten Thread den ich eröffnet hatte: " Ich habe mir selber RFID-Reader besorgt. Diese gemessen und auch erfolgreich in das System integriert. Anzahl: 4 Reader. Manchmal gab es Störungen bei der Auslesung, ein Reader ging mal nicht, wahrscheinlich wegen der ganzen Verkabelung (Male zu Male Jumper only) wie schon einer kommentiert hatte nach dem Versuchsaufbau eines anderen mitglied hier."

Die Prof. bzw Master ausgezeichneten Anweisungsgeber sind der Überzeugung das es nicht an den Readern liegen kann und wollen somit das Problem beheben. Alle Mühen diese heute umzustimmen gingen daneben. Auch der Vergleich mit meinen zu Ihren Readern wollten diese nicht akzeptieren.

Hey Rentner,

Wo werden die A0-A3 an den Arduino Mega2560 angeschlossen? Beziehungsweise wie definiere ich diese am Arduinos, gibt es hier eine Libary für die Multiplexer?

Problemstellung: ich habe RFID-Lesegeräte welche zwar alleine, jedoch nicht als MultiReader funktionieren. Aus meinem vorherigen Post stellte sich raus das der Miso Pin nicht losgelassen wird und sich somit die READER gegenseitig blockieren. Nun will ich mittels des Multiplexer die MISO Schnittstelle "manuell" freigeben

Gruß

Orste

Hi

Also so wird unserer neuen Führungsriege beigebracht, wie man mit Problemen umgeht.
Zum Glück bin ich einfach nur blöd - man stelle sich vor, über so was nachzudenken ...

Nun gut - da so ein Prof nun Mal nicht irren kann (rein von der Definition her), kann man natürlich auch die Pins, Die Sich hier ins Gehege kommen, gegeneinander verriegelt.

Wie stark bist Du auf den Mutliplexer angewiesen?

Etwas unkonventionell, aber dafür mit Reizen für Auge und Ohr, gingen auch Relais mit zwei Schließern.
Zwei, weil Du wohl auch CS schalten willst.
Wobei man CS auch bei Allen auf Dauer-AN liegen lassen könnte, wenn man halt nur mit der 'Antwort des Auserwählten' weiter arbeitet.

Das sollte also somit auch Funktion zeigen.

A0...A3 - Das sind die Pins zur Wahl des zu nutzenden Kanal - Das kommt auf drei beliebige (aber noch nicht benutzte ...) Pins am Arduino.
0000 -> Kanal 0
0001 -> Kanal 1
...
1101 -> Kanal 13
...

Viel Grüße an Deinen Prof ...

postmaster-ino:
Nun gut - da so ein Prof nun Mal nicht irren kann (rein von der Definition her), kann man natürlich auch die Pins, Die Sich hier ins Gehege kommen, gegeneinander verriegelt.

Zu meiner Zeit an der Uni hieß es in der Softwareentwicklung:

Das Programm funktioniert. Nun müssen wir es noch professorensicher machen. :wink:

An solchen Schwachsinnsentwicklungen werde ich mich nicht beteiligen. Sonst steht das nächstes Jahr in den Lehrbüchern.
Dafür gibt es ja /CS.
Wenn die Hardware nichts taugt (MISO wird nicht hochohmig), darf man eben nicht Spielzeug verwenden.

Gruß Tommy

Hallo,

was soll denn der Quatsch, entweder taugen die Teile was und erfüllen die Spez für den Bus oder man kann nur einen einsetzten. Dann ist es eben so und eigentlich sollte das Teil auf den Müll.

Probleme kann man nicht mit Murx beseitigen, aber was reg ich mich auf. Noch ein Vorschlag zum murksen nimm doch Kammrelais die haben 3-4 Wechsler da kommst Du also mit 4 Relais und 4 Transistoren aus.

Heinz

Hey postmaster-ino

Den Multiplexer muss ich jetzt verwenden, da geht kein Weg vorbei. Ich könnte mir natürchlich auch noch 7 weitere Reader meiner Art holen und das ganze ohne Multiplexer machen, jedoch würde ich dann das Modul wahrscheinlich nicht bestehen (Da vorgaben und vorgegebene Bauteile nicht verwendet). Abgesehen vom ganzen Zeitdruck, habe ich nun wieder ein zusätzliches Bauteil mit dem ich erstmal nichts anfangen kann..

Die Möglichkeit dies über Relais zu steuern habe ich heute auch gebracht. Jedoch wurde auch dies verneint. (Vielleicht war meine Erklärung nicht ausreichend).

Die A-Pins sind ja meine Steuersignale, wie steuer ich diese denn jetzt im Programmcode damit ich nacheinander bis 11 alle Reader abfrage? ( Setze ich diese nacheinander und miteinander nur auf High um meine Schalttabelle zu bekommen?)

Gruß

Orste

PS: Ich kann eure Aufregung nachvollziehen, so ging es mir heute in dem Persöhnlichen Gespräch auch. Was will man jedoch machen, wenn man mehr oder weniger Mundtot gemacht wird. Lösungsvorschläge verneint werden und die nichtfunktionsfähigkeit der Module verleugnet wird?! So etwas habe ich selbst auch noch nicht erlebt und ich studiere jetzt schon im sechsten Semester.

orste:
So etwas habe ich selbst auch noch nicht erlebt und ich studiere jetzt schon im sechsten Semester.

Aber anscheinend an der falschen Uni, wenn man sich den Leerkörper so anhört.

Gruß Tommy

Also so ein Diplom - äh pardon bachelor oder master ist eine Bescheinigung

Hiermit Bescheinigen wir Herr/Frau .... so viel Ausdauer und Drahtseilnerven zu haben, dass er alle Prüfungen bestanden hat. (Ob der Inhalt der Prüfungen sinnvoll war ist nicht so wichtig. Du hast bewiesen, dass du dich durch Uni-Probleme durchbeißen kannst - also reicht es für die Praxisprobleme alle mal.)

Am Ende kommt eine Bachelorarbeit das soll man beweisen, dass man (weitgehend) selbstständig eine Problemstellung lösen kann. Jetzt hast du noch nicht geschrieben was das für ein Studium ist. Reines Informatik-Studium oder Elektrotechnik? Ganz egal was für ein Studium wenn man etwas nicht von Grund auf neu erfinden soll, dann besorgt man sich zuerst die Dokumentation. Die Anweisung lautet also "Finde die Dokumentation zum Analog-Multiplexer". Da steht drin wie man den ansteuert. (Man muss halt sich wirklich alle Seiten anschauen.

Bei reinen Hobbyisten würde ich jetzt den Link und die Seitenangabe schreiben aber das gehört zum Studieren dazu sowas selbst auf die Reihe zu bekommen. Du kannst jederzeit jede Frage stellen. Ich werde auch antworten im Sinne hilf mir es selbst zu tun.

viele Grüße Stefan

Sag uns mal welche nichtfunktionierende RFID Reader Du verwenden mußt.

Wenn diese eine SPI-konforme Schnittstelle haben kann man sie mittes CS bzw SS auf Hochohmig schalten. (Eigentlich das gleiche was der analogmultiplexer machen soll).

Ich finde Deine Professoren als inkompetent wenn sie diese unsinnigen Lösungsvorschlag durchdrücken wollen.

Was studiest Du denn wenn ein Analogmultiplexer schon ein unbekanntes Bauteil ist und Du aus dem Datenblatt nicht schlau wirst?

Grüße Uwe

Hey,

@StefanL38: Du hast natürlich vollkommen recht mit deiner Aussage! Habe nun auch verstanden wie ich den Multiplexer anschließe und einzeln manuel mit digitalWrite die Pins freigebe. Nun muss ich das ganze nur noch als automatisierten Ablauf für jeweils 11 Anschlussstellen bearbeiten.

Das Studium beeinhaltet natürlich das selbstständige Lernen und Bearbeiten von Projekten, jedoch ist jeder Mensch auf Hilfe angewiesen. Vor allem wenn man im Bereich Arduino noch nie zuvor gearbeitet hat.

Für euch mögen meine Fragen etc. vielleicht dumm klingen. Für mich sind diese jedoch notwendig, da ich so dazulerne.

Meine genaue Studienrichtung will ich hier nicht bekannt geben zwecks Anonymität, jedoch ist sie weder Elektrotechnik, noch Informatik.

@uwefed ich benutze die RC522 Reader.

orste:
Meine genaue Studienrichtung will ich hier nicht bekannt geben zwecks Anonymität, jedoch ist sie weder Elektrotechnik, noch Informatik.

Ich habe nicht studiert, deshalb möchte ich fragen warum man Fachfremde Themen/Projekte durchführen muss?
Kann doch nicht normal sein.

Hallo,

Sowas hier? https://www.az-delivery.de/products/rfid-set?_pos=1&_sid=2c6326270&_ss=r
Man hat die Wahl zwischen SPI, I2C und Usart. Bei mehreren kommt nur SPI und I2C in Frage an diesen einen Bus.
Vielleicht ist dein Problem die Leitungslänge, die kannste nicht beliebig lang machen und Stichleitungen möglichst auch nicht. Leg die Reader dicht beisammen, mach den SPI/I2C Takt notfalls niedrig, dann sollte das alles klappen. Wenn ich mir mein Steckbrett ansehe, sehe ich da keine Probleme.

@orste
Solange Du von Deinem Prof 'noch was willst' solltest Du uns vll. nicht ganz so offensichtlich Recht geben :wink:
Manch so ein Prof ist, obwohl Seine Entlohnung Nichts mit Seinem Tun zu tun hat, vll. dann doch etwas nachtragend ... wer hat den Längsten und so :wink:

MfG

Hey Leute,

habe gerade nun einen kleinen Testcode geschrieben und wollte euch fragen ob das so geht und wo mein Fehler liegt.

Switch_AO-A4 sind die Digitaleingänge der Systemsteuerung, diese habe ich in jedem Case verändert um von anderen Reader die MISO Pins durchzulassen. Geht das so?

Das “eigentliche” Programm startet mit einem Tastendruck meines Buttons, deswegen die if “Schleife”.

Danach zählt die for Schleife hoch bis i<Anzahl_Leser, dieser ist bei mir 11.

Anhand dessen erstelle ich 11 Cases worin in jedem Case alle verschiedenen Switch_A0-A4 Signale unterschiedliche Signale an den Multiplexer geben.

Anschließend kommt die Abfrage ob ein Tag vorhanden ist und dieser gelesen werden kann. Wenn ja Erfolgt die Ausgabe der UID.

Nun das Problem: Es scheint als würde der Multiplexer nicht richtig funktionieren, oder aber mein Code ist total daneben. Bei der ersten Abfrage nachdem ich das System hochgefahren habe muss ich eine Kabelbrücke zwischen S1 und D haben. Nach der ersten Erkennung nehme ich dann die Brücke zwischen D und S1 ab und kann ganz normal die UID auslesen. Mit den Werten welche dann nur durch S1 hereinkommen. Wenn ich die Kabelbrücke beim ersten versuch nicht habe, findet der Reader keinen Tag.

Gibt es eine einfachere Lösung der Abfrage und der Durchschaltung?
In das System muss im nächsten Schritt eine Kontrolle der Transponder Erfolgen, (Endsystem soll ein pick to light System mit dynamischen Kisten sein)

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 5  
#define SS_PIN 46

int Switch_A0 =22;  // Die Ansteuerungspins für den Multiplexer
int Switch_A1 =24;
int Switch_A2 =26;
int Switch_A3 =28;  // Ansteuerungspins zu Ende

const int Button_Pin1 =2;  // Button zum starten des Programms in der loop
int Button_stat1 =0;        // Übergabe des Zustandes

const int Button_Pin2 =3; // Später benötigte Buttons
int Button_stat2 =0;        // Übergabe des Zustandes

const int Button_Pin3 =4; // Später benötigte Buttons
int Button_stat3 =0;        // Übergabe des Zustandes

#define Anzahl_Leser 11

int Auftrag_1[]= {44131315815850501411418888129129};     // Später benötigtes Array

MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  // put your setup code here, to run once:
  
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
  
pinMode (Switch_A0,OUTPUT);
pinMode (Switch_A1,OUTPUT);
pinMode (Switch_A2,OUTPUT);
pinMode (Switch_A3,OUTPUT);

pinMode(Button_Pin1,INPUT);
digitalWrite(Button_Pin1,HIGH);

}

void loop() {

Button_stat1=digitalRead(Button_Pin1);


if( Button_stat1 == LOW){
  for(int i=0; i<Anzahl_Leser; i++) {
    switch(i) {

      
      case 0:
      digitalWrite(Switch_A0,LOW);
      digitalWrite(Switch_A1,LOW);
      digitalWrite(Switch_A2,LOW);
      digitalWrite(Switch_A3,LOW);
      
      Serial.println(F("Jetzt kommt Abfrage"));
        //if (
        mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial(); // ) {   //Das if wurde vorerst auskommentiert, da es mit diesem gar nicht funktioniert hat, wahrscheinlich wegen der Verschachtelung der Schleifen.
        Serial.print("Gelesene UID:");
          for (byte i = 0; i < mfrc522.uid.size; i++) {
          // Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
          Serial.print(mfrc522.uid.uidByte[i]);// < 0x10 ? " 0" : " ");    // Ausgabe und formatierung der UID wurde auskommentiert weil ich dies erstmal nicht brauche
          Serial.print(mfrc522.uid.uidByte[i]);//, HEX);   // Ausgabe und formatierung der UID wurde auskommentiert weil ich dies erstmal nicht brauche
          }
          
    Serial.println(); 
    Serial.println("Abfrage zu Ende"); 
 
    // Versetzt die gelesene Karte in einen Ruhemodus, um nach anderen Karten suchen zu können.
    mfrc522.PICC_HaltA();
      
      Serial.println(F("Lauf 1"));
      delay(1000);
      break;
    // Hier soll das gleiche von vorne gehen nur halt für S2 am Multipexer
      case 1:
      digitalWrite(Switch_A0,HIGH);
      digitalWrite(Switch_A1,LOW);
      digitalWrite(Switch_A2,LOW);
      digitalWrite(Switch_A3,LOW);

MFG

Orste

EDIT: Auf S16 Klappt alles einwandfrei, Miso Anschluss geht an S16 und Signal kommt aus D wieder raus.
Bei den Anderen Anschlüssen klappt dies nicht

EN habe ich an 5V geschlossen.

Ist eventuell das Miso Signal zu schwach?

int Auftrag_1= {44131315815850501411418888129129}; // Später benötigtes Array

DAS klappt?
Hatte ja gehofft, Das wirft eine Warnung - aber dafür müsste der Code-Fetzen kompilierbar sein.

MfG

Hey leute,

habe gemerkt, dass der Code absoluter Schwachsinn war. Durh ein Video auf YT bin ich auf eine viel leichtere Lösung gekommen. Diesmal auch ohne die nicht benutzten Variablen, um die Übersicht zu verbessern:)

Der Multiplexer schaltet erfolgreich die S-Pins frei.

Mein Dozent ist jetzt der Meinung ich kann die restlichen Pins am Arduino miteinander verbinden. Dies klappt aber irgendwie nicht richtig… Auslesen tut er jetzt immer nur einen (Versuchsaufbau ist gerade mit zwei Readern). Theoretisch müsste dies ja klappen, da ich nur eine Instanz habe und auch immer nur einen S-Pin freischalte, oder nicht?

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 46
#define RST_PIN 5

MFRC522 mfrc522(SS_PIN, RST_PIN);

int zaehler = 0;

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

void setup() {

 
 pinMode(22, OUTPUT);
 pinMode(24, OUTPUT);
 pinMode(26, OUTPUT);
 pinMode(28, OUTPUT);
 Serial.begin(9600);
 SPI.begin();
 mfrc522.PCD_Init();
}

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

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

  digitalWrite(22, bit0);
  digitalWrite(24, bit1);
  digitalWrite(26, bit2);
  digitalWrite(28, bit3);

  Serial.print("Lauf :");
  Serial.println(zaehler);

  delay(500);

   if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ) {
    Serial.print("Gelesene UID:");
    for (byte i = 0; i < mfrc522.uid.size; i++) {
      // Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
      Serial.print(mfrc522.uid.uidByte[i], HEX);
    } 
    Serial.println(); 
 
    // Versetzt die gelesene Karte in einen Ruhemodus, um nach anderen Karten suchen zu können.
    //mfrc522.PICC_HaltA();
    delay(1000);
  }
 
 } 
 
}

MFG

Orste

EDIT: Fehler bei den Kabel, jetzt gehen auch zwei:)