folder Tahribat.com Forumları
linefolder Elektronik / Embedded / Mobil Cihazlar
linefolder PIC18F4550 SD Karttan Okuma (Mikroc For PIC)



PIC18F4550 SD Karttan Okuma (Mikroc For PIC)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    Merhaba,

    FAT16 biçimlendirilmiş SD karttaki dosyaları okuyan uygulama örneklerine bakıyordum. Yaptığım denemede aşağıdaki adımları takip ettim fakat kartın içindeki iki dosyadan birini görüyor diğerini görmüyor.

    WinImage programıyla 64 MB boyutunda bir imaj oluşturup içine iki dosya attım. Bir adet .TXT ve bir adet .WAV (unsigned 8-bit PCM)

    Proteusta aşağıdaki devreyi kurdum;

    mikroC'de kodları;

    // MMC modüle bağlantıları
    sbit Mmc_Chip_Select           at LATC0_bit;  // for writing to output pin always use latch (PIC18 family)
    sbit Mmc_Chip_Select_Direction at TRISC0_bit;
    // eof MMC modüle bağlantılar
    
    // Program içerisinde kullanılacak olan global değişkenler tanımlanıyor
    unsigned short fat_initi;
    unsigned char format_sonucu;
    
    void UART1_Write_Line(char *uart_text) {
      UART1_Write_Text(uart_text);
      UART1_Write(13);
      UART1_Write(10);
    }
    
    void main() {
      ADCON1 |= 0x0F;                  // AN pinleri I/O olarak yapılandırıldı
      CMCON  |= 7;                     // Komparatörler kapatıldı
      TRISD = 0x00;
    
      LATD = 0xFF;
      Delay_ms(500);
      LATD = 0x00;
      
      UART1_Init(9600);
      
      UART1_Write_Line("SPI init");
      // SPI1 modulu baslatiliyor
      SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
      
      // fat16 dosya sistemi baslatiliyor
      fat_initi = Mmc_Fat_Init();
      if (fat_initi == 0) { // MMC/SD card was detected and successfully initialized
        UART1_Write_Line("INIT: kart bulundu");
        // goal_mono1.wav dosyasinin kartta yuklu olup olmadiginin kontrolu
        if (Mmc_Fat_Exists("goal_mono1.wav") == 1) { // dosya bulundu
          UART1_Write_Line("goal_mono1.wav bulundu");
        } else { // dosya bulunamadi
          UART1_Write_Line("goal_mono1.wav bulunamadi !");
        }
        // deneme.txt dosyasinin kartta yuklu olup olmadiginin kontrolu
        if (Mmc_Fat_Exists("deneme.txt") == 1) { // dosya bulundu
          UART1_Write_Line("deneme.txt bulundu");
        } else { // dosya bulunamadi
          UART1_Write_Line("deneme.txt bulunamadi !");
        }
      } else if (fat_initi == 1) {  // FAT16 boot sector was not found
        UART1_Write_Line("INIT: boot sector bulunamadi");
    
        UART1_Write_Line("formatlaniyor...");
        format_sonucu = Mmc_Fat_QuickFormat("deneme.mmc");
        
        if (format_sonucu == 0) {
          UART1_Write_Line("FORMAT: tamam");
        } else if (format_sonucu == 1) {
          UART1_Write_Line("FORMAT: hata");
        } else if (format_sonucu == 255) {
          UART1_Write_Line("FORMAT: kart bulunamadi");
        }
      } else if (fat_initi == 255) { // MMC/SD card was not detected
        UART1_Write_Line("INIT: kart bulunamadi");
      }
      
      UART1_Write_Line("bitti");
      
      while (1) {
    
      }
    }

     

    Devre şemasındaki Virtual Terminal ekranından görebileceğiniz üzere Mmc_Fat_Exists() fonksiyonu  .TXT dosyası için 1, .WAV dosyasi için 0 döndürüyor.

    Bu sorunun sebebi ne olabilir?

    .WAV dosyasını görüp okuyabilirsem bir DAC veya PWM ile çalmayı deneyeceğim.


    ulan bir susar mısın?
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    merhaba,

    dosya ismini tamamen büyük karakterle yapar misin uzantisi dahil ve oyle bir dene. Ve de mümkünse kisa ve özel karakter bulunmayan bir isim ver A.WAV gibi

    bir de devrede neden kristal yok? ve kartin düzenleme penceresinden boyutunu yine 64mb olarak görüyor musun? 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    aercys
    aercys's avatar
    Kayıt Tarihi: 12/Nisan/2008
    Erkek

    Hocam ses dosyasını arayan Mmc_Fat_Exists() fonksiyonu ne döndürüyor kontrol ettiniz mi? 

    if (Mmc_Fat_Exists("goal_mono1.wav") == 1) { // dosya bulundu
          UART1_Write_Line("goal_mono1.wav bulundu");
        else // dosya bulunamadi
          UART1_Write_Line("goal_mono1.wav bulunamadi !");
        }
    yukarıda bulduysa 1 bulamadıysa 0 döndürdüğünü varsayarak kodu yazmışsınız ancak Mmc_Fat_Exists fonksiyonu çağrılırken de hata olmuş olabilir (SPI kaynaklı). 
     
    if (Mmc_Fat_Exists("goal_mono1.wav") == 1) { // dosya bulundu
          UART1_Write_Line("goal_mono1.wav bulundu");
        else if (Mmc_Fat_Exists("goal_mono1.wav") == 0) // dosya bulunamadi
          UART1_Write_Line("goal_mono1.wav bulunamadi !");
        else {
          UART1_Write_Line("Mmc_Fat_Exists() hata");
    }
     
    şeklinde deneyip sonucu paylaşabilir misiniz?

    0x62 0x75 0x6e 0x75 0x20 0x79 0x61 0x7a 0x61 0x6e 0x20 0x74 0x6f 0x73 0x75 0x6e 0x2c 0x20 0x6f 0x6b 0x75 0x79 0x61 0x6e 0x61 0x20 0x6b 0x6f 0x73 0x75 0x6e
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    @unbalanced dosya adını değiştirince sorun çözüldü. dosya adı çok uzun olmadığı ve özel karakter içermediği için sorun olacağını düşünmemiştim. WinImage içinden dosyanın özelliklerine bakınca MS-DOS name kısmında kısaltılmış bir isim gösteriyordu. kristali de simülasyonda koymadım, Proteus öyle de çalıştırıyor. İstediğimi yapabilirsem devreyi çizerken koyacağım.

     

    @aercys Mmc_Fat_Exists() fonksiyonuna help'ten bakmıştım, sadece iki değer dönüyor, 0 ve 1. O yüzden sadece 1 mi diye kontrol ettim.

    Şimdi bu dosya içeriğini okuyup DAC'a göndermeyi deneyeceğim.

    Teşekkürler


    ulan bir susar mısın?
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    aercys
    aercys's avatar
    Kayıt Tarihi: 12/Nisan/2008
    Erkek

    https://download.mikroe.com/documents/compilers/mikroc/pic/help/mmc_library.htm#mmc_fat_exists şu linkteki kütüphaneyi kullandığınızı düşünerek kontrol etmenizi istemiştim. 

    status = Mmc_Fat_Exists("X_FILES.TXT");
    
    if (1 == status) { ... } 		// if the file was found...
    
    else if (0 == status) { ... }	// or if the file was not found...
    
    else { ... }			// or if there was an error during function call,				
                               // which needs to be handled separately.

    şeklinde verilmiş manual'de.

    Osilatör için mikroişlemcinizin dahili osilatörü bulunmakta. Devreyi fiziki olarak kurarken de osilatör kullanmayabilirsiniz.

    0x62 0x75 0x6e 0x75 0x20 0x79 0x61 0x7a 0x61 0x6e 0x20 0x74 0x6f 0x73 0x75 0x6e 0x2c 0x20 0x6f 0x6b 0x75 0x79 0x61 0x6e 0x61 0x20 0x6b 0x6f 0x73 0x75 0x6e
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    evet ben de ordan baktım, şunu görünce aşağıdaki örneği okumamışım :)

    Returns
    • 0 - if file/directory doesn't exist
    • 1 - if file/directory exists

    ulan bir susar mısın?
Toplam Hit: 1391 Toplam Mesaj: 6
sd kart fat16 mikroc for pic 18f4550 winimage