MMC Yazma yardım

Başlatan thenorthstar, 26 Nisan 2011, 16:12:14

thenorthstar

Merhaba Arkadaşlar:
Fat16 ile deneme yapıyorum fakat şöyle bir sorunla karşılaçtım.
Proteusda sorunsuz çalışıyor. Fakat devreye taktığımda dosyaları oluşturuyor fakat aşağıdaki resimdeki gibi uyarı veriyor.

#include "V1.h"
#include "sd_spi.c"
#include "fat16.c"
#include "string.h"
#include <stdlib.h>
#define DEBUG_DLG

////////////////////////// prototipos de funciones /////////////////////////////

void wait_card_eject();
int8 registrar();
int8 crear_archivo();
void wait_0sec();
//!void leer_canales();
void SetearRangos();

////////////////////////////////////////////////////////////////////////////////
unsigned int32 RecordIDX=0;

char RangoCanal1=0;
char RangoCanal2=0;
float AdcLsb=0;

signed int16 adc_raw=0;
//signed int16 adc_raw2=0;

float canal1=1.0;
float canal2=2.0;

float Coef11=1;
float Coef12=1;

float Coef01=0;
float Coef02=0;

float Coef1P1=1;
float Coef1P2=1;

unsigned int16 rawP1=0;
unsigned int16 rawP2=0;

float P1=0;
float P2=0;

char lbl_adc1[16]="";
char lbl_adc2[16]="";

char lbl_pulsos1[16]="";
char lbl_pulsos2[16]="";

char SFN[13]="";

char TxtBuf[128]="";

char flag_timer=0;
char logtimer=0;

char DLG_STATUS=0; //1 cuando está registrando.

unsigned int16 intervalo=1; //cada 2 segundos

unsigned int16 i=0;
////////////////////////////////////////////////////////////////////////////////
#INT_timer0
////////////////////////////////////////////////////////////////////////////////
void  INT_EXT_isr(void) 
//Interrupcion por flanco generada por el RTC DS3232
{

if(logtimer==intervalo)
   {      
   logtimer=0;
   flag_timer=1;
   //fprintf(COM2,"Log!\r\n");
   }

  logtimer++;
  
  if(DLG_STATUS==1)
  output_toggle(SD_RUN_LED);
  else
  output_low(SD_RUN_LED);
  
}//int_EXT1
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void setup()
{
//!  setup_oscillator(OSC_32MHZ);
//!  setup_adc_ports(NO_ANALOGS|VSS_VDD);
//!  setup_adc(ADC_OFF);
//!
//!  setup_wdt(WDT_OFF);
//!  setup_timer_0(T0_EXT_H_TO_L|T0_DIV_1);
//!  setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);

//!  ds3232_init();
//!  setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
//!  ext_int_edge(1,H_TO_L);   
//!  ENABLE_INTERRUPTS(INT_EXT1_H2L);
//!  ENABLE_INTERRUPTS(GLOBAL);

//!  output_low(SD_LED);
//!  output_low(SD_RUN_LED);
//!  output_low(SD_ERR_LED);
  
//===================Kesme AYarı========================================  
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64); // Timer0 ayarları yapılıyor
set_timer0(23);   // TMR0 değeri belirleniyor
enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver
//=======================================================================  
  
  
}//setup
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
void main()
{
setup(); //inicializa el hardware
 lcd_init();

while(true)
  {

  #ifdef DEBUG_DLG
  fprintf(DEBUG_COM,"SD/MMC Kart Takın\r\n");
  #endif
  

   while(!DetectSD())//Tarjeta insertada? -->NO
   {
    
    lcd_gotoxy(1,1); printf(lcd_putc,"MMC TAKIN");
   
   }//while TARJETA_NO_INSERTADA
   
  //Le doy tiempo a la tarjeta para estabilizar la alimentacion 
  delay_ms(300);
  
  #ifdef DEBUG_DLG
  fprintf(DEBUG_COM,"Kart Takıldı\r\n");
  #endif
  
  if((SDCard_Init()==1) && (FAT_Init()==1)) //si se inicializan la SD y la FAT
    {
    #ifdef DEBUG_DLG
    fprintf(DEBUG_COM,"SD FAT16 Hazır.\r\n");
    #endif
    
    if(crear_archivo()==1)

      {
      RecordIDX=0;
    fprintf(DEBUG_COM,"Kayı Deneme\r");
      #ifdef DEBUG_DLG
      fprintf(DEBUG_COM,"Kayıt Başlıyor\r\n");
      #endif

      while(DetectSD()) //y mientras haya tarjeta insertada
        {
        
        DLG_STATUS=1;
    
        if(registrar()==0)
       
          {
          #ifdef DEBUG_DLG
          fprintf(DEBUG_COM,"SD Kart Yazma Hatası\r\n");
          #endif
          wait_card_eject();
          }
         
        }
      DLG_STATUS=0;
      
      #ifdef DEBUG_DLG
      fprintf(DEBUG_COM,"Tarjeta expulsada.\r\n");
      #endif
      
      }//Y se pudo crear un archivo para registrar,
    }//Si se inicializó la SD y FAT
  else
    {
    #ifdef DEBUG_DLG
    fprintf(DEBUG_COM,"SD Kart Başlancıç Hatası\r\n");
    #endif
    
    wait_card_eject(); //si no se inicializa, error!.
    }
  }//while(1)
}//main
//==================================================================
////////////////////////////////////////////////////////////////////////////////
void wait_card_eject()
//Señaliza el error de la tarjeta y espera a que se saque.
{

#ifdef DEBUG_DLG
lcd_gotoxy(1,1); printf(lcd_putc,"Kart Bekleniyor");
fprintf(DEBUG_COM,"Kart Takılması Bekleniyor\r\n");
printf("SD/MMC Kart Takın\r\n");
#endif
   // lcd_gotoxy(1,1); printf("\f");
    lcd_gotoxy(1,2); printf(lcd_putc,"Kart Takın");
while(DetectSD()) //Mientras esté la tarjeta insertada, hace nada.
  {
  output_high(SD_ERR_LED);
  delay_ms(100);
  output_low(SD_ERR_LED);
  delay_ms(100);
  }
}//wait_card_eject()
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
int8 registrar()
{

//!  leer_canales();

  if(flag_timer==1) //cuando se cumple el intervalo
    { 
     RecordIDX++;
      //sprintf(TxtBuf,"%02u/%02u/%02u \t%02u:%02u:%02u \t%02.2f \t%02.2f\r\n",
     //leer_dia,leer_mes,leer_anio,leer_hh,leer_mm,leer_ss,canal1,canal2);
      sprintf(TxtBuf,"Deneme1 \tDeneme2 \tDeneme3\tDeneme4\r\n");
      if(FAT_OpenAddFile(SFN,0,TxtBuf)==0)
        {
        return(0); //Retorna error.
        printf("registrar\r\n");
        }
    
      #ifdef DEBUG_DLG
      fprintf(DEBUG_COM,"Idx: %06Lu\r\n",RecordIDX);
      #endif
      
      flag_timer=0;
      //printf("registrar=OK\r\n");
    }

return(1); //retorna OK..
}//registrar()
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
int8 crear_archivo()

{
int32 SectFound=0;
int16 FAddDir=0;
int16 FNClus=0;
int32 FSizeFile=0;

i=1;
for(i=1;i<513;i++) //del 1 al 512, buscamos el primer archivo que NO exista
  {
    sprintf(SFN,"Deneme%02lu.txt",i);
    lcd_gotoxy(1,1); printf("\f");
    lcd_gotoxy(1,1); printf(lcd_putc,"Deneme%02lu.txt",i);
 
 if(FAT_FindFileDir(SFN,0,ARCHIVO,SectFound,FAddDir,FNClus,FSizeFile)==0) //Si no se encuentra..
    {
  
    sprintf(TxtBuf,"Tarih\tSaat \tADC_1 \tADC_2\r\n");
    FAT_CreateFile(SFN,0,TxtBuf);
    
    #ifdef DEBUG_DLG
    fprintf(DEBUG_COM,"%s"" Dosyası Oluşturuldu.\r\n",SFN);
    #endif

    return(1);
    //break;
    }//si no se encontró
  }//del 1 al 512
    #ifdef DEBUG_DLG
    fprintf(DEBUG_COM,"No hay entradas libres para crear archivo.\r\n");
    #endif
return(0); //no hay posibilidad de crear ningun archivo, retorno con error.
}//crear_archivo()

      



Aşağıdaki uyarıyı veriyor.




proteus also working properly.



http://www.4shared.com/file/ZTNDdooy/SD_Fat16.html