Hallo, ich benötige dringend Hilfe! Ich versuche seit Tagen einen SD-Datenrekorder zum laufen zu bringen. Ich habe dazu schon die AVR FAT32 Lib und die von Roland Riegel probiert. Am Anfang gingen beide aber nach kurzem herumprobieren beider Libaries ging gar nichts mehr SD-Karten habe ich 3 verschieden versucht, MEDION 1GB, SanDisk 128MB, SanDisk 1GB. Am Anfang gingen alle 3 SD Karte. Auch mit verschiedenen uC(Atmega644 an 14,7456MHZ) habe ich es dann nochmal getestet, immer das gleiche. Ich bekomme einfach keine Antwort von der SD Karte (MISO Pegel ist immer High) Als Pegelwandler 5V<>3V habe ich den SD-Conector von Display3000 und das SD-Card Interface von Conrad probiert. Ich verstehe nicht wieso der MISO Pegel immer High ist. Mein Programm sieht folgendermaßen aus: #include <avr/interrupt.h> #include "mmc_config.h" // Hier werden alle noetigen Konfigurationen vorgenommen, umbedingt anschauen ! #include "file.h" #include "fat.h" #include "mmc.h" // Hardware abhaengig // prototypen von funktionen in dieser datei static void timer0_init(void); // timer0 einstellungen, werte mit http://www.avrcalc.com/download.html berechnet! // aus diesen 3 werten ergibt sich die tick zeit, hier 10ms. // 4 = prescaler 256, 3 = prescaler 64, 5 = prescaler 1024, 2 = prescaler 8. wenn prescaler 0 = prescaler dann stoppt der timer #define TOP_OCR 0x8F #define START_TCNT 0x70 #define PRESCALER 0x05 // timer0 variable volatile uint8_t TimingDelay; // fuer mmc.c // ************************************************************************ ***************************************** ISR (TIMER0_COMPA_vect) { TimingDelay = (TimingDelay==0) ? 0 : TimingDelay-1; } // ************************************************************************ ***************************************** static void timer0_init(){ TimingDelay = 0; // initialisierung der zaehl variable TCCR0A = 1<<WGM01; // timer0 im ctc mode TIMSK0 = 1<<OCIE0A; // compare interrupt an TCNT0 = START_TCNT; // ab wo hochgezaehlt wird, OCR0A = TOP_OCR; // maximum bis wo gezaehlt wird bevor compare match TCCR0B = PRESCALER; // wenn prescaler gesetzt wird, lauft timer los sei(); // interrupts anschalten, wegen compare match } // ************************************************************************ ***************************************** void main(void){ uint8_t file_name [] = "test.txt"; uint8_t str [] = "Hallo Datei!"; uint32_t seek; timer0_init(); mmc_init(); fat_loadFatData(); if(MMC_FILE_CREATED == ffopen(file_name,'c') ){ ffwrites(str); ffwrite(0x0D); // new line in file ffwrite(0x0A); ffclose(); } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.