mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8 an SD-Karte: Endlosschleife nur woran liegts


Autor: Ralf G. (sense)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mein Versuch einen Temperatur-Logger zubauen bereitet mir etwas Kopf 
zerbrechen. Ich scheitere an dem richtigen schreiben auf die SD-Karte.
Da ich für meinen Zweck ein FAT-FS für etwas oversized halte, will ich 
was eigenes schreiben. Da ich gelesen hab, dass man den Sektor 0 nicht 
überschreiben soll, schreib ich jetzt in das 1. und 2. Byte eine 
zusammengesetzte 16bit Zahl die den aktuellen Sektor angibt, in den der 
Controller schreiben soll. In die anderen Sektoren soll der Controller 
dann immer seine Messwerte speichern im Format 'dd.MM|hh:mm|ttt\n'. Das 
macht der Controller auch aber etwas zuhäufig. Im angehängten Quelltext 
soll er eigentlich das einmal in den betreffenden Sektor schreiben und 
dann nichts mehr machen, bzw eine Kontrolled blinken lassen. Aber egal 
was ich mach es landet immer folgendes auf der Karte:
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|hh:mm|ttt.
dd.MM|h.¬X....ÿH
...ñ............
................
................
................
................
Wenn ich die aktuelle Sektornummer ändere schreibt er das auch in den 
angegebenen Sektor aber eben nicht einmal sondern xmal und bricht dann 
anscheinend ab.

Die Schaltung ist aufgebaut mit einem TS2940 für die 3,3V, zwischen 
IN-GND und OUT-GND ist ein 10µF Elko, die SD-Karte hängt am Hardware-SPI 
des ATmega8, der mit 3,3V läuft, angesteuert mit der mmc-lib von Ulrich 
Radig. Controllertakt ist 1MHz(interner Takt), Blockkondensator mit 
100nF direkt an GND und VCC des Controllers, Pullup am CS und DO der 
SD-Karte und 2 LEDs an PB0 und PD7 zur Diagnose. Das ganze ist auf einem 
Steckbrett aufgebaut. SD-Karte ist eine Canon mit 32MB(SDC-32M).
Ich hoffe ihr habt eine Idee wo hier der Fehler versteckt ist.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char fs_buffer[512];

unsigned char sync_fs()
{
  unsigned char sector_number[512];

Addiere mal 512 + 512 dann dazu nochn bissl Stack,
andere globale Variablen...

Dein Speicher ist überlastet.

Autor: Ralf G. (sense)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke jetzt funktionierts :).
Gibt es eigentlich eine Möglichkeit seine Programme auf solche Sachen 
zutesten ? Weil eigentlich hätte ich erwartet, dass solche Sachen das 
AVR Studio anzeigt, hat es aber nicht.
Außerdem hätte ich noch eine Frage und zwar wie ich am einfachsten einen 
Array leere. Ich hab das mit folgender Funktion realisiert oder geht das 
noch einfacher/besser/effizienter ?
for(uint16_t n = 0;n < 512;n++)
  {
    fs_buffer[n] = 0x00;
  }

Autor: Arne F. (-arne-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfacher geht's mit memset()

warum kein FAT-FS auf dem µC? Hab mich auch erst gescheut, aber es passt 
auch auf den mega8 und macht das Auslesen am PC einfacher.

Autor: Ralf G. (sense)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neja ich hab mich durch die ganzen Libs die es gibt gewühlt und 
irgendwie so grob rausgelesen, dass das ganze mit einem Atmega8 schon 
knapp wird. Deshalb hab ich mich entschieden was eigenes zu entwerfen 
für meinen Zweck, ohne viel Overhead, da ja der Atmega auch noch genug 
Platz für weiter Funktionen haben muss. Geplant ist noch ein RTC(I2C), 
one Wire Temperaturfühler und später vllt mal ein RFM12 Transreciever. 
Da hatte ich etwas Bedenken ob ich das in den Mega reinbekomme. Ich 
könnte natürlich einen größeren Mega nehmen aber hier liegt gerade nur 
ein Atmega32 herum und der ist mir vom Gehäuse her zu groß.

Mal was anderes noch, wie sinnvoll ist es 4*AA-Batterien in Verbindung 
mit dem TS2940(Low-Drop-Step-down-Regler 3,3V) zuverwenden, um meine 
Schaltung zu versorgen ? Also so von der Seite Wirkungsgrad und 
ausleeren der Batterien gesehen.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Dein Low-Drop-Regler mit 100mV Drop-Spannung auskommt, reichen auch 
3 AAA-Zellen oder eine LiPo. Von TI gibt es einige Regler im SOT23-5 
Gehäuse, die dafür geeignet sind. Der Wirkungsgrad liegt dann je nach 
Ladezustand der Akkus bei 75...90% und wird bei leereren Akkus besser!

Autor: Arne F. (-arne-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den TS2940 kenne ich nicht, aber ich habe gute Erfahrungen mit dem 
ZLDO330 gemacht (mit einer Li-Ion Zelle.

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.