Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR an SD (libfat?)
Versuche jetzt schon seit einiger zeit eine SD am avr zum laufen zu bringen, leider klappt das überhaupt nicht. Könnte mir jemand einen schaltplan und ein beispiel (C/C++) schicken wie es bei ihm funktioniert?? Und weis jemand wie man libfat (devktitpro) in das projekt einbindet um die lib zu nutzen?? Mein compiler meckert bis jetzt nur.
Bin über jede hilfe dankbar!
mfg
http://www.ulrichradig.de/home/index.php/avr/mmc-sd
für die beschaltung und
http://de.wikipedia.org/wiki/FAT16#FAT16
fürs dateisystem
die befehle fürs ansteuern der karte selber hab cih aufm arbeitsrechner liegen und hier finde ich gerade die seite nciht mehr
EDIT: gefunden ^^
http://www.maxim-ic.com/appnotes.cfm/an_pk/3969
ich hab mich bis zum verzeichnis durchgearbeitet ... hänge im moment daran LFN-verzeichniseinträge über mehrere sektorgrenzen hin EFFEKTIV auszulesen
Die beschaltung und die befehle sind nicht schlecht, aber mit der lib geht es bei mir nicht, die MBR signatur oder so wird nicht gefunden, und das bei jeder karte die ich verwende(vom PC werden sie einwandfrei erkannt).
Und teils kann ich gar keine verbindung zur karte herstellen.
mfg
dann ist entweder n wurm in der lib, oder etwas stimmt an deiner beschaltung nicht .... leiderleider hab ich mein programm auf arbeit gelassen ... sonst würd ich es gern mit dir teilen
Habe jetzt die komplette schaltung auf 3,3V umgelegt und jetzt geht es.
nur noch ne kleine Frage:
Und zwar muss ich den dateinamen so angeben:
char datei[12]="Test txt";
und dann diese funktion aufrufen:
fat_str(datei);
Quelltext zu fat_str:
char * fat_str(char *str){
unsigned char i;
unsigned char j = 0;
unsigned char c;
char tmp[12]; // tmp string zum einfacheren umwandeln
strcpy(tmp,str);
for(i = 0;i < 11;i++) str[i]=' '; // als vorbereitung alles mit leerzeichen füllen
str[11]='\0';
i=0;
do{
c=toupper(tmp[j]);
if(c=='\0')return str;
if(c!='.')str[i]=c;
else i=7;
i++;
j++;
}while(i<12);
return str;
}
Ich würde das aber gern in der Form "Test.txt" schreiben, und ordner in "Ordner/Test.txt" usw. Weiß jemand wie das geht??
Ach ja, wie funktioniert SoftPWM? OC1 und 2 werden ja durch die karte schon belegt.
mfg
du müsstest theoretisch nur eine schleife schreiben, die bis zum '.' oder zum 8ten zeichen deines übergebenen String (hier "Test.txt") durchzählt
DANN
prüfen ob denn ÜBERHAUPT ein punkt da ist (bei verzeichnissen gilt die 8_3 regel nicht) ... ist kein punkt da, bis zum 11ten zeichen ab der 8ten position weiterkopieren oder mit leerzeichen auffüllen (wenn am ende des strings eine 0 '\0') steht (achtung, den eingabestring nicht weiter absuchen, alles was danach kommt iss nur müll)
ist ein punkt da, die ersten 8 bytes mit leerzeichen auffüllen, wenn noch nicht 8 zeichen eingelesen wurden, ODER wenn 8 zeichen da sind, die 3 zeichen HINTER dem punkt an die position 8 9 und 10 schreiben ...
abschliessend die 0 an position 11 nicht vergessen (die positionen fangen bei 0 an, desweghen 0-11 = 12 zeichen
versuch das in einen übersetzbaren code umzusetzen dann haste deine methode TXTtoFilename(char* Str, char &Name[12]); (geht das so überhaupt? naja ist nur der deutlichkeit wegen)
Also müsste ich über eine stringfunktion(mir fällt die bezeichnung grad nicht ein...) alles bis zum punkt lesen und das in das array schreiben und den rest mit leerzeichen auffüllen, dann die 3 zeichen nach den punkt in 8, 9, 10 schreiben und ne 0 bei 11?
mfg
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.