Arduino Mega 2560 mit Sainsmart tft320qvt - SD Karte

Hallo liebe Gemeinde.

Ich fummle seit einigen Tagen an dem TFT320qvt von Sainsmart im Zusammenhang mit meinem Arduino Mega 2560 R3 rum. Das Display und die Touch funktion laufen. Ich habe die Bibliothek von Henning Karlsen (UTFT, Utouch, tinyFAT und UTFT_tinyFAT) im Einsatz. Leider will es mir nicht gelingen, die SD-Karte in den Zugriff zu nehmen. Ich habe alle Anleitungen gewälzt und auch andere Bibliotheken ausprobiert (SDfat, SD) und immer wenn ich ich versuche auf die SD Karte zuzugreifen bekomme ich den folgenden fehler: tinyfat: error MBR signature error ->freeze SD, SDfat: SD init fail -> restart

Habe gelesen dass bei einigen Sainsmartboards dieser Reihe wohl 2 Pins vertauscht wurden, das wars aber offenbar nicht. Ich habe das Display mit meinem Mega verkabelt und nutze kein shield. vorgegangen bin ich hierbei nach der Anleitung auf der Website von Henning Karlsen (UTFT), wo auch die Pinouts gut verständlich illustriert sind. Display und Touchfunktion gehen einwandfrei.

Kann mir evtl jemand sagen was ich falsch mache? Nehmen wir den Bsp Code von tinyFAT: All_In_One_Demo.pde Hierzu beachten wir natürlich die Korrekte Pinzuweisung in der ...avr.h:

if defined(AVR_ATmega1280) || defined(AVR_ATmega2560)

uint8_t _SS = 53; uint8_t _SS_HW = 53; uint8_t _MOSI = 51; uint8_t _MISO = 50; uint8_t _SCK = 52;

else

uint8_t _SS = 10; uint8_t _SS_HW = 10; uint8_t _MOSI = 11; uint8_t _MISO = 12; uint8_t _SCK = 13;

endif

Ich habe alles was mir zu dem Thema eingefallen ist, bereits ausprobiert und mir raucht der Kopf. Tips?

Achso. Natürlich habe ich mehrere SD Karten ausprobiert, die ich vorher alle sauber formatiert habe (fat16), und zwar in 128MB, 2GB, 4Gb, 16GB

Wenn du kein Shield verwendest, hast du dann wenigstens Pegelwandler verwendet? Die SD Module laufen soweit ich weiß mit 3,3V und die Eingänge sind nicht unbedingt 5V tolerant.

Nein, das habe ich nicht. Habe mich beim Anschluss an dieses Manual hier gehalten: http://www.geeetech.com/wiki/index.php/3.2TFT_LCD

Könnte es helfen, wenn ich die SDpins via Breadboard mit Widerständen auf 3.3V runterziehe und wenn ja wie?

Vielleicht. Probieren sollte man es mal. Aber die die Leitungen vom µC zur SD Karte. Also CLK, MOSI und CS//SS. MISO wird vom Arduino noch als High erkannt.

Mit einem 680/1k Spannungsteiler: http://www.mikrocontroller.net/articles/Pegelwandler#5_V_.E2.87.92_3.2C3_V

Was auch manchmal geht ist einfach 1k Widerstände in Reihe. Die machen dann mit den internen Schutzdioden der Schaltung die Pegelwandlung. Siehe auch hier: http://devacron.com/add-a-tft-display-to-your-arduino-projects-1-8-tft-spi-128x160/ (nicht SD aber ein SPI TFT)

Das sind aber beides Not-Lösungen (vor allem die Schutzdioden zu missbrauchen ist ein Hack). Am besten ist sowas: http://www.watterott.com/de/Level-Shifter?x27148=d9b2a564ffc151f01f1e9d7716937df2

Oder wenn du ein DIP IC verbauen willst, einen 74HC4050 oder 74LVT245

Hallo und ersteinmal vielen Dank für die hilfreichen Tips! Ich habe mich zum Testen nun auf die Lib SDfat geworfen, da diese, wie mir scheint, bessere serial Outputs mit sich bringt, als einfach nur MBR signature Error. Genauer gesagt habe ich die Quickstart aus der SDfat lib gewählt. Folgendes schmeisst mir diese nun an den Kopf:

SPI pins:
MOSI: 51
MISO: 50
SCK:  52

Be sure to edit DISABLE_CHIP_SELECT if you have
a second SPI device.  For example, with the Ethernet
shield, DISABLE_CHIP_SELECT should be set to 10
to disable the Ethernet controller.

SD chip select is the key hardware option.
Common values are:
Arduino Ethernet shield, pin 4
Sparkfun SD shield, pin 8
Adafruit SD shields and modules, pin 10

Enter the chip select pin number: 53

Assuming the SD is the only SPI device.
Edit DISABLE_CHIP_SELECT to disable another device.

SD initialization failed.
Do not reformat the card!
Is the card correctly inserted?
Is chipSelect set to the correct value?
Does another SPI device need to be disabled?
Is there a wiring/soldering problem?
errorCode: 0x1, errorData: 0x0

Restarting

Wenn ich dem vorangehenden Post glauben schenken darf (was ich uneingeschränkt tue), nüzt es nix, wenn er die PINbelegung vorausorakeln kann, da diese noch auf 5V laufen, oder liege ich da falsch? Ich konzentriere mich nun erstmal auf PIN 53 (bei mir CS/SS) und versuche gier einen 1K R einzusetzen? Oder kann man aus der von mir geposteten Ausgabe evtl deuten, dass mein Display TFT320qvt evtl schon die passenden Widerstände hat und ich nur "den Hebel" nicht gefunden habe?

Um nochmal sicher zu gehen habe ich hier ein Beweisfoto des richtigen Teils: folge mir...

hm. schlechte Nachrichten: Das mit den Widerständen hat nicht geklappt. Nach wie vor das selbe Problem.

Die Pin-Belegung ist bekannt, da die die SPI Pins vorgegeben ist. Das heißt nichts. Chip Select kann man ändern, da das in Software geschaltet wird (i.d.R. glaube ich auch wenn man den Hardware Pin verwendet)

Das habe ich auch und ich verwende aus den gleichen Gründen auch SdFat (außerdem hat man eine schöne Output Stream Klasse wie in C++).

Allerdings habe ich das Shield. Scheint mir sauberer und dann läuft alles mit 3,3V. Das Display scheint aber in der Tat schon 1k Widerstände in den Bus-Leitungen zu haben. War mir noch gar nicht aufgefallen. Mhh...

Was auf der SdFat Seite noch steht:

The hardware interface to the SD card should not use a resistor based level shifter. SdFat sets the SPI bus frequency to 8 MHz which results in signal rise times that are too slow for the edge detectors in many newer SD card controllers when resistor voltage dividers are used.

The 5 to 3.3 V level shifter for 5 V Arduinos should be IC based like the 74HC4050N based circuit shown in the file SdLevel.png. The Adafruit Wave Shield uses a 74AHC125N. Gravitech sells SD and MicroSD Card Adapters based on the 74LCX245.

If you are using a resistor based level shifter and are having problems try setting the SPI bus frequency to 4 MHz. This can be done by using card.init(SPI_HALF_SPEED) to initialize the SD card.

Weil die Widerstände die Flankensteilheit reduzieren.

Außerdem kannst du mal SdFatConfig.h auf machen und ganz unten Software SPI konfigurieren. Ist natürlich langsamer, aber Hauptsache es geht erst mal.

Ich habs.
Bin wohl tatsächlich Opfer der Sainsmart Pfuscher.
Das Schema in der UTFT und auch in der ITB02 Doku, die ich vom Händler bekommen habe ist falsch.
Die SD Pins sind hier wie folgt beschrieben:
Shield Funktion Ard-Mega
35 = MOSI => 50
36 = CLK => 51
37 = MISO => 52
38 = CS => 53

Leider ist das Falsch und das hier richtig:
35 = MISO => 52
36 = CLK => 51
37 = MOSI => 50
38 = CS => 53

MISI und MOSO… dass kann nicht gehn…

Danke an alle, die sich die Mühe gemacht haben, mir helfen zu wollen.
Leider steht auf dem Board auch keine Versionsnummer, denn ich habe gelesen, das Sainsmart hier bereits den Fehler gefixt hat.
Bei der Kohle, die hier in Form von Zeit verbrannt wurde, hätte ich mir locker ein Ticket nach HonkKong kaufen können.