Hey,
Ich bin ziemlicher Anfänger und habe einen Arduino Nano an den ich einen RFID-Sensor (Mc522) und einen Micro SD Karten Modul anschließen. Beide müssen ja eigentlich an die pins 10-12 angeschlossen werden. Kann ich beides gleichzeitig anschließen an den Nano und wenn ja wie?
Ich habe es mit Änderungen im sketch probiert, ich möchte das SD Modul an 3-6 anschließen. Der ss pin (cs steht auf meinem Modul) ist dann an 6 angeschlossen.
#include <SPI.h>
#include <SD.h>
File Textdatei;
const int chipSelectPin = 6; // Neuer SS-Pin
void setup() {
Serial.begin(9600);
Serial.println("Initialisiere SD-Karte");
// Konfiguration der SPI-Kommunikation mit benutzerdefinierten Pins
SPI.begin();
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
pinMode(chipSelectPin, OUTPUT);
if (!SD.begin(chipSelectPin)) {
Serial.println("Initialisierung fehlgeschlagen!");
return;
}
Serial.println("Initialisierung abgeschlossen");
Textdatei = SD.open("test.txt", FILE_WRITE);
if (Textdatei) {
Serial.println("Schreibe in Textdatei...");
Textdatei.println("Funduino GmbH");
Textdatei.println("1, 2, 3, 4, 5");
Textdatei.println("a, b, c, d, e");
Textdatei.println();
Textdatei.close();
Serial.println("Abgeschlossen.");
Serial.println();
} else {
Serial.println("Textdatei konnte nicht erstellt werden");
}
Textdatei = SD.open("test.txt");
if (Textdatei) {
Serial.println("test.txt:");
while (Textdatei.available()) {
Serial.write(Textdatei.read());
}
Textdatei.close();
} else {
Serial.println("Textdatei konnte nicht geoeffnet werden");
}
}
void loop() {
// Der Loop bleibt leer.
}
Mit dem Code funktioniert es allerdings nicht, es kommt immer Initialisierung Fehlgeschlagen.
Gibt es überhaupt eine Möglichkeit, beides gleichzeitig anzuschließen?
SPI ist ein Bus: CLK, MISO und MOSI (oder wie sie heutzutage heissen) gehen an alle Teilnehmer. Für CS hat jeder Slave einen eigenen Pin, der vom Master als OUTPUT gesetzt wird.
Beim UNO R3, UNO R3 SMD, MINI
und auch NANO V3.0 (alle mit ATmega328 Kontroller)
sind folgende Pins:
11(COPI bzw MOSI), 12(CIPO bzw MISO), 13(SCK)
Also die Pins 11, 12, 13 des Arduino gehen an alle SPI Slaves.
Ein weiteres Pin (oft bei verschiedenen Shields verwendet) 10 und 4 sind das SS bzw CS bzw EN Pin.
11(COPI bzw MOSI), 12(CIPO bzw MISO), 13(SCK) müssen nicht als Eingänge oder Ausgänge deklariert werden.
Das jeweilige SS bzw CS bzw EN Pin muß als Ausgang deklariert werden und auch auf H bzw L gesetzt werden um einen der mehreren Slaves/Peripheral zu aktivieren.
vielen dank für die hilfe. also der sd reader funktioniert jetzt, ss pin ist jetzt 4. allerdings bekomme ich es nicht gleichzeitig mit dem rfid reader zum laufen. cs pin ist hier eben 10, der Rest ist gleich angeschlossen wie der sd leser. Er soll eigentlich die erkannte ID auf der sd karte speichern.
#include <SPI.h>
#include <SD.h>
#include <MFRC522.h>
File textDatei;
#define RST_PIN 9 // Reset-PIN für den RFID-Reader
#define SS_PIN 10 // Slave-Select-PIN für den RFID-Reader
MFRC522 mfrc522(SS_PIN, RST_PIN); // Erstellen einer MFRC522-Instanz
const int chipSelectPin = 4;
void setup() {
Serial.begin(9600);
Serial.println("Initialisiere SD-Karte");
pinMode(chipSelectPin, OUTPUT);
digitalWrite(chipSelectPin, HIGH);
// Initialisierung der SD-Karte
if (!SD.begin(chipSelectPin)) { // Benutzerdefinierten CS-Pin übergeben
Serial.println("Initialisierung der SD-Karte fehlgeschlagen!");
return;
}
Serial.println("Initialisierung der SD-Karte abgeschlossen");
textDatei = SD.open("test.txt", FILE_WRITE);
if (textDatei) {
Serial.println("Schreibe in Textdatei...");
textDatei.println("Funduino GmbH");
textDatei.println("1, 2, 3, 4, 5");
textDatei.println("a, b, c, d, e");
textDatei.println();
textDatei.close();
Serial.println("Abgeschlossen.");
Serial.println();
} else {
Serial.println("Textdatei konnte nicht erstellt werden");
}
textDatei = SD.open("test.txt");
if (textDatei) {
Serial.println("test.txt:");
while (textDatei.available()) {
Serial.write(textDatei.read());
}
textDatei.close();
} else {
Serial.println("Textdatei konnte nicht geoeffnet werden");
}
// Initialisierung des RFID-Readers
SPI.begin(); // Initialisierung der SPI-Kommunikation
mfrc522.PCD_Init(); // Initialisierung des RFID-Readers
Serial.println("RFID-Reader initialisiert");
}
void loop() {
// Versuche eine Karte zu lesen
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
Serial.println("Karte erkannt");
// Lesen der UID der Karte
String uidString = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
uidString += String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
uidString += String(mfrc522.uid.uidByte[i], HEX);
}
// Öffnen oder Erstellen der Datei auf der SD-Karte
textDatei = SD.open("rfid_ids.txt", FILE_WRITE);
if (textDatei) {
// Schreiben der UID in die Datei
textDatei.println(uidString);
textDatei.close();
Serial.println("UID erfolgreich in die Datei geschrieben");
} else {
Serial.println("Fehler beim Öffnen der Datei");
}
// Beenden des Leseprozesses
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
}
Ah ja das stimmt, habe das falsch reinkopiert.
Dachte für den reader passt es auch so, da der ja mit den Anschlüssen direkt funktioniert hat ohne extra Zuordnung. Es ist so, dass beide einzeln funktionieren, allerdings noch nicht gemeinsam
Ja finde es ist da auch undurchsichtig, auf einem Plan ist er an pin 9 angeschlossen (geht bei mir aber nicht) und auf dem anderen Schaltplan an den 5V pin vom Arduino. Das hat auf jeden Fall geklappt bei mir. Die Stromversorgung kommt vom 3.3V pin