www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte + Stromsparen funktioniert nicht (Ablauf Byte schreiben besser verstehen)


Autor: Sebastian Albrecht (xxlxx)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche mal mein problem zu umschreiben.
Ich habe einen Datenlogger mit DS1820 + ATMEGA8 + SD-Karte + 3,3V 
gebaut.
Stromsparen geht schon ganz gut. Aber wenn ich daten auf die SD karte 
schreibe bleit die Karte in einem Modus stehen wo sie 50mA zieht auch 
wenn keine daten mehr kommen.

der Ablauf:
- SD karte init (5mA)
- Karte und Datei (fat16) vorbereiten (5mA)
   - schleife -->
         - Ds1820 auslesen und Byte für byte auf SD karte schreiben (50mA)
         - 1 Minute pause (hier liegt das problem) Prozessor 0,5mA + Karte 50mA
   - wieder oben anfangen Ds1820 auselsen oder mit Taste beenden
- Mit taste wurde bendet (0,5mA)
- Datei Schließen  (0,5mA)
- warten was kommt ... (0,5mA)

ich denke das problem liegt darin das in der 1 minuten pause die Datei 
offen bleibt und die karte im Schreibmodus ist.

Versuche das problem zu lösen :
- karte strom abschalten ==> datei verloren
- daten pins abschalten ==> datei verloren

was kann ich noch machen? kann man die karte in den Idle modus bringen?
vergisst sie wo sie weiter machen muss ?

ich nutze die Fat 16 tools von " MrData.zip". das kann ich auch nicht 
ändern denn auf dem Mega8 ist nur wenig platz für sowas.

Wer hat eine Idee wie ich die karte auf IDLE / Sleep oder so bekomme?

Autor: Oberlehrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Idee: Karte kann nur Blöcke von 512 Bytes aufeinmal schreiben, d.H. muss 
die einzelbytes buffern. Während der Buffer befüllt wird, geht kein 
Idle-Mode.
Lösungsidee:
Die 512 Bytes im AVR buffern, blockweise schreiben.

Autor: Sebastian Albrecht (xxlxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

aber ein ATmega8 hat nicht soviel RAM?
oder wo soll ich das Puffern ?

wenn das die einzigste lösung ist habe ich ein Problem?

Autor: hdd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der AtMega8 hat 1K SRAM, das reicht doch wunderbar

Autor: Sebastian Albrecht (xxlxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja richtig ... Aber :

AVR Memory Usage
----------------
Device: atmega88

Program:    6322 bytes (77.2% Full)
(.text + .data + .bootloader)

Data:        920 bytes (89.8% Full)
(.data + .bss + .noinit)


da geht nix mehr.
wie bekomme ich bei WINAVR raus was in data so liegt ????

EDIT : FAT16 benutzt schon " u08 sharedmem[512]; "
       wenn ich alles reduziere reichts trotzdem nicht.

Was tun ?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie bekomme ich bei WINAVR raus was in data so liegt ????

Da brauchste nicht lange suchen:

#define TX_BUF_SIZE 256  // lasts for at least 80ms on full MIDI data 
load (for

// Variables
u08 sharedmem[512];
u08 tx_buf[TX_BUF_SIZE]

Die beiden Arrays machen schon mal 768 Bytes.

Denk mal über einen ATMega328 nach.

Autor: Sebastian Albrecht (xxlxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andere Idee ?

ist es besser ich schreib immer 512 byte.
also datensatz + xx leerzeichen bis 512 voll sind und dann pause.
sollte gehen ? ist zwar platzverschwendung aber die karte ist groß 
genug.
an einen anderen mega habe ich auch schon gedacht. aber jetzt ist alles 
schon aufgebaut und funktioniert. Ist der 328 pin gleich?

Autor: Sebastian Albrecht (xxlxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

das mit den 512 bytes schreiben geht nicht. danach kommt kein Idle.
aber ich habe etwas gefunden.

original code war so
- mmc_write_start(fat_filedata.startsect);
- schleife
    - byte schreiben 
    - pause
- schleife ende 
-mmc_complete_write();

Wenn ich die schleife so aufbaue funktioniert es:
- Schleife
    - mmc_write_start(fat_filedata.startsect);
    - byte schreiben
    - mmc_complete_write();
    - pause
- schleife ende 

jetzt spare ich zwar strom aber die datei hat falschen inhalt.

kann mir hier jemand unter die arme greifen und sich mal die write 
befehle ansehen. ich glaube das geht schon man muss nur die "File Zeiger 
werte" übertragen. deshalb kommen die bytes durcheinander.

danke für hilfe

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>Data:        920 bytes (89.8% Full)
>(.data + .bss + .noinit)

>da geht nix mehr.

I2C EEProm wäre eine Möglichkeit, wenn I2C frei ist/wäre.

Muss das auch so machen um , bei Stromausfall,  keine Daten zu 
verlieren.
Wenn ich mich recht entsinne sind Typen bis 128 KByte unterwegs.

Viel Erfolg, Uwe

Autor: sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich habe einmal meine Fat Routinen  soweit gekürtzt das nur noch die 
minimalen befehle im code stehen. ich blicke leider nicht furch was 
MRData da so macht. Ich möchte gerne 1 bis X bytes schreiben und dann 
die 512 byte zu machen (standby versetzen). Wenn dabei platz verloren 
geht das ist egal. mir geht es nur darum 512 byte blöcke zu machen. ich 
habe das jetzt einige tage probiert. aber ohne erfolg. es ist auch nicht 
so das man einfach 512 byte mit "0" macht und die karte geht in den 
standby. erst wenn ich den block schließe und beende geht die karte in 
den standby.

ich stelle mir so etwas vor :
- Init
- File vorbeiten 
- Schleife 
          - Byte schreiben (50mA)
          - block schreiben und zu machen (50mA)
          - pause (4mA)
          - nächsten block öffnen (anhängen) (50mA)
          - wieder von oben beginnen 
- ende schleife
- datei in Fat abmelden und schließen 

Kann mir da jemand unter die Arme greifen?
ich glaube die Routinen sind auch schon alle in MRDate vorhanden.
ich kann sie nur nicht richtig nutzen.

im Anhang mein abgespeckter Code

Danke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo also ich habe mir das Programm man angeschaut und wollte es jetzt 
mal ausprobieren. Habe aber keinen Schaltplan. Hat vll einer den 
Schaltplan? Hab schon im Programm nachgesehen ob ich etwas finden kann 
aber leider nichts gefunden. LG

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.