mikrocontroller.net

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


Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk K. (millenniumpilot)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Unfuture (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Unfuture (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ei, da warst Du ja etwas fixer als ich =)))))

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?...
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?!

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ei, da warst Du ja etwas fixer als ich =)))))"

Und als ich

Autor: Unfuture (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: RDSAnfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.