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.
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
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?
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...
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 ...
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.
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?!
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.
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.
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...
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.
>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?
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?
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.