überlege gerade ob ich mir ne sd/mmc-karte und ne halterung kaufe und dann mal ein was damit programmiere. Es gibt ja schon viel code um fat und die karten aunzusprechen, ich lese aber öfters mal dass man beim speichern "sowieso" probleme kriegt weil der interne speicher nicht groß genug ist. Lohnt sich das überhaupt damit einen datenlogger zu bauen? Hab im moment hier ne atmega8, der soll nach einigen aussagen zu wenig speicher haben. Könnte man nicht einfach das ganze in speicherstücke zerhacken und den internen speicher wieder löschen? Ich kann mir irgendwie nicht vorstellen dass man damit keinen vernünftigen datenlogger bauen kann! danke für eure antworten.
wenn man nicht unbedingt auf speed setzt ist das RAM nicht so wichtig. einen 512 byte buffer sollte man eigentlich haben aber es geht auch ohne (wird dann aber sehr unschön). Man muss dann sehen, dass man die Daten, die man einliest abarbeitet ohne sie zwischen zu speichern. Schreiben ist daher problematisch, da man die FAT tabelle selber ändern muss und nur in 512 byte blöcken schreiben darf. Wenn du nun 32 byte ändern willst musst du den rest des 512 byte blocks zwischenspeichern um keine daten zu verlieren indem du sie versehentlich auf 0 setzt
Kommt drauf an was du alles loggen willst der ATMega8 hat 1K RAM Abschätzung: 512Byte Sektorpuffer 100 Byte Dateisysteminterne Variablen <- Das sollte problemlos schaffbar sein 100 Byte Stack sind 712Byte Also selbst mit einem ATMega8 gibt es im RAM kein Problem. Aus eigener Erfahrung, wenn du ein komplettes Dateisystem implementierst (open,read,write,chdir,findfirst...) dann kann es mit 8K Programmspeicher etwas eng werden, wenn dein Datenlogger auch noch ein wenig tun soll und Strings vorhält. Aber nicht benötigte Funktionen des Dateisystems muss man ja nicht einbinden.
Hi, also soweit ich das gelesen habe, kann man die Blockgrösse für die Karten selber bestimmen. Von 1 Byte bis 512 Byte (Oder sogar mehr?). Man muss einfach aufpassen, dass man die internen "Blöcke" der Karte (AFAIK 1kB) nicht überschreitet, daher nur Blockgrössen verwenden, durch die 1'024 ganzzahlig teilbar ist. Dem Dateisystem kann es ja eigentlich auch egal sein wie du schreibst und liest, Hauptsache die Struktur stimmt beim Auslesen mit dem PC. (Alle Angaben ohne Gewähr ;))
programmier das eigentliche Dateisystem aber lieber auf einem PC zugriff auf Karte über USBreader mit CreateFile Vorteile: geht schneller plattformunabhängig fördert ungemein die Aufteilung in mehrere Softwarelayer sauberer C code (gcc und Visual C kompatibel) bessere Debugmöglichkeiten du kannst gleich anfangen Wenn du mit einem Sektorpuffer arbeitest wird vieles unproblematischer
Also das stimmt nicht 100%, weil nicht alle Karten das unterstützen. Du kannst bei manchen die blocklänge fest legen aber ich glaube bei vielen ist sie fest auf 512b. Wenn du nur ein paar bytes lesen willst kannst du natürlich auch den 512b block lesen und die restlichen daten weg schmeissen.
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.