Forum: Mikrocontroller und Digitale Elektronik Dateierzeugung wie von Geisterhand (ATMega32)


von Johannes (menschenskind)


Lesenswert?

Hallo

Ich habe eine SD-Karte mit einer test.txt darauf. Diese habe ich 
geöffnet und deren Inhalt mittels einer Schleife in 2 neue txt-Dateien 
kopiert.
Das selbe wollte ich dann auch mal mit einer MP3-Datei probieren.

Doch nun das Problem: auf der SD-Karte befanden sich da die test.txt und 
die test.mp3. Doch mein Controller erstellte fleißig jedes Mal 2 
txt-Dateien, auch als ich zuerst die test.txt löschte und danach sogar 
die Karte formatierte.
Den Code hatte ich natürlich so angepasst, dass .mp3-Dateien erzeugt 
werden sollten.

Wo könnten sich da alte Programmreste festgesetzt haben?
Ich hab jetzt mal die Betriebsspannung gekappt. Danach funktionierte es.
Ne Ahnung, womit das zusammenhängt?

Dankeschön

von MeinerEiner (Gast)


Lesenswert?

Mit Code könnte man diese Programmreste natürlich besser sehen.

von Johannes (menschenskind)


Lesenswert?

naja, ich nutze den FatFS Tiny von Chan.

Und die Kopierroutine sieht dann so aus:
1
int main(void){
2
  FRESULT result;
3
    sei(); 
4
5
//  PORTB=255;
6
//  DDRB=255;
7
  //DDRC=255;
8
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);
9
10
  TCCR2=(1<<WGM21)|7;    // 10,8kHz
11
  OCR2=(XTAL_CPU/102400)-1;
12
  TIMSK|=(1<<OCIE2);
13
14
  f_mount(0, &fs);
15
  copy_file();
16
  for(;;);
17
}
18
19
unsigned char copy_file(void)
20
{
21
     WORD br, bw;         // File R/W count 
22
     int Index=1;
23
  char file[]="test.mp3";
24
  char filetype[]=".mp3";
25
  char prefix[]="Song";
26
  char filename[100]={};
27
28
29
    // Open source file on the drive 1
30
    f_open(&fsrc, file, FA_OPEN_EXISTING | FA_READ);
31
32
    for(Index;Index<3;Index++){
33
    
34
    sprintf(filename, "%s%d%s",prefix,Index,filetype);
35
  
36
    // Create destination file 
37
    f_open(&fdst, filename, FA_CREATE_ALWAYS | FA_WRITE);
38
39
    // Copy source to destination
40
    for (;;) {
41
      res = f_write(&fdst, buffer, br, &bw);
42
      if (res || bw < br) break;   // error or disk full
43
      res = f_read(&fsrc, buffer, sizeof(buffer), &br);
44
      if (res || br == 0) break;   // error or eof
45
      }
46
47
    f_close(&fdst);
48
  }
49
50
    // Close open files
51
    f_close(&fsrc);
52
}

der buffer hat eine Größe von 800

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.