Forum: Mikrocontroller und Digitale Elektronik SD-Karte Atmega644 Probleme


von Benjamin F. (benjaminfuchsw)


Lesenswert?

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
Noch kein Account? Hier anmelden.