Picproje Elektronik Sitesi

BİLGİSAYAR => Donanım ve Yazılım => Konuyu başlatan: berkay_91 - 25 Mart 2015, 12:34:25

Başlık: SD karta float veri kaydetme
Gönderen: berkay_91 - 25 Mart 2015, 12:34:25
merhaba arkadaşlar, Elm-Chan ın FatFS kütüphanesini kullanıyorum, aşağıdaki programda bi türlü float sayıyı text dosyasına yazdıramadım derleyici hatasız derliyor ama programı çalıştırıp daha sonra SD kartı pc ye taktığımda içindeki newfile.txt de sadece
"it works" ve data1: 100 data2: 105 görüyorum f değeri yok. float sayıyı nasıl kaydedebilirim?


/*----------------------------------------------------------------------*/
/* Foolproof FatFs sample project for AVR              (C)ChaN, 2014    */
/*----------------------------------------------------------------------*/

#define F_CPU 8000000UL
#include <avr/io.h> /* Device specific declarations */
#include "ff.h" /* Declarations of FatFs API */

FATFS FatFs; /* FatFs work area needed for each volume */
FIL Fil; /* File object needed for each open file */

volatile int x=100;

int main (void){

UINT bw;

char buff[20];
float f = 3.14;

    while(1){

  if(bit_is_set(PIND,7)){

    f_mount(&FatFs, "", 0); /* Give a work area to the default drive */

    if (f_open(&Fil, "newfile.txt", FA_WRITE | FA_CREATE_ALWAYS) == FR_OK) { /* Create a file */
 
      f_write(&Fil, " It works!", 11, &bw); /* Write data to the file */
   
      f_printf(&Fil, "\n data1: %d data2: %d \r\n", x, 105);
       
      sprintf(buff, "%.2f", f);
      f_puts("\r\n %.2f",&buff);

    f_close(&Fil); /* Close the file */

     if (bw == 11) { /* Lights green LED if data written well */
 
      DDRA |= 0x02;
      PORTA |= 0x02; /* Set PA1 high */
 
         }
 
      }


  } // End of button loop  
  }
 
  return 0;

}
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: Gökhan BEKEN - 25 Mart 2015, 13:24:46
x değişkenini float tanımlamışsınız, decimal yazmaya çalışıyorsunuz.
sprintf fonksiyonunu kullanarak önce bir diziye string olarak çevirip, bu diziyi f_write ile sd karta yazarsanız düzelir.
char dizi[50];
float x= 123.123456;
sprintf(dizi, "float sayi: %3.6f", x);
f_write(&Fil, &dizi[0], strlen(dizi), &bw);
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: berkay_91 - 25 Mart 2015, 17:20:18
öncelikle yardımınız için çok teşekkür ederim, sayenizde float değer kaydedebiliyorum. x değişkenini float tanımlamadım, f değişkenini float tanımladım...
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: freeggCC94 - 04 Haziran 2015, 22:11:16
Merhaba gerçek devre üzerinde sd kart içerisinde açtığınız txt doyasına veri yazabiliyormusunuz acaba?
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: berkay_91 - 05 Haziran 2015, 15:25:51
evet kaydedebiliyorum
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: freeggCC94 - 05 Haziran 2015, 20:48:00
Merhaba bende ccs c ile analog girişten aldığım verileri pic18f4550 kullanarak glcd ekranına ölçüm menüsü olarak yazdırıyorum ve bu değeri aynı zamanda ölçüm tarih ve saatiyle birlikte sd kart içerisine açtığım txt dosyasına yazdırmak istiyorum. birçok sitede kodlar mevcut derlerken bir sıkıntı olmuyor fakat devre üzerinde hiçbir sonuç alamadım. Bu noktada bana yardımcı olabileceğiniz birşey var mı kullanabiliceğim kod olarak yani?
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: berkay_91 - 06 Haziran 2015, 00:24:44
yukarda atmel için yazdığım kodun kütüphanelerini verebilirim ama ccs c ye çevirmen aylarını alabilir, SD kartla uğraşanlarda hep bu sorun oluyor, SPI haberleşmede bir sorun olabilir en azından onu proteusta SPI debugger koyarak simülasyondan anlarsın, donanımda hata varsa bilmiyorum en fazla haberleşme kablolarını(Mosi,Miso,Sck,SS) olabildiğince işlemciye yakın tut diyebilirim bide haberleşme hızına dikkat et 
Başlık: Ynt: SD karta float veri kaydetme
Gönderen: RaMu - 06 Haziran 2015, 03:50:40
CcsC örneği https://www.picproje.org/index.php?topic=55841.0 (https://www.picproje.org/index.php?topic=55841.0)
Ama @freeggCC94 buna bakmış zaten.
Linkde verdiğim konudaki kaynak linklerinde zaten
analogdan okuyup sd karta yazma vardı yanlış hatırlamıyorsam.