18F872 ile MMC kart sorunu

Başlatan gazili38, 29 Nisan 2010, 12:32:27

gazili38

 Merhaba Arkadaşlar;
Arkadaşlar Microc ile yapmaya çalıştığım bir proje var okunan sıcaklığı saniyedebir mmc ye kaydemek istiyorum,doğan ibrhim abimizin yazdığı kodu derlerken hata veriyordu kodda düzenlemeler yaptım.Proteus dosyasında denediğimde sıcaklık.mmc dosyasına okuduğum sıcaklık değerlerini yazıyor.Devreyi yaptım fakat gercekte çalıştıramadım,  :'( kodlardamı bi hatamvar yardımcı olabilirmisiniz arkadaşlar.Yardımlarınızı bekliyorum arkadaşlar.


http://rapidshare.com/files/381499922/mmc.rar

// MMC module connections
sbit Mmc_Chip_Select           at LATD2_bit;  // for writing to output pin always use latch (PIC18 family)
sbit Mmc_Chip_Select_Direction at TRISD2_bit;
// eof MMC module connections

           char filename[]="SICAKLIKTXT";
           unsigned char ch1,ch2;
           unsigned char sicaklik[10];
           char    mmc_error;
          unsigned char k;
           //
           // analog port AN0'dan sicaklığı oku
           //
          void sicakligi_oku()
           {
             unsigned long Vin,Vdec,Vfrac,Vfac;
             unsigned char op[12];
             unsigned char i,j;


             vin= adc_read(0);        // an0'dan sicaklığı oku
             vin=488*vin;            // scale up the result
             vin=vin/10;             // sicaklığı santigrata dönüştür
             vdec=vin/100;           //tam sayi bölümü
             vfrac=vin%100;          // kesirli bölümü
             longTostr(vdec,op);    // sicaklık "op" karakter dizisinde

             //
             //
             //

             j= 0   ;
             for (i=0;i<=11;i++)
             {
             if (op[i]!=' ')
             {
             sicaklik [j]=op[i];
             j++;
             }
            }

            //
            // sıcaklığın nn.m sekline koy ve sonuna yeni satır ilave et
            //

            sicaklik[j]='.';             // "." ilave et
            ch1=vfrac/10;                // ksirli bölüm
            ch2=vfac%10;
            j++;
            sicaklik[j]=48+ch1 ;          // ascı karaktere dönüştür
            j++;
            sicaklik[j]=48+ch2  ;         // ascı karaktere dönüştür
            j++;
            sicaklik[j]=0x0d;            //yeni satırın başına git
            j++;
            sicaklik[j]=0x0a;            // yeni satıra ilave et
            j++;
            sicaklik[j]='\0';
            }

            //
            // ana program başlangıcı
            //
// UART1 write text and new line (carriage return + line feed)
void UART1_Write_Line(char *uart_text) {
  UART1_Write_Text(uart_text);
  UART1_Write(13);
  UART1_Write(10);
}


void main()
            {
            trisa=0xff;
            adcon1=0x80;          // a/d cevirici an0,vref = +5v
            TRISJ = 0;           // set direction to be output
            //TRISD = 0;         // set direction to be output
            //
            // sd karti spı moduna koy
            //
  for (k=0;k<=3;k++)
             {
  Rj2_bit  = 0;      // Turn ON LEDs on PORTJ
  delay_ms(100);              // 1 sn bekle
  Rj2_bit  = 1;      // Turn ON LEDs on PORTJ
  delay_ms(100);
            }

  // Initialize UART1 module
  UART1_Init(19200);
  Delay_ms(100);
  UART1_Write_Line("HAZIR"); // PIC present report
  UART1_Write(13);



// Initialize SPI2 module
  SPI2_Init_Advanced(_SPI_MASTER_OSC_DIV16, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH, _SPI_LOW_2_HIGH);

     // sd karti baslat
    // initialise a MMC card
  mmc_error = Mmc_Init();
  Rj2_bit  = 0;                // Turn ON LEDs on PORTJ
  delay_ms(500);              // 1 sn bekle
  if(mmc_error == 0)
   UART1_Write_Line("MMC TAKILI"); // If MMC present report
  else
    UART1_Write_Line("MMC YOK"); // If error report

// sd kart üzerinde SICAKLIK.TXT isimli bir dosya yarat

UART1_Write_Line("SICAKLIK.TXT DOSYASI OLUSTURULYOR");
Mmc_Fat_Assign(&filename, 0xA0);             // Find existing file or create a new one
UART1_Write_Line("DOSYA OLUSTURULDU");
Mmc_Fat_Rewrite();                          // To clear file and start with new data
UART1_Write_Line("YAZMAK ICIN DOSYA ACILIYOR");
Rj2_bit  = 1;                // Turn ON LEDs on PORTJ
mmc_fat_write("SICAKLIK VERILERI - HER SANIYE SAKLANIYOR\r\n",41);

            //
            // sicaklığı her saniye oku,santigrata dönüştür ve sd karta yaz
            //
      UART1_Write_Line("4");
            for(;;)                      // sonsuz döngu
            {
            Rj2_bit  = 0;                // Turn ON LEDs on PORTJ
            mmc_fat_append();            //dosyanın sonuna ilave et
            sicakligi_oku();             //sicaklığı oku
            mmc_fat_write(sicaklik,9);   // sd karta yaz
            Rj2_bit  = 1;                // Turn ON LEDs on PORTJ
            UART1_Write_Line("SICAKLIK YAZILIYOR");
            delay_ms(1000);              // 1 sn bekle
            }
            }