Arduino: Catalex SD & SoftSPI

Catlex

Daten auf eine SD-Karte zu sichern ist eigentlich recht einfach, wenn nicht das SD-Modul von Catalex einen Strich durch die Rechnung machen würde.

Das Problem: Es blockiert den SPI-Bus, den aber auch andere Geräte nutzen.

Hierfür zeige ich einen Workaround.

Advertisements

9 Gedanken zu “Arduino: Catalex SD & SoftSPI

  1. Hallo, erst mal vielen Dank für die tolle und gelungene Beschreibung des SPI-Problems der SD-Karte. Ich entwickle gerade ein Messgerät, mit dem ich Magnetfelder runder Dauermagnete präzise vermessen und grafisch darstellen kann. Das Display eDIP320 ist dafür gut geeignet (über RS232). An meinem Arduino Mega hängt allerdings jede Menge Peripherie:
    – RTC über SDA/SCL
    – Batterieüberwachung über SDA/SCL
    – SD-Karte über SPI
    – SRAM 23LC1024 (4x) über SPI

    Leider ist es so, dass die SD-Karte die SRAM-Bausteine blockiert (beide SPI). Sobald ich die SD-Karte abklemme, funktioniert alles einwandfrei. Weiterhin ist es so, dass die SD-FAT-Library sich nicht mit meiner RTC verträgt, so dass ich die SD.h eingebunden habe. Gibt es eine Möglichkeit, deine Lösung auf die SD-Lib zu übertragen?

    Viele Grüße, Ramon

    Gefällt mir

    1. Grüß‘ dich,

      Die SD-Lib ist mehr oder weniger ein Klon der SD-Fat, allerdinds stark abgespeckt, damit sie nicht so viel Platz braucht. Du müsstest dir also nur den Teil der SD-Fat schnappen, der SoftSPI unterstützt (ok, das sagt sich leicht, ist aber viel arbeit).

      Für was brauchst du die RTC? Nur für genauen Takt? Wenn ja, dann nutz einfach den Takt-Pin dieser am Takt-Pin des Mega.

      Ansonsten: Andere RTC? Andere RTC-Lib?

      Das ist leider das Problem bei den Libraries, es gibt für alles eine, aber wenn man mehrere braucht wird’s wild.

      LG

      Gefällt mir

  2. Vielen lieben Dank für die schnelle Antwort !
    ich hoffe ich kann Dir auch mal helfen wenn Du Deinen USB Stick mal mitgewaschen hast 🙂
    Vielen lieben Dank ! Das brauchst Du nicht , dann nehme ich mal das PIN 13 blinken als positive Nachricht auf 🙂

    Ich habe eine Email geschickt , bitte bescheid sagen wenn ich noch etwas schicken soll. 🙂

    Mit freundlichen Grüßen
    Christian

    Gefällt mir

  3. Momentan giebt der Sketch die Fehlermeldung mit Abbruch :
    „LiquidCrystal_IC2 lcd (0x27, 16, 2); previously declared here.“ Ich danke mal das ich nur meine Libraries aufräumen muss 🙂 … Ich Lade das Sketch mal auf einem anderen Rechner hoch…
    Mit freundlichen Grüßen
    Christian

    Gefällt mir

  4. Hallo !

    Vielen lieben Dank für die Aufklärung des SPI Problems …
    Ich sitze vor einem Projekt ( Arduino Mega ) und 2 SPI Geräten ( einmal den NRF transceiver und einmal ein SD Karten Modul./ Drucksensor BMP180 )…
    Ich habe leider nur einen Arduino Nano , einen UNO und 2 Mega.
    Wie könnte ich Dein Projekt zu Stande bekommen mit 2 meiner Arduinos ?
    Und was noch wichtiger ist , mein Sensor den ich anschließen möchte ist ein BMP180 Drucksensor.
    ( Ich habe auch das gleiche LCD das mit GND VCC SDA SCL betrieben wird )
    Könntest Du mir bitte weiterhelfen oder mir sagen was für Änderungen ich in Deinem Code machen müsste ? Oder darf ich Dir ein Paar Fotos schicken damit Du siehst was ich unbedingt zusammenwürfeln möchte ?
    Für etwaige Hilfen von Deiner Seite kann ich mich mit Daten Recovery Services revancieren …

    Vielen Dank !
    Mit freundlichen Grüßen
    Christian ( Microwhatt )

    Gefällt mir

    1. Freilich kann ich dir dabei helfen, schick mir einfach mal eine Mail (ev. mit paar Bildern deines Aufbaus) und deinem Programmcode, den verwendeten Modulen und wie du es verkabelt hast.

      Bei deinen vorhandenen Arduinos kann ich dir sagen: Nano & Uno nutzen den gleichen Prozessor-Typ. Daher musst du bei beiden weder im Programm, noch in der Pinbelegung was ändern -> deshalb nutze ich so gerne das Nano, da es kleiner aber genau so gut wie das Uno ist. Mit dem Mega hab‘ ich bis jetzt zwar keine Erfahrungen (es ist mir einfach zu groß, da kann man ja gleich einen Raspberry nehmen ^^), aber es wird schon nicht so umständlich sein, den Code zu ändern.

      Mail: deloarts@outlook.com

      Gefällt mir

      1. Supernett ! Vielen lieben Dank !
        Ich schreibe Dir eine Email. 🙂 Momentan habe ich den Transmitter aufgebaut und das Sketch hochgeladen. Im Serial Monitor erscheint nichts. ( Ich denke das ist normal ? )
        Nur ein kleines Blinken (blaue LED ) am Arduino nano ist zu sehen…
        Ich mache mich jetzt dran den Mega zu benutzen weil der Uno noch für ein Projekt verbaut ist .. ( Fals es besser ist dann nehme ich den auseinander 🙂 )
        ( Der schwierige Teil wird wohl für mich sein anstatt eines one wire Temperatur Sensors muss ich einen BPM180 Drucksensor einbauen ) Ich brauche keine Temperatur Daten von Ihm sondern nur Druckdaten 🙂 … Aber ich baue es jetzt erst mal so wie Du beschrieben hast. Ich schicke Dir mal eine Email sobald ich alles verstöpselt habe 🙂
        Mit freundlichen Grüßen
        Christian

        Gefällt mir

        1. Das Blinken der LED kommt daher, dass Pin 13 des Boards hardwareseitig mit dieser verbunden ist, der aber hier gleichzeitig als SCK-Pin dient. Das ist bei SPI die Clock, also der Taktgeber für die Kommunikation, dass sich beide Partner auch verstehen können. Deshalb siehst du in diesem Fall das Blinken.

          Im seriellen Monitor siehst du nichts, weil ich beim Sender darauf verzichtet hab, wenn du möchtest kannst du dir aber für Debug-Zwecke (etwa zum Anzeigen der Sensordaten am PC) die Daten an den PC schicken lassen. Das mache ich ganz gerne bei komplexen Programmen, um zu sehen ob eh alles abgearbeitet wird.

          Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s