Forum: Mikrocontroller und Digitale Elektronik Atmega2560+SSD1963 SD-Karte


von Matthias H. (streno)


Lesenswert?

Hallo zusammen,

ich programmiere einen Atmega2560 mit dem zugehörigen tft shield und 
einem Display mit SSD1963 Controller. Am Display ist ein SD-Karten Slot.

Ich versuche die SD-Karte mithilfe der FAT32 library zu beschreiben aber 
leider geht das überhaupt nicht und ich weiß nicht, wo der Fehler liegt.

Hat jemand so etwas schonmal gemacht? Bzw kann ich den SD-Slot am 
Display überhaupt mit der FAT32 library nutzen?

von dasrotemopped (Gast)


Lesenswert?

Die Fat32 Lib weiss nur, wie man ein Dateisytem liest,
aber sie weiss nicht, wie man eine SD Karte anspricht.
Das muss noch zusätzlich hinzugefügt werden.
Die SD Karte muss in 512 Byte Blocks gelesen und
geschrieben werden können, damit die Fat32 Lib was
machen kann. Bei deinem Display muss das im SPI Modus
gemacht werden.
Schau dir die Beispiele zu dem
Adafruit 1.8 18-bit Color TFT Shield w/microSD and Joystick
an.

Gruß,
dasrotemopped.

von Matthias H. (streno)


Lesenswert?

dasrotemopped schrieb:
> Bei deinem Display muss das im SPI Modus
> gemacht werden.

Das verstehe ich leider nicht ganz. In der FAT32 lib konfiguriere ich 
doch in den einzelnen Librarys meine Pins für CS/MISO/MOSI/CLK?

von Matthias H. (streno)


Lesenswert?

Hallo,

ich bekomme die programmierung der sd-karte einfach nicht hin.

Hat jemand eventuell ein Code-Beispiel?

Ich programmiere den Atmega2560 in Atmel Studio, dort funktioniert die 
SD-Card-library von arduino nicht. Langsam verzweifle ich...

von mario eduardo (Gast)


Lesenswert?

Servus,
Ich kann mir aus deiner Beschreibung nicht vorstellen, wie das ganze 
aufgebaut ist. Der SSD1963 ist ein Touch Screen Controller. Was hat der 
mit SD Karten zu tun? Zeichen bitte ein etwas detaillierteres 
Blockschaltbild, damit man sich vorstellen kann, was wo dran hängt. z.B. 
woraus ersichtlich ist, wie der SD Slot angesprochen wird, wie der Touch 
Bereich, wie der TFT Schirm etc ....

Wie immer: Gut gezeichnet ist halb programmiert ....

Mario

von Matthias H. (streno)


Lesenswert?

mario eduardo schrieb:
> damit man sich vorstellen kann, was wo dran hängt. z.B.
> woraus ersichtlich ist, wie der SD Slot angesprochen wird

Hallo, genau das ist mein Problem.

Ich habe dieses Display

https://eckstein-shop.de/50-MIT-Touchscreen-800480-MCU-Bus-TFT-LCD-Display-SSD1963-Kompatibel-Arduino?googlede=1&gclid=Cj0KEQjwrsDIBRDX3JCunOrr_YYBEiQAifH1FgKsYJeW2h1LPZGwkJPXgx0LyG331oPtCp22S8epBlEaAoNs8P8HAQ

Dort ist auch ein SD-Slot. Leider gibt es keine Dokumentation, wie 
dieser angesprochen wird. Deshalb frage ich, ob jemand diesen schonmal 
erfolgreich angesprochen hat

von Arduinoquäler (Gast)


Lesenswert?

Matthias H. schrieb:
> Leider gibt es keine Dokumentation, wie
> dieser angesprochen wird.

Wozu soll es dazu extra eine Doku geben?

Der SD Slot ist völlig separat als SPI Gerät auf den
Stecker des Displays herausgeführt und kann dort ohne
Probleme oder Störungen an den SPI Controller deines
Vertrauens angeschlossen und betrieben werden.

Wenn du in der Fahrschule Auto fahren gelernt hast wirst
du nicht nochmal in die Fahrschule gehen wenn du dir ein
neues Auto kaufst?

Wenn dir etwas mit dem Anschliessen eines SD Slots an
ein SPI nicht klar ist dann frage diesbezüglich.
Auf den Displays und Shields sind jedenfalls alle SPI
Anschlüsse benannt, diese sind in der Software natürlich
zu berücksichtigen.

von Matthias H. (streno)


Lesenswert?

Arduinoquäler schrieb:
> Der SD Slot ist völlig separat als SPI Gerät auf den
> Stecker des Displays herausgeführt und kann dort ohne
> Probleme oder Störungen an den SPI Controller deines
> Vertrauens angeschlossen und betrieben werden

Okay das wusste ich nicht

Arduinoquäler schrieb:
> Wenn dir etwas mit dem Anschliessen eines SD Slots an
> ein SPI nicht klar ist dann frage diesbezüglich.
> Auf den Displays und Shields sind jedenfalls alle SPI
> Anschlüsse benannt, diese sind in der Software natürlich
> zu berücksichtigen.

Ich habe bis jetzt immer versucht die FAT32_library zu benutzen. 
Natürlich habe ich die Pins entsprechend des Atmega2560 geändert. Leider 
überhaupt nichts. Mir scheint es fehlt noch irgendetwas. Deswegen habe 
ich nach einem Code-Beispiel gefragt

von mario eduardo (Gast)


Lesenswert?

Hi,

Zum Display gibt habe ich eine ZIP Datei mit guter Beschreibung 
gefunden.
So wie es auf der Zeichnung aussieht, ist der SD Slot am Shield 
untergebracht. Zu dem hab ich nichts gefunden. Evtl an den Verkäufer 
wenden und um einen Schaltplan bitten.
Mario

von mario eduardo (Gast)


Lesenswert?

Ich habe zwar keine Ahnung wie die Arduino Welt funktioniert, aber zum 
SPI Bus gehört  mindestens ein ChipSelect Signal, das auf ?? Port liegt, 
und so ich mich richtig erinnere, gibt es noch 2 Leitungen (Card Present 
und WriteProtect) die ebenso auf ?? Port liegen. Bei einer ordentlichen 
Doku ist das auf der HomePage des Produktes herunterzuladen.

Mario

von Arduinoquäler (Gast)


Lesenswert?

Matthias H. schrieb:
> Natürlich habe ich die Pins entsprechend des Atmega2560 geändert.

Matthias H. schrieb:
> Okay das wusste ich nicht

Na was jetzt?

Du hast die Pins angepasst und wusstest von nichts?
So so, tolles Chaos hier wieder ....

von Matthias H. (streno)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe versucht die SD-Karte anzusprechen. Habe die FAT32 Library 
genommen und die Pins an den Atmega2560 angepasst. Das hat aber nicht 
funktioniert, deswegen hatte ich hier gefragt, wie ich die SD-Karte 
ansprechen kann.

Vielleicht sieht jemand meinen Fehler in meiner Main.

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

Wenn du es nicht für nötig hältst die Anpassungen zu posten
(auf die es ja schliesslich ankommt, die Lib darf ja als
funktionfähig betrachtet werden) dann ist wohl Hopfen und
Malz verloren.

von Matthias H. (streno)


Lesenswert?

Arduinoquäler schrieb:
> Wenn du es nicht für nötig hältst die Anpassungen zu posten
> (auf die es ja schliesslich ankommt, die Lib darf ja als
> funktionfähig betrachtet werden) dann ist wohl Hopfen und
> Malz verloren.

In der Library mmc.h habe ich folgende Dinge geändert:
1
define MMC_Write     PORTB  //Port an der die MMC/SD-Karte angeschlossen ist also des SPI
2
#define MMC_Read     PINB
3
#define MMC_Direction_REG DDRB
4
5
#if defined (__AVR_ATmega2560__)
6
    #define SPI_MISO        3  //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist (DO)
7
    #define SPI_MOSI        2  //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist (DI)
8
    #define SPI_Clock       1  //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
9
    #define SPI_SS          0  //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist (CS)
10
  #endif

von Einer K. (Gast)


Lesenswert?

Matthias H. schrieb:
> In der FAT32 lib konfiguriere ich
> doch in den einzelnen Librarys meine Pins für CS/MISO/MOSI/CLK?

Wieso das denn?
Einzig CS musst du definieren.
Der Rest ist von der SPI Hardware deines Mega vorgegeben.

Meist liegt der CS des SD-Slot auf Arduino Pin 4

von Arduinoquäler (Gast)


Lesenswert?

Arduino F. schrieb:
> Meist liegt der CS des SD-Slot auf Arduino Pin 4

Er will / muss aber ohne Arduino (Framework) auskommen.
Er benutzt (offensichtlich) die hier downloadbare FAT
Sourcen-Ansammlung.

von Jan L. (ranzcopter)


Lesenswert?

Matthias H. schrieb:
> In der Library mmc.h habe ich folgende Dinge geändert:

in deiner main.c steht
  // timer0 config  **************************************************
  // initialisierung, auf jeden fall vor mmc_init(),

...und wo steht dann das "mmc_init()"?

von Einer K. (Gast)


Lesenswert?

Arduinoquäler schrieb:
> Er benutzt (offensichtlich) die hier downloadbare FAT
> Sourcen-Ansammlung.

Und dennoch sind die meisten/alle, für Arduino vorgefertigten SD_Slots, 
für den Betrieb an der Hardware SPI des betreffenden Boards 
angepasst/vorgesehen.

Wenn er SoftwareSPI auf ganz anderen Pins nutzen möchte, dann muss 
umgelötet werden.

Und genau das halte ich für eine völlig unsinnige Baustelle.
Der Umbau ist unsinnig.
SoftSPI zu verwenden ist unsinnig.

von Arduinoquäler (Gast)


Angehängte Dateien:

Lesenswert?

Matthias H. schrieb:
> In der Library mmc.h habe ich folgende Dinge geändert:
1
    #define SPI_MISO        3  //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist (DO)
2
    #define SPI_MOSI        2  //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist (DI)
3
    #define SPI_Clock       1  //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
4
    #define SPI_SS          0  //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist (CS)

Die Pin-Zuordnungen sind richtig, bis auf die Frage ob eventuell
SPI_MISO und SPI_MOSI vertauscht sind.

Dies muss man mit einem Multimeter durchmessen. Sie Bild.

SD_DO sollte also MISO sein,

und

SD_DIN sollte MOSI sein.

von Arduinoquäler (Gast)


Lesenswert?

Arduino F. schrieb:
> Und dennoch sind die meisten/alle, für Arduino vorgefertigten SD_Slots,
> für den Betrieb an der Hardware SPI des betreffenden Boards
> angepasst/vorgesehen.

Das ist hiermit auch der Fall.
ArduinoMega, Shield und TFT zusammen gewährleisten das.

Arduino F. schrieb:
> Wenn er SoftwareSPI auf ganz anderen Pins nutzen möchte,

Wo hat er davon gesprochen / geschrieben?

von Matthias H. (streno)


Lesenswert?

Jan L. schrieb:
> ...und wo steht dann das "mmc_init()"?

Ich hoffe, dass das nicht mein Fehler war. Kann das leider erst heute 
Abend testen.
Muss ich noch etwas anderes initialisieren?

von Einer K. (Gast)


Lesenswert?

Arduinoquäler schrieb:
> Wo hat er davon gesprochen


Hier:
> #define SPI_SS          0
Damit ist doch sicherlich PB0 gemeint.

Arduinoquäler schrieb:
> ArduinoMega, Shield und TFT zusammen gewährleisten das.
Wie gesagt: Die meisten SD Dinger verwenden Arduino Pin 4
(bitte bei dem Shield überprüfen)

Und Pin 4 ist PG5 und nicht PB0

PB0 sollte dann aber trotzdem auf OUTPUT gestellt werden.
Alternativ, dauerhaft auf HIGH gehalten werden.

von Arduinoquäler (Gast)


Lesenswert?

Arduino F. schrieb:
> PB0 sollte dann aber trotzdem auf OUTPUT gestellt werden.
> Alternativ, dauerhaft auf HIGH gehalten werden.

Das ist ja nicht zum Aushalten.
Schau dir die Sourcen an, da ist alles geregelt.
Hier wird nicht Arduino gesprochen sondern ATMEL-AVR.
Sprich: Ports und Pin-Wertigkeiten, keine Board-Nummern.

Arduino F. schrieb:
> Wie gesagt: Die meisten SD Dinger verwenden Arduino Pin 4
> (bitte bei dem Shield überprüfen)

Arduinoquäler schrieb:
> Das ist hiermit auch der Fall.
> ArduinoMega, Shield und TFT zusammen gewährleisten das.

von Arduinoquäler (Gast)


Lesenswert?

Arduinoquäler schrieb:
> Arduino F. schrieb:
>> Wenn er SoftwareSPI auf ganz anderen Pins nutzen möchte,

Arduino F. schrieb:
> Hier:
>> #define SPI_SS          0

Nein hat er nicht.
Und jetzt hör auf mit dem haltlosen rumgelabere.

von Einer K. (Gast)


Lesenswert?

Arduinoquäler schrieb:
> Und jetzt hör auf mit dem haltlosen rumgelabere.
Du scheinst dir ja sehr sicher zu sein, dass CS der SD Karte an PB0 
geht.
Ich kann dir nur sagen, dass meist PG5 verwendet wird.
Leider kenne ich das Layout/Schaltplan des Shields nicht,...

Arduinoquäler schrieb:
> Sprich: Ports und Pin-Wertigkeiten, keine Board-Nummern.
?

von Arduinoquäler (Gast)


Lesenswert?

Arduino F. schrieb:
> Du scheinst dir ja sehr sicher zu sein, dass CS der SD Karte an PB0
> geht.

Ich scheine nicht sicher zu sein, sondern ich weiss es.

Arduino F. schrieb:
> Ich kann dir nur sagen, dass meist PG5 verwendet wird.

Du kannst mir viel sagen wenn der Tag lang ist. Und das
ist wieder mal völlig nutzlos weil an den Bedürfnissen
des TO vorbei.

Arduino F. schrieb:
> Leider kenne ich das Layout/Schaltplan des Shields nicht,...

Dann lerne ihn kennen. Und labere nicht weiter hier herum
sondern interpretiere den Inhalt des Schaltplans.

von Matthias H. (streno)


Lesenswert?

Matthias H. schrieb:
> Jan L. schrieb:
>> ...und wo steht dann das "mmc_init()"?
>
> Ich hoffe, dass das nicht mein Fehler war. Kann das leider erst heute
> Abend testen.
> Muss ich noch etwas anderes initialisieren?

Okay okay, ich bin dumm, aber dafür überglücklich. Es lag wirklich am 
fehlenden mmc_init. Tausend dank dir und euch allen die mir helfen 
wollten!!!:)))))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.