PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SD Karte an Atmega32 mit der Bibliothek von Roland Riegel



crabtack
23.09.2012, 15:15
Hallo!
Ich bin dabei einen kleinen Datenlogger zu bauen, der seine Daten auf eine SD Karte speichern soll, dabei möchte ich die Bibliothek von Roland Riegel verwenden.
Aber es klappt leider nicht :(
Ich verwende eine SD Karte von San Disk und habe die Karte so beschaltet, wie Ulrich Radig:
http://www.ulrichradig.de/home/index.php/avr/mmc-sd

Mein Code sieht so aus:



#include <avr/io.h>


#include "sd_raw.h"
#include "sd_raw_config.h"
#include "sd_raw.c"


#ifndef F_CPU


#define F_CPU 16000000UL
#endif
#include <util/delay.h>


#define LED_red 3
#define LED_green 2


int main(void)
{
int init = 0;
int avaiable = 0;
DDRB = (1 << DDB3) | (1 << DDB2);


while (1)
{


init = sd_raw_init();


if (init == 1)
{
PORTB |= (1<<LED_green);
}
else
{
PORTB |= (1<<LED_red);
}
_delay_ms(1000);
}

}


Leider geht immer nur die Rote LED an :(

In den anderen Dateien habe ich nichts geändert, außer den Chip select Pin, der ist bei mir an PB0.

Für Hilfe währe ich sehr Dankbar.

Gruß
Olaf

wkrug
24.09.2012, 08:34
Ich benutz eine für CodeVision umgewandelte Form dieser Bibliothek, auch ich hatte damit Probleme.
1. Ging meine Bibliothek nur für Karten mit maximal 1GB, weil bis dahin die Cluster nur 512Byte haben. Bei größeren Karten sind die Cluster 1kByte groß.
2. Der Define Wert Superfloppy ( #define superfloppy 0 ) war bei mir ursprünglich 1, dann ging die Fat nicht.
3. Der ATMEGA hat zu wenig Raum für den Puffer.
DU brauchst einen Empfangspuffer der mindestens einen kompletten Cluster aufnehmen kann, sonst gehen Dir Daten verloren.

Der Grund dafür ist, das das Schreiben auf die SD Karte sehr lange dauert. Da aber auch in dieser Zeit Daten reinkommen, kann und wird es passieren, das dieser Empfangspuffer, der beim ATMEGA32 maximal so um die 300Byte haben kann, überläuft. Bei 38400 Bit/s wars bei mir auf jeden Fall so.

Ich hab da jetzt einen ATMEGA 644 drin, der ist Pinkompatibel zu ATMEGA32 hat aber mehr Speicher.
Somit konnte der Empfangspuffer auf 514Byte aufgemotzt werden und die Datenverluste waren weg.

Wenn Du magst schick ich Dir den kompletten Quellcode zu, der ist aber Leider für CodeVision AVR.
Schick mir einfach ein PN mit Deiner E-Mail Adresse.

crabtack
24.09.2012, 16:53
Hallo!
Vielen Dank für deine Antwort.
Das mit Superfloppy probiere ich gleich mal aus.
Karten, die größer als ein GB sind sollten ja wenigstens erkannt werden :)
Und den Datenverlust kann ich erstmal vernachlässigen, dann vielleicht später wirklich auf einen atmega 644 umsteigen.

EDIT: Floppy umändern brachte nichts, ich hoffe, dass ich aus deinem Code schlau werde :)

Gruß
Olaf