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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.