Atmega und SD Karte wollen nicht so wie ich es will

#3949888
Lesenswert?

Hallo zusammen,

ich habe einen minimal Arduino auf einem Steckbrett aufgebaut (Atmega 
168 PU mit 16 Mhz Quarz + 2 x 22 pf Kondensatoren). Bisher lief alles 
was ich so damit gemacht habe HD 44780 Display ansteuern u. ä. Ich 
wollte als nächstes von einer SD Karte schreiben und lesen was leider 
fehlschlägt. Wenn ich die verwendete Karte an einen Arduino UNO oder 
DIeciemilla anschließe funktioniert die Karte.

Was mache ich falsch? Kann mir jemand helfen?

Ich habe die Pins wie in der folgenden Tabelle dargstellt belegt. 
Zwischen SD Karte und Atmega / Arduino habe ich  Spannungsteiler 
geschalten die aus den 5 V des Atmega ca. 3,3 machen. In umgekehrter 
Richtung (SD Karte - > Atmega) ist jeweils eine Diode in 
Durchlassrichtung.

Funktion  SD Karte  Arduino     AtMega
CS          1          4     6
MOSI          2          11     17
GND          3
+ 3,3V          4
SCK          5          13     19
GND          6
MISO          7          12     18

Der Arduino Sketch mit dem ich das beschreiben der Karte teste stammt 
aus den Beispeilsketchen der Arduino IDE. Schlägt das Beschreiben der SD 
Karte fehl blinkt eine LED:

#include <SD.h>

File myFile;

int LedPin = 8;
int sdPin = 4;

// initialize the library with the numbers of the interface pins

void setup()
{

  // On the Ethernet Shield, CS is pin 4. It's set as an output by
default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an
output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);
  pinMode(sdPin, OUTPUT);

  pinMode (LedPin, OUTPUT);
  int i = 1;

  if (!SD.begin(sdPin)) {
    // LED blinkt wenn Schreibvorgang failt

    do {
    digitalWrite (LedPin, HIGH);
    delay (200);
    digitalWrite (LedPin, LOW);
    delay (200);
    i++;
    } while (i < 10);

    return;

  }
  digitalWrite (LedPin, HIGH);
  // open a new file and immediately close it:
  // lcd.println("Creating example.txt...");
  myFile = SD.open("example.txt", FILE_WRITE);
  myFile.close();

}

void loop()
{
  // nothing happens after setup finishes.
}
#3949952
Lesenswert?

Stefan Müller schrieb:
> In umgekehrter
> Richtung (SD Karte - > Atmega) ist jeweils eine Diode in
> Durchlassrichtung.

Wieso das? Raus damit!

Stefan Müller schrieb:
> Schlägt das Beschreiben der SD
> Karte fehl blinkt eine LED:

Nach dem geposteten Code blinkt die LED, wenn die Initialisierung der 
Karte schon fehlschlägt. Außerdem vermisse ich das Setzen von SCK als 
Output Pin, falls das nicht schon die SD SPI Funktionen machen.
Gast #3949972
Lesenswert?

> Zwischen SD Karte und Atmega / Arduino habe ich  Spannungsteiler

Möp, schon falsch.

Für SD Karten brauchst du top saubere Signale, die bekommst du mit 
Widerständen und Dioden nicht hin. Hast du den Artikel 
http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten gelesen?

Am wenigsten Stress bekommst du, wenn du den Mikrocontroller mit 3,3V 
versorgst, dann brauchst du gar keinen Konverter.
#3950073
Lesenswert?

Jim Meba schrieb:
> Stefan Müller schrieb:
>> In umgekehrter
>> Richtung (SD Karte - > Atmega) ist jeweils eine Diode in
>> Durchlassrichtung.
>
> Wieso das? Raus damit!
>
> Stefan Müller schrieb:
>> Schlägt das Beschreiben der SD
>> Karte fehl blinkt eine LED:
>
> Nach dem geposteten Code blinkt die LED, wenn die Initialisierung der
> Karte schon fehlschlägt. Außerdem vermisse ich das Setzen von SCK als
> Output Pin, falls das nicht schon die SD SPI Funktionen machen.

- Mmhhh, warum funktioniert das ganze dann am original Arduino?
- SCK als Output sollte hiermit erledigt sein: pinMode(10, OUTPUT);
- Wie gesagt, ich habe ein Beispiel aus der Arduino Bibliothek genommen. 
Mich wundert das das ganze einmal funktioniert und einmal nicht.
#3950106
Lesenswert?

Das ganze funktioniert am original Arduino weil du viel Glück hattest. 
Für Sdcards brauchst du wie schon erwähnt ordentliche Signale.
Schau dir mal das https://www.adafruit.com/products/254 und das 
https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial 
an.

Bei deinem Nachbau wird es nicht funktionieren da du sämtliche Abblock-C 
vergessen hast. Wenn du welche einbaust könnte es mit viel Glück 
funktionieren.

Jst

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren