Forum: Mikrocontroller und Digitale Elektronik SD-Card + Dateiarbeit + BASCOM


von Sven Scholz (Gast)


Lesenswert?

Hallo,

ich habe jetzt meinen Traum von einer SD Card am ATmega8 verwirklicht. 
Mir fehlen jetzt nur noch die nötigen Programmzeilen

Mein aktuelles Programm sieht so aus, das ich über einen DS1820 alle 10 
Minuten Temperaturwerte erfasse und diese über UART am PC ausgebe. 
Zusätzlich ist jeder Werte mit einem Zeitstempel versehen. (etwa 
0610231145 10.4)

Ich möchte nun diese Textzeile(n) zusätzlich auf meiner Karte 
abspeichern. Am liebsten wäre es mir, wenn diese einfach in eine 
*.txt-Datei auf der SD-Karte hinzugefügt werden würde.

Wenn ich die Karte am PC formatiere und eine "daten.txt" anlege, ist es 
mir dann möglich diese Datei über Bascom zu verändern? (ATmega8)

Soweit erstmal... Da folgen bestimmt noch einige Frage, weil das Thema 
zur Zeit noch Neuland für mich ist. Alles andere (RTC, ADC, usw.) habe 
ich aber schon zum Laufen gebracht.

von Dirk K. (millenniumpilot)


Lesenswert?

Hallo Sven,

helfen kann ich Dir leider nicht, habe aber bald genau das selbe vor wie 
Du. Die SD-Slots habe ich mit Hilfe dieses Forums schon.
Hast Du den schon einmal bei roboternetz.de nachgefragt?

Gruß Dirk

von Sven Scholz (Gast)


Lesenswert?

Mir kommen allmählich Zweifel, ob ich überhaupt ein FAT-System mit dem 
ATmega8 aufbauen kann?
AVR-DOS von Bascom braucht anscheinend mindestens 1,2kB. Der ATmega hat 
leider nur 1kB...

Also, ist es Möglich komfortabel Daten zu lesen und zu schreiben auf 
einer SD-Karte?

von Sven Scholz (Gast)


Lesenswert?

Da fällt mir noch was ein.
Muss ich eigentlich unbedingt ein Dateisystem erstellen, um den 
Flashspeicher zu nutzen? Kann ich die Daten nicht im "Rohformat" 
ablegen?
Wie kann ich dann die Daten am PC auslesen?

Bitte helft mir...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du musst nicht unbedingt ein Dateisystem verwenden, dann aber ist es 
erforderlich, daß Du auf dem PC ein für das Auslesen geeignetes Programm 
verwendest.
Das kann einerseits ein Hexeditor à la WinHex oder HexWorkshop sein, 
oder aber ein von Dir zu schreibendes Programm, das die SD-Karte als 
"raw device" ansteuert.

Ein "Hack", der die Sache vereinfacht, ist das Überschreiben einer 
bereits vorhandenen Datei auf einer SD-Karte. Die wird dazu mit FAT16 
formatiert und eine Datei im Root angelegt, die die gewünschte Größe 
haben soll.

Um die Datei zu überschreiben (ohne daß sich deren Größe ändern kann), 
muss Dein µC nur noch sehr rudimentäre Dateisystemfunktionen besitzen, 
er muss nur die Blockadresse des ersten Blocks ermitteln, in dem die 
Datei gespeichert ist.

Bei einer frisch formatierten Karte ist diese Adresse immer dieselbe, so 
daß als gesteigerter Hack diese Adresse auch von Hand mit einem 
Hexeditor ermittelt werden kann und als Konstante ins Programm eingebaut 
werden kann.

Das aber ist ein Hack, also alles andere als fehlertolerant oder gar 
stabil; auf der PC-Seite musst Du aufpassen, daß die Datei nie 
beschrieben, sondern immer nur gelesen wird ...

von Unfuture (Gast)


Lesenswert?

Hi,

du musst nicht zwingend ein Dateisystem implementieren. Es reicht,
mit dem PC auf einer frisch formatierten(!) SD-Karte eine Textdatei
mit der Größe anzulegen, die Du garantiert nie überschreiten wirst.
Dann kannst Du mit einem Hex-Editor nachsehen, wo die Datei beginnt
(ok, hier wären Kentnisse des Dateisystems von Vorteil, da Du so
leichter feststellen kannst, ob die Datei fragmentiert ist. Sollte
sie aber für gewöhnlich nicht sein, wenn die Karte frisch formatiert
ist.
Der Rest ist trivial...Du kennst den Sektor, an dem die Datei beginnt
und brauchst nur noch Sektorweise hintereinander die Daten in den
vorhandenen Datei-Container zu füllen.

LG,
Unfuture.

von Unfuture (Gast)


Lesenswert?

Ei, da warst Du ja etwas fixer als ich =)))))

von Marco (Gast)


Lesenswert?

Nichts gegen dieses Forum, aber ich kann dir da auch nur roboternetz.de 
ans Herz legen.
Z.B.: 
http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=18719&highlight=sd
Mit der Suche wird man wohl noch mehr finden.

Die Karte ohne Dateisystem beschreiben (und lesen) geht wohl. Aber dann 
kan man sie nicht einfach so am PC auslesen glaube ich mal gelesen zu 
haben.

Aber zur Not kannst du dir ja einen zweiten M8 oder so nehmen, der die 
Daten über RS232 an den PC sendet. Oder gleich deinen M8 erweitern?!

von Marco (Gast)


Lesenswert?

"Ei, da warst Du ja etwas fixer als ich =)))))"

Und als ich

von Unfuture (Gast)


Lesenswert?

Hi Marco,

stimmt, das geht fix hier... =)

>Die Karte ohne Dateisystem beschreiben (und lesen) geht wohl. Aber dann
>kan man sie nicht einfach so am PC auslesen glaube ich mal gelesen zu
>haben.

Und ohne Dateisystem geht, Rufus hat es ja schon erwähnt, einfach als
RAW Device öffnen, geht mit Winhex aber nur lesend in der kostenlosen
Version.
TinyHexer kann auch schreiben ( www.mirkes.de ) ist aber in der
Bedienung und vom Funktionsumfang nicht so mächtig wie Winhex.

@Sven:

Alle 10 Minuten ne Temperatur...vieleicht reichen da schon EEPROMs.
Sind ja nicht viele Daten und dafür gleich eine SD-Karte mit etlichen
MBytes und FAT-Dateisystem? Ein serielles EEPROM mit 64 kBit sollte da
doch reichen. Obwohl, die 1GB SD-Karte gibts bei Reichelt für lässige
15,- (hat mich gestern bei der Bestellung auch in den Fingern gejuckt)
und dann könnten noch seine Urenkel die geloggten Daten auswerten.
Der Vorteil der SD-Karte ist aber, dass Du mobiler bist und auch mit
zwei Karten arbeiten könntest und immer eine Karte die Daten loggt,
währen die andere am PC ausgewertet wird.

LG,
Unfuture.

von Sven Scholz (Gast)


Lesenswert?

Vielen Dank für die vielen Anregungen. Doch bis jetzt wurde immer noch 
nicht geklärt, ob sich ein FAT-Dateisystem mit einem ATmega8 realisieren 
lässt?

Ein kleines Programmbeispiel für den Schreibzugriff im RAW-Modus wäre 
auch nicht verkehrt. Geht das auch unter BASCOM? Dann wüßte ich 
zumindest schonmal , wie ich meine Werte loggen könnte. Vermutlich muss 
auch in 512Byte Blöcken geschrieben werden. Also sollte doch möglichst 
der interne RAM mit 512Byte gefüllt und wenn dieser voll ist, die Daten 
zur speicherkarte gesendet werden oder?

Vielen DANK.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

In der Codesammlung ist ein Dateisystem (FAT16) auf einem AVR 
beschrieben. Ob das auch in einem Mega8 passt, kann ich nicht sagen (hab 
gerade keine Lust nachzugucken). Ob man sowas mit Bascom hinbekommt, 
bezweifle ich aber sehr, das Bascom noch mehr Overhead erzeugt als C...

von Martin Thomas (Gast)


Lesenswert?

Chan's FatFs in der "Tiny"-Variante nutzt nur einen Buffer. RAM des 
ATMega8 sollte dafuer ausreichen. Vgl. 
http://elm-chan.org/fsw/ff/00index_e.html . Ich kenne den "Tiny"-Code 
nicht genau (bisher nur die "groesse" Variante auf LPC2000 und AT91SAM7S 
ausprobiert) aber normalerweise hat der Verzicht auf einen "FAT-Buffer" 
beim Dateischreiben auch viele Schriebzugriffe auf ein und den selben 
Sektor (betroffener Teil der FAT) zur Folge. Nicht so gut, da Flash 
endlich oft wiederbeschreibbar ist. Kartencontroller ersetzen aber 
ueblicherweise automatisch defekte Speichersektoren durch welche aus der 
Reserve.

von Marco (Gast)


Lesenswert?

>Ein kleines Programmbeispiel für den Schreibzugriff im RAW-Modus wäre
>auch nicht verkehrt. Geht das auch unter BASCOM?

Hast du meinem Beitrag mit dem Link überlesen oder einfach nur nicht den 
Link benutzt?

von RDSAnfänger (Gast)


Lesenswert?

Hallo

hab zwar nichts mit dem Beitrag zu tun, möchte sowas aber auch bauen.
Wie sieht das eigentlich aus mit SPI ich programmiere darüber schon den 
AVR kann ich den nach anschluss der Karte überhaupt noch programmieren? 
Oder kann ich SPI erst gar nicht verwenden?

von Marco (Gast)


Lesenswert?

Du brauchst du Anschlüsse ja wirklich nur dann, wenn er programmiert 
wird. Und zu der Zeit läuft das Programm ja nicht. Die SD-Karte kannst 
du solange ja rausnehmen. Ich weiss nicht ob da ggf. noch Pullup oder so 
störend mit dranhängen, aber selbst das sollte kein Problem sein. Die 
"Erfindung" ist ja nicht neu, sondern wurde schon mehrmals genutzt.

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.