SD Speicherkarte am Arduino betrieben

Arduino mit SD Kartenadapter und verschiedenen Karten
Mikrocontroller sind ja bekanntlich sehr flexibel, was ihre Anwendungsmöglichkeiten betrifft. Leider bedingt diese Flexibilität aber auch einen gewissen Schwierigkeitsgrad bei der Programmierung.

Mit der Arduino-Platform wird diese Anforderung erheblich dadurch gemindert, dass die Hardware durch einfach zu nutzende Software-Bibliotheken angesteuert werden kann.

Geht es um einfache IO-Port Ansteuerung, wird der Vorteil gegenüber einer direkten Programmierung in C vielleicht noch nicht so deutlich, aber spätestens beim Einbinden eines externen Sensors über den I2C Bus (Beispiel siehe hier) merkt man schon sehr schnell die immense Zeitersparnis, die man gegenüber einer konventionellen Programmierung erzielt.

Noch eine ganz andere Dimension dagegen ist die Ansteuerung einer SD-Speicherkarte. Zwar ist die hardwaremässige Verbindung über ein SPI-Interface vergleichsweise einfach, was aber praktisch nicht mehr sinnvoll selbst programmiert werden kann ist die logische Ansteuerung des Speicherplatzes mit einem FAT-Dateisystem, welches auch von normalen Computern gelesen werden kann. Die Speicherblöcke müssen dergestalt organisiert werden, dass dabei ein korrektes Dateiverzeichnis sowie Dateien herauskommen. Zusammen mit der SPI Ansteuerung füllen die dafür verfügbaren Spezifikationen leicht mehrere hundert Seiten.

Im Arduino-Framework kann man stattdessen ganz einfach die Bibliothek SD.h einbinden und erhält so praktisch ohne Aufwand sofort vollen Zugriff auf Speichermedien im Gigabyte-Bereich.

Analog zu Seriellen Schnittstelle muss die SD-Karte zuerst initialisiert werden, sie wird über 4 Leitungen mit dem Arduino verbunden (+Betriebsspannung ):

#define SD_CS_PIN 4

// MOSI - pin 11
// MISO - pin 12
// CLK - pin 13
// CS - pin 4

if (!SD.begin(SD_CS_PIN)) {
Serial.println("Initialisierung fehlgeschlagen!");
return;
}
Serial.println("SD Karte initialisiert.");


datei = SD.open("daten.txt", FILE_WRITE);

// Wenn Datei erfolgreich geöffnet, können wir schreiben:
if (datei) {
Serial.println("Schreibe Daten...");
datei.println("1,2,3,4,5");
// Datei wieder schliessen:
datei.close();
}

Diese wenigen Programmzeilen öffnen eine Datei, schreiben Daten hinein und schliessen diese wieder. Damit ist zum Beispiel schonmal die grundsätzliche Funktionalität eines Datenloggers gegeben.

Das Lesen gestaltet sich ähnlich einfach:

datei = SD.open("daten.txt");

if (datei) {
Serial.println("Dateiinhalt von daten.txt:");
// Lesen, solange Daten vorhanden
while (datei.available()) {
Serial.write(datei.read());
}
// datei wieder schliessen:
datei.close();
}

Als kleine Einschränkung kann man nur immer jeweils eine Datei geöffnet haben, man muss also die Zugriffe in seinem Programm entsprechend organisieren.
Die SD.h Bibliothek bietet darüberhinaus natürlich noch etliche andere Funktionen, zB zum Erstellen und lesen von Verzeichnissen. Näheres findet sich in der Referenz-Dokumentation dazu (http://arduino.cc/en/Reference/SD).

Ich habe übrigens mit dieser Bibliothek sowie einem SD-Kartenadaper aus China für ca 6 Euro weniger als 5 Minuten gebraucht, um erfolgreich auf eine Karte zugreifen zu können.

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1214133