ich versuche seit einer Stunde meinen Pro Mini mit einer SD Karte zu verbinden.
Der Sketch:
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //using digital pin 4 on arduino nano 328
#include <TMRpcm.h> // also need to include this library...
TMRpcm tmrpcm;
char mychar;
void setup(){
tmrpcm.speakerPin = 9;
Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized:
Serial.println("SD fail");
return; // don't do anything more if not
}
tmrpcm.play("Test.wav"); //the sound file "music" will play each time the arduino powers up, or is reset
}
Ich hoffe mal, dass er ein Breakout genutzt hat mit integrierten Pegelwandlern. Ansonsten haste das Dinge gebacken. Versorgungsspannung 3V3 vom Uno nehmen, einfache Spannungsteiler zwischen MOSI(Arduino) - MISO(SD), SCK und CS sollte ausreichen. Der MISO(Arduino) sollte auch noch bei 3V3 etwas erkennen. Schön ist die ganze Sache natürlich nicht.
Ich erspare mir inzwischen den ganzen Ärger mit den 3V3 Komponenten. Meine Boards laufen so weit möglich alle mit 3V3. Kann somit ohne extra Pegelwandler Bluetooth, DS3231 (wobei die sogar für 5V geht), SD Karten, etc betreiben, wo sonst unnötig Hühnerfutter für benötigt würde.
8MHz sind mir vollkommen ausreichend. Bislang noch bei keiner Applikation Geschwindigkeitsprobleme bekommen, bzw. es lies sich zumindest weitesgehend optimieren das alles ging.
uwefed:
Die SD-Karte läuft mit 3,3V. Du kannst sie nicht direkt am Arduino anschließen. Funktioniert sie überhaupt noch?
Mein SD-Board hat 5V und 3,3V Pins. Ein Pegelwandlern ist auf dem Board.
Muss ich an MOSI, MISO, CS, SCK dann auch noch irgendwas "wandeln"? Laut Beschreibung (instructables.com) nicht.
JulHa:
Mein SD-Board hat 5V und 3,3V Pins. Ein Pegelwandlern ist auf dem Board.
Muss ich an MOSI, MISO, CS, SCK dann auch noch irgendwas "wandeln"? Laut Beschreibung (instructables.com) nicht.
Mit dem UNO läuft es ja auch bei 5 Volt...
Wenn ein fehlerhaftes Programm auf mancher Hardware trotzdem läuft, dann fällt das aber eher unter "Intelligenz des Materials" und spricht nicht für den Programmierer.
Wenn Du nicht den Hardware-Chipselect des Boards (bei Atmega328-Boards Pin-10) für die angeschlossene SPI-Hardware verwendest, muß der Hardware-Chipselect trotzdem auf OUTPUT gesetzt sein, BEVOR Du die SPI-Hardware initialisieren kannst.
Korrekt also ungefähr so:
pinMode(SS,OUTPUT);
delay(10);
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized:
Serial.println("SD fail");
return; // don't do anything more if not
}
Wenn Du das bisher nicht gemacht hast und es mit der Änderung in der Software nicht gleich funktioniert, mache das Board zunächst mal für drei bis zehn Minuten komplett stromlos, überprüfe in der Zeit nochmal die Verkabelung, und dann auf ein Neues mit der richtigen Initialisierung.
JulHa:
Schließe ich das SD Board dann so
MOSI - 11
SCK - 13
MISO - 12
oder so an?
MOSI - MOS
SCK - SCK
MISO - MIS
Seit wann und wo hat ein "Arduino Pro Mini" Board SPI-Pins, die mit Text beschriftet sind?
JulHa:
Und CS an 4 oder 10?
Beides ist möglich, Du mußt es nur per Software korrekt ansteuern.
Wenn Du einen anderen Pin nimmst als Hardware-CableSelect (das ist bei Atmega328-Boards Pin-10), mußt Du aber vor der Initialisierung der SPI-Hardware den Hardware-CableSelect auf OUTPUT setzen wie von mir oben bereits geschrieben.
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 10 //using digital pin 4 on arduino nano 328
#include <TMRpcm.h> // also need to include this library...
TMRpcm tmrpcm;
char mychar;
void setup(){
Serial.begin(9600);
tmrpcm.speakerPin = 9; //11 on Mega, 9 on Uno, Nano, etc
pinMode(SS,OUTPUT);
pinMode(10,OUTPUT);
delay(10);
if (!SD.begin(SD_ChipSelectPin))
{
Dann zeige mal irgendwann vor, welche SD-Kartenhardware Du verwendest.
Ebay-Link, Link zum Shop des Verkäufers, Datenblatt, Dokumentation beim Hersteller etc.
Irgendwas in der Art.
Deine Aussage "Mein SD-Board hat 5V und 3,3V Pins. Ein Pegelwandlern ist auf dem Board." glaube ich nicht so ganz, insbesondere wenn es jetzt doch ein oder zweimal funktioniert hat und dann wieder nicht.
Das ist jetzt sicherlich nicht tröstlich, aber bei meinen eigenen Versuchen mit einem Arduino (ebenfalls Pro Mini (Klon)) funktionierte von 2 SD-Cardreader Platinen nur eine (beide ohne integrierter Pegelwandler, diese machte ich selbst), und auch diese Platine lief nur mit einer einzigen SD-Karte von den 5 von mir getesteten.
Alle waren gleich formatiert.
Falls Du Dir wirklich sicher bist mit den Spannungspegeln, daß Du damit keine SD-Karte zum abrauchen bringst, würde ich es evtl. mit verschiedenen SD-Karten versuchen. Vorsichtshalber aber keine teuren.
DAS ist interessant. Mit dem selben Modul? Da verwendest du auch nur die 5V ?
Das Foto und der Schaltplan in deinem Link zum Card-Reader-Modul sind übrigens offensichtlich unterschiedlich, aber beide haben zweifelhafte Spannungswandler.
Das Modul hat KEINEN Pegelwandler, wer hat Dir das erzählt?
Das Modul hat mal gerade einen Spannungswandler, um die 3.3V Stromversorgung der SD-Karte sicherzustellen, falls Du nur eine 5V-Stromversorgung bereitstellen kannst.
Für die Wandelung der Pegel mußt Du bei diesem Modul selber sorgen.
Und dann brauchst Du Spannungsteiler aus je zwei Widerständen:
Von den Arduino-Pins 10, 11, 13 je 1.8K und 3.3K gegen GND schalten und den Mittelabgriff dieser Spannungsteiler an das SD-Modul anschließen.
Spannungsteiler Pin-10 ==> CS
Spannungsteiler Pin-11 ==> MOSI
Spannungsteiler Pin-13 ==> SCK
Du brauchst also sechs Widerstände, je 3x 1.8K und 3x 3.3K.
Diese drei Leitungen darfst Du bei diesem SD-Modultyp nicht direkt mit 5V Pegel vom Arduino zum SD-Modul führen, sonst grillst Du die Eingänge der SD-Karte mit Überspannung!
Ja, bei UNO-Boards funktioniert es ziemlich oft auch mit den falschen Signalpegeln mit diesen Modulen, bei anderen Boards meistens nicht.
michael_x:
kein Vergleich zu einem ordentlichen SD-Modul mit richtigem Pegelwandler.
Tja, beim Modulkauf einen Euro zu sparen zahlt sich nicht immer so richtig aus.
Aber ob ein SD-Kartenmodul mit Pegelwandler kommt (keine Zusatzschaltung beim Anschließen am 5V Arduino notwendig) oder ob kein Pegelwandler sondern nur ein Spannungswandler drauf ist und man eine Zusatzschaltung aus 6 Widerständen benötigt, um das Teil mit guten Funktionsaussichten an ein 5V-Board anzuschließen, sollte man beim Einkauf möglichst wissen.
Hier eine kleine Info, wie man es erkennen kann:
Ein Pegelwandler ist ein kleines "Tausendfüßler-IC" auf der Platine und benötigt eine gewisse Mindestanzahl an Anschlußbeinchen. Ich zähle mal durch:
2 Pins Stromversorgung für den Spannungswandler
2 Pins für die beiden Referenzspannungen, zwischen denen gewandelt wird
8 Pins für 4 Leitungen mit zu wandelndem Pegel (Eingang, Ausgang)
= 12 Pins Minimum
D.h. wenn sich auf dem SD-Kartenmodul nicht mindestens ein Tausendfüßler-IC mit mindestens 12 Beinchen (oder mehr) befindet, dann hat das SD-Kartenmodul wohl kaum einen Pegelwandler dabei.