Hallo, und schonwider eine SD-Karte........Sorry, aber ich komm nicht
weiter.
Ich habe mir ein Board wie im Anhang gebaut, und wollte nun die SD-Karte
Testen. Die Anschlüße sind nur auf Stifftleisten gezohgen, die wie bei
dem STK-500 über brücken mit dem AVR-Port verbunden werden. Benutzt wird
ein Mega644 mit 3,3V und 16 Mhz. Ich habe die Lib von Ulrich Radig
genommen und habe folgendes Problem. Es wird manchmal angezeigt, das die
Karte gefunden wurde, obwohl noch garkeine im Slot steckt. Das passiert
aber nicht immer. Wenn eine Karte im Slot steckt, wird sie nicht sicher
oder garnicht , weil er ja auch eine findet, wenn keine drinn ist.
Hättet Ihr einen ansatz wo der fehler liegen könnte ?
Danke !!!
So, ich habe nun je einen 10K pullup am CS,DO und CLK , 2X100nF an der
versorgung, und es spinnt immernoch. Ist mein Code überhaupt richtig ???
P.S. ist mein erster ............
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include "lcd.h"
#include "mmc.h"
#include "fat.h"
#include "usart.h"
int main()
{
usart_init(9600);
lcd_init(LCD_DISP_ON);
while ( mmc_init() !=0)
{
lcd_clrscr();
lcd_puts("Keine Karte!!");
}
lcd_clrscr();
lcd_puts("Karte gefunden!!");
while(1);
return 0;
}
Hi,
ist das ein "normaler" Mega 644? Im Datenblatt ist eine Grafik, die die
maximale Frequenz bezogen auf die Versorgungsspannung darstellt. Ganz
genau genommen dürftest du bei 3,3V mit max. 13MHz takten... Ich halte
es für eher unwahrscheinlich, dass das dein Problem ist, aber du
solltest vielleicht mal einen Test mit einer kleineren Taktfrequenz
machen um sicher zu gehen.
Viele Grüße
>wo habe ich denn einen Fehler gemacht ?
Dein gepostetes Programm macht folgendes:
USART wird initialisiert
LCD wird initialisiert
bis hierher ist noch alles OK
Dann startest du eine Endlosschleife, die erst dann abgebrochen wird,
wenn die Funktion mmc_init eine "0" zurückliefert. Solange diese
Schleife läuft, wird tausende male pro Sekunde das Display gelöscht und
gleich danach wieder mit "Keine Karte!!" wieder beschrieben. Ist das
sinnvoll?
Der Hauptfehler kommt aber erst danach:
Wenn die Funktion mmc_init das erste mal eine 0 liefert, die Schleife
also verlassen wird, schreibst du ein einziges mal "Karte gefunden!!"
ins Display. Gleich danach kommt mit while(1); eine Endlosschleife, die
nie mehr verlassen wird, dein µC hängt sich auf und macht gar nichts
mehr.
naja den µC "aufhängen" mach ich bei tests genauso... entweder er darf
noch mit einer LED blinken um zu zeigen, daß er "am ende" ist oder eben
einfach einfrieren wenn das programm durchlaufen ist.
Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini
ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte
eingesteckt ist........
Vor einiger Zeit hatte ich ein ähnliches Problem. Dabei ging es darum,
die SD-Karte sektorenweise auszulesen und als PWM Audio abzuspielen.
Manchmal tat das Ding, was es sollte und nach irgendeiner
Softwareänderung (an einer ganz anderen Stelle) plötzlich nicht mehr.
Nach stundenlangem suchen bin ich dann darauf gekommen, mal dem GCC auf
den Zahn zu fühlen. Mit -O0 bis -O3 lief es, mit -Os nicht. Ich habe
dann nicht weiter hinterfragt, was dahinter steckt sondern einfach die
mmc-Library mit -O3 und den Rest mit -Os kompiliert und gut war.
Gruß
Chris
>Wie compeliere ich denn einzelne libs unterschiedlich ? So gut kenn ich>mich noch nicht mit AVR-Studio aus......
Brauchst du nicht zu machen.
>Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini>ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte>eingesteckt ist........
Das dürfte ein Software oder Hardwareproblem sein.
Wenn an MISO ein Pullup hängt und keine Karte drin ist,
dann bekommst du immer 0xFF über SPI. Klares Zeichen
für keine Karte drin.
Ist 16 Mhz bei 3,3V nicht etwas viel für den 644? Laut Datenblatt ist
das außerhalb der Spezifikation.
Hast Du die Möglichkeit es mit einem kleineren Quarz zu testen (evtl.
auch dem internen Quarz)?