hallöle (wieder mal)
ich habe jetzt folgendes problem, ich möchte meine messwerte nun auch
auf einer speicherkarte (SD KaRTE 16 MB FAT16) ablegen... (hab auch
andere versucht)
Mein Setting:
1X Mega 2560
1X TFT LCD Mega Shield V1.0
1X TFT Touch Display mit SD kartenleser (TFT_320QVT)
Link:
http://www.amazon.de/SainSmart-Entwicklungsbrett-Arduino-ATMEGA-TFT-LCD-Schirm/dp/B008K7G702
nun mein problem:
ich mess und versuch seit stunden die richtige bin kombo zu finden...
ich versuche die sd karte erst ein mal über das standard "cardinfo"
preset
zu finden.. vergebens..
Code:
1
constintchipSelect=53;
2
3
voidsetup()
4
{
5
// Open serial communications and wait for port to open:
6
Serial.begin(9600);
7
while(!Serial){
8
;// wait for serial port to connect. Needed for Leonardo only
9
}
10
11
12
Serial.print("\nInitializing SD card...");
13
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
14
// Note that even if it's not used as the CS pin, the hardware SS pin
15
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
16
// or the SD library functions will not work.
17
pinMode(53,OUTPUT);// change this to 53 on a mega
18
19
usw.....
was mach ich falsch?
Hab ich da was anders zu machen?
im anhang ist noch ein bild wie weit ich bis jetzt selber gekommen bin..
Hallo Andi,
ich selber habe damit auch schon Stunden verbrannt.
Das Problem ist, dass die Witzbolde von Sainsmart bei Ihrem V1.0 Versuch
die Pins 51 & 52 für HardwareSPI vertauscht haben. Die Umdefinition per
SoftSPI bringt leider nix.
Hier das Assignment der SPI Pins selbst ausgemessen):
Sainsmart Shield V1.0
LCD Shield(35) - SD Out -> Arduino Mega(50) HW-MISO
LCD Shield(36) - SD CLK -> Arduino Mega(51) HW-MOSI vertauscht mit (52)
LCD Shield(37) - SD IN -> Arduino Mega(52) HW-CLK vertauscht mit (51)
LCD Shield(38) - SD CS -> Arduino Mega(53) SS
Ich habe die Widerstände auf dem Shield für Pin 51 & 52 abgelötet und so
angeordnet, dass ich die beidencPins mittels Umverkablung gerade ziehen
konnte.
Dadurch ist es nun möglich die Karte per CardInfo anzusprechen und der
Typ wird richtig erkannt. Dummerweise funktioniert das Auslesen des
Dateisystems (noch) nicht. Ich weiß leider noch nicht genau woran das
liegt...
Falls ich neue Erkenntnisse gewinne, gebe ich Bescheid.
Viele Grüße
Neofun
Und hier kommt nun auch die Lösung...
Wenn ich das richtig sehe hat Saintsmart eben nur eine Billiglösung für
die Anpassung der 5V am Mega auf die 3,3V (für Spannungsversorgung und
Signale) der SD-Card gewählt. Dadurch denke ich, ist die Performance der
SD-Karte stark eingeschränkt.
Während auf meinem anderen Shield von iTead Studio mit Spannungsregler
und CD4050 zur Pegelanpassung ein SPI Speed von mindestens HALFSPEED
möglich ist, geht bei meinem Sainsmart Shield halt nur ein Sechzehntel
SPI Speed.
Für die korrekte Funktion ist SD2Card.h um folgendende Zeilen zu
erweitern:
1
/** Set SCK rate to F_CPU/16. Sd2Card::setSckRate(). */
2
uint8_t const SPI_EIGHTH_SPEED = 3;
3
/** Set SCK rate to F_CPU/32. Sd2Card::setSckRate(). */
4
uint8_t const SPI_SIXTEENTH_SPEED = 4;
Dies sorgt dafür, dass zwei weitere, langsamere SPI Geschwindigkeiten
(SPI_EIGHTH_SPEED und SPI_SIXTEENTH_SPEED) zur Verfügung stehen.
Nun ist noch bei der Initialisierung der SD-Card z.B. im Sketch "SDInfo"
folgende Anpassung vorzunehmen:
1
if (!card.init(SPI_SIXTEENTH_SPEED, SdChipSelect)) {
2
sdErrorMsg("\ncard.init failed");
3
return;
Und schon antwortet die SD-Karte auch.
Vielleicht geht bei Dir auch noch SPI_EIGHTH_SPEED - musst Du halt
ausprobieren.
Wenn mir irgendjemand Zeit schenkt, schaue ich mal, ob sich das Shield
nicht Hardware-mäßg ein wenig frisieren lässt.
Mein erster Ansatz wäre die SD-Karte über einen Spannungsregler mit 3,3V
zu versorgen. Vermutlich zieht die Karte bei höheren SPI-Speeds mehr
Strom, dadurch wird der Spannungsabfall am Vorwiderstand zu groß und die
Versorgungsspannung der SD-Karte sinkt unter die zulässige Grenze.
Ich habe noch ein Bild von meinem Leiterbahnenpatch des Shields
angehangen. Ist relativ easy zu löten, wenn man nicht so einen 100W
Brenner als Lötkolben nimmt. Die verwendeten SMD Widerstände sind
10KOhm, falls Du doch einen kaputt machst.
Alternativ nimmst Du am besten gleich diskrete 10KOhm Widerstände lötest
die beiden SMD Widerstände von Pin 51 und 52 aus und machst die
Überkreuzung mit den diskreten Widerständen.
Viele Grüße
Thomas
Und hier noch ein Update...
Ich habe eine Stunde investiert, die aufgelöteten SMD Widerstände vom
Shield entfernt und einen Puffer-IC/Pegelwandler (74HC541, es geht aber
auch ein CD 4050) zwischengeschaltet.
Hierfür habe ich vier Gates verwendet davon drei für die eingehenden
Signale (vom Arduino an SD-Karte) MOSI/SD-IN, CLK & SS/CS und eines für
das ausgehende Signal (von SD-Karte zum Arduino) MISO/SD-Out.
Das Ergebnis ist, dass nun sogar SPI_FULL_SPEED mit dem TFT LCD Mega
Shield V1.0 möglich ist.
Ein Foto vom Aufbau habe ich angehangen - es ist nix schönes, aber ich
werde es auch gleich mit Heißkleber isolieren.
Die Vertauschung von Pin36 & 37 (CLK & SD-IN) habe ich nun auf der TFT
Platine aufgelöst und die Widerstände auf der Adapterplatine durch
Lötbrücken ersetzt.
Viele Grüße
Thomas
Hallo
Ich weiß das der Thread etwas älter ist. Aber ich bin selber grad dabei
beim selben Display einen Pegelwandler zu verbauen.
Kann mir jemand den Grund nennen warum hier ein zusätzliches Gate für
das Signal von der SD zum Arduino verwendet wurde?
Andi schrieb:> Kann mir jemand den Grund nennen warum hier ein zusätzliches Gate für> das Signal von der SD zum Arduino verwendet wurde?
Damit wird der SD-Pegel von 3V3 nach Arduino 5V angehoben. Und damit die
Schaltzeiten verkürzt. Denn die werden von 20..80% gemessen. Und 80% von
3,3V sind gerade mal 2,8V, was dann wieder zum schnellen Durchschalten
des Arduino-Eingangs schon recht wenig ist...
Andi schrieb:> wie kann das sein, der 541 wird ja mit 3,3V betrieben...
Dumm gelaufen... ;-)
Dann bringt das hier nur was, wenn der Ausgangstreiber der SD-Karte
"schwächer" ist als der der 541. Auf jeden Fall bringt der 541 hier aber
seine Laufzeit auch noch mit rein. Das ist eher ungünstig.
Hab ich das Foto richtig erkannt, da sind 10k Ohm Widerstände in den
Signalleitungen des SPI Bus? kein Wunder das es nur mit sehr geringen
Bitraten funktioniert. Ich hätte da höchstens 100 Ohm genommen - dann
muss der Controller natürlich zwangsläufig mit 3,3V betrieben werden.
Mann Leute,
das war hier mal so ein sauberer Thread...
Jetzt blickt keiner mehr durch und ich würde den Moderator bitten alle
Beiträge nach 2012 zu löschen.
Folgendes zur Klärung:
Die SD-karte verkraftet nur 3,3V hierfür sollte ein Spannungsregler und
kein 10KOhm und noch weniger ein 100Ohm Widerstand (!!!) eingesetzt
werden
Der 74HC541 ist ein in Puffer/Treiber, welcher durch entsprechende
Beschaltung Open Collector Ausgänge hat. Das heisst die positive
Spannung an seinem Ausgang kann durch Pull-Up Widerstände seine eigene
Versorgungsspannung übersteigen.
Die Modifikation erlaubt danach zuverlässig SPI_FULL_SPEED.
Also bitte einfach nur nachbauen & nutzen und nicht den Artikel hier
unübersichtlich machen. An den paar Euro 50 für den 74HC541 kann es doch
nicht liegen, oder? Danke.
Gruss
Thomas
Thomas Lentz schrieb:> Das heisst die positive Spannung an seinem Ausgang kann durch Pull-Up> Widerstände seine eigene Versorgungsspannung übersteigen.
Aber nicht sehr weit, denn das Datenblatt sagt, dass dann die Klemmdiode
zupackt:
1
Limiting Values
2
IOK output clamping current VO < -0.5 V or VO > VCC + 0.5 V - +-20 mA
D.h. auch ein 541, der einen Pullup nach 5V hat, wird nicht über 4V
kommen.
Ergo: die Schaltung mit dem aus 3,3V versorgten 541 ist auch Murks.
Sinnvollerweise versorgt man den uC auch mit 3,3V oder man nimmt
"richtige" Pegelwandler für die entsprechende Richtung...
Thomas Lentz schrieb:> Jetzt blickt keiner mehr durch und ich würde den Moderator bitten alle> Beiträge nach 2012 zu löschen.
Keinesfalls! Es besteht doch ein direkter Zusammenhang zur (eigentlich
fehlerhaften) Beschaltung...
@ Lothar Miller (lkmiller) (Moderator) Benutzerseite
>> Das heisst die positive Spannung an seinem Ausgang kann durch Pull-Up>> Widerstände seine eigene Versorgungsspannung übersteigen.
Aua! Open Drain Ausgänge mit Pull Up für schnelle Schnittstellen. Was
kommt morgen?
Die Rückkehr der Relaisrechner?
>D.h. auch ein 541, der einen Pullup nach 5V hat, wird nicht über 4V>kommen.
Für Murks reicht es.
>Ergo: die Schaltung mit dem aus 3,3V versorgten 541 ist auch Murks.>Sinnvollerweise versorgt man den uC auch mit 3,3V oder man nimmt>"richtige" Pegelwandler für die entsprechende Richtung...
Eben. 74LVC245A von 5->3,3V für SCK, MOSI, CS
von 3,3 -> 5V mit 74HCT125, MISO, gibt es als Single Gaste im SOT23
Gehäuse.
Damit hat man eine SOLIDE Lösung und SUPER Signale!
10k Pull Up an DO an der SD-Karte nicht vergessen, das ist bei der
Initialisierung ein Open Drain Ausgang!
Been there, done that.
Siehe Pegelwandler
@ neofun
ich hab deine Lösung nachgebaut. An der Aufnahme von deiner Platine
verknüpfst du den GND Pin mit dem Gehäuse der SD, während du die beiden
OE direkt mit GND der SD verbindest. Hat das einen bestimmten Grund? Auf
meinem Board ist das Gehäuse ptentialfrei, d.h es ist nicht mit GND
verbunden...
Hallo Falk,
> Aua! Open Drain Ausgänge mit Pull Up für schnelle Schnittstellen. Was> kommt morgen?> Die Rückkehr der Relaisrechner?
Als ich das letzte mal geschaut habe, hatte der Arduino Mega 20 MHZ,
jetzt erklär mir noch mal bitte Deinen Punkt...
Ist 20MHZ Prozessortakt <> Schnittstellengeschwindigkeit schnell?!? :-)
Den µC mit 3,3V versorgen kann nur jemand vorschlagen, der noch nicht
mit dem Arduino Mega Board gearbeitet hat. Da steht glaube ich für jeden
lesbar 7V min (Zur Sicherheit & für die Unbelehrbaren:
http://arduino.cc/en/Main/arduinoBoardMega)
Natürlich kann man für den Rückweg ein eigenes Gate spendieren und auf
5V hochleveln - wofür? Wir lösen gerade eine Spannungsregelung per
Widerstand und eine Pegelanpassung mit Widerständen ab. Von
DOUBLE_FULL_SPEED_SPI habe ich noch nichts gelesen...
@Andi
Meine SD-Card Schirmung ist nicht potentialfrei.
Es spricht natürlich nichts dagegen, den GND (Pin10) mit den anderen
"ge-groundeten" Pins (OE1/2) direkt zu verbinden.
Gruss
Thomas
@ Thomas Lentz (neofun)
>Als ich das letzte mal geschaut habe, hatte der Arduino Mega 20 MHZ,>jetzt erklär mir noch mal bitte Deinen Punkt...>Ist 20MHZ Prozessortakt <> Schnittstellengeschwindigkeit schnell?!? :-)
Ein AVR macht bei 20 MHz Takt MAXIMAL 10 MHz SPI Takt. Ob der ARDUINO
das bei SPI_FULL_SPEED WIRKLICH macht, weiß ich nicht.
>Den µC mit 3,3V versorgen kann nur jemand vorschlagen, der noch nicht>mit dem Arduino Mega Board gearbeitet hat. Da steht glaube ich für jeden>lesbar 7V min (Zur Sicherheit & für die Unbelehrbaren:>http://arduino.cc/en/Main/arduinoBoardMega)
Er meinte die Spannung für den PROZESSOR, nicht das Board! Das könnte
man ändern, einfach anderen Spannungsregler drauf. Dann geht aber
maximal 8 oder 10 MHz.
>Natürlich kann man für den Rückweg ein eigenes Gate spendieren und auf>5V hochleveln - wofür?
Damit es SOLIDE ist! Das läuft dann auch bei 10 MHz problemlos mit 1A
Signalqualität und maximalem Störabstand. Dafür geb ich gern 50 Cent
aus!
>Wir lösen gerade eine Spannungsregelung per>Widerstand und eine Pegelanpassung mit Widerständen ab.
Ja, eben DARUM!
> Von DOUBLE_FULL_SPEED_SPI habe ich noch nichts gelesen...
@Neofun
Hast du an deinem Board sonst noch was verändert? Ich habe den HC541
eingebaut identisch wie bei dir, doch es will auch bei SPI_SPEED_LOW
nicht klappen.
Ich verwende die Lib von Hennig Karlsen. Wenn keine SD im Schacht ist,
erhalte ich die Meldung "File not found". Ist eine Karte drin, bleibt
der Bildschirm einfach schwarz...
Ich hab nun 3 verschiedene SDs probiert, natürlich alle <2GB und mit
Fat16 formatiert.
ok, nun funzts.
Mein Ardu Shield hat die Versions Nummer 1.0. Darum dachte ich, SD CLK
und SD IN seien vertauscht. Tatsächlich muss es sich aber bei dem Shield
bereits um eine upgedatete Version handeln, da das Problem schon behoben
wurde.
Mann, manchmal sucht man sich doof und dämlich.
danke trotzdem für die Hilfe.
Übrigens, SPI Full Speed funktioniert problemlos.
@ Andi (Gast)
>Mein Ardu Shield hat die Versions Nummer 1.0. Darum dachte ich, SD CLK>und SD IN seien vertauscht. Tatsächlich muss es sich aber bei dem Shield>bereits um eine upgedatete Version handeln, da das Problem schon behoben>wurde.
Was sind das denn für Knalltüten? Erst schaffen sie es nicht, ein
Produkt gescheit durchzutesten bevor sie es verkaufen und dann verkaufen
sie eine NEUE, korrigierte Version mit EXAKT der gleichen
Versionsnummer?
Thomas Lentz schrieb:> Den µC mit 3,3V versorgen kann nur jemand vorschlagen, der noch nicht> mit dem Arduino Mega Board gearbeitet hat.
Ich musste es. Mein "Kleiner" musste damit für die Schule was machen...
> Da steht glaube ich für jeden lesbar 7V min
Auch so ein Designfehler...
> die Unbelehrbaren:
Sind augenscheinlich die Bastler, die den uC auf den Markt geworfen
haben. Wozu soll man eine Aufsteckkarte mit 7V versorgen, wenn man z.B.
auf dem Baseboard schon 5V hat? Denn andersrum funktioniert es wegen des
schwächlichen Spannungsreglers sicher nicht: ich kann nicht mein
Baseboard aus dem Arduino versorgen...
Falk Brunner schrieb:> Was sind das denn für Knalltüten?
Das habe ich mich bei dem Arduino-Zeugs auch schon gefragt. Eigentlich
ein Produkt, das man wirklich sinnvoll verwenden könnte. Das dann aber
trotzdem irgendwie nur halb fertig (gedacht) und grün auf den Markt
geworfen wurde. Gerade mal so "hingebastelt" halt.
Das geht schon bei der kuriosen Anordnung der Steckerleisten los. Mal
für 5 Cent mitgedacht und es wäre was Besseres rausgekommen...
Hallo zusammen,
ich glaube da sind wir uns alle wieder einig:
Ein durchgehendes Design ist etwas anderes. Dass die Asiaten nun dafür
günstige (teils auch billige) Erweiterungsboards machen ist schön, aber
da sitzen wohl auch nur in den seltensten Fällen Ingenieure mit Zeit und
Muse dran. Dadurch gibt es halt auch solche "Ausreisser".
Vielleicht hat sich da ja was mit den neuen Arduinos getan, mir fehlte
leider bisher die Zeit zu schauen und das letzte Projekt hat einen
Raspberry benötigt. Da sieht dann wieder alles ganz anders aus - ist
aber auch eine andere Preisklasse, mehr Strom & mehr Platzbedarf.
Viele Grüße
Thomas
Hallo,
habe auch so ein saint smart TFT LCD Mega Shield V1.0 zugelegt, im
November 2014.
Ich habe ein Problem: Ich möchte die gemessenen Werte, die auf dem TFT
Display angezeigt werden, auf die SD Karte speichern. Ich habe hier
schon hin und her probiert. Ich steige da nicht mehr durch.
Es funktioniert nicht. Ich muss dazu sagen, dass ich neu in diesem Fach
bin.
Ich brauche das für eine Projektarbeit.
Die gespeicherten Werte sollen in einer Excel Tabelle dann dargestellt
werden.
Es geht um den Wert vom Druck und dem Wert von der Spannung.
Ist das Problen wie oben beschrieben bei den neueren Modelln schon
behoben?
Danke schon mal für eure Hilfe.
Hier ein kleiner Auszug aus dem sketch.
analogRead(A0);
analogRead(A1);
{ int sensorValue = analogRead(A0); //liest das
Eingangssignal Von U-Dose
sensorValue1= analogRead(A1); // liesst
Eingangssignal vom Drucksensor
voltage=analogRead(sensorValue);
voltage=sensorValue* (5.0 / 1024.0); //
Umrechnungsfaktor vom Analogenert für Arduino
dtostrf(voltage, 5, 2, voltageBuf); // float in char
myGLCD.print("Spannung [V]" , 10, 10l) ;
myGLCD.print(voltageBuf , 10, 30); //
Anzeigen auf TFT
mbar=analogRead(sensorValue1);
mbar=sensorValue1*(5.0/1024)*1000-1080.38; //
Umrechnungsfaktor vom Analogsignal zum Spannungswert berücksichtigt
Umgebungsdruck
dtostrf(mbar , 5, 2, mbarBuf); // float in char
myGLCD.print("Druck[mbar]" , 10, 110) ;
myGLCD.print(mbarBuf, 10, 130); // Anzeigen auf
TFT
delay (500); // Pause von 500ms
} // end if
} // void ende
Hallo,
ich weiß alter Thread.
Aber könnte mir jemand die genaue Pinbelegung des Shields zukommen
lassen.
Habe es mal nach der Doku probiert das ich nur diese Pins
Durchgeschaltet wo laut Doku benötigt werden.
Hintergrund ich wollte nicht so viele Pins verbrauchen da ich noch paar
für andere Sachen benötige.
Aber da tut sich nichts. Wenn ich es direkt drauf Stecke geht alles.
Blöde Konstruktion wenn das Shield drauf sitzt kommt man an die anderen
Anschlüsse und ISP Port nicht dran.
Danke
LG
Michael