SD karta float veri kaydetme

Başlatan berkay_91, 25 Mart 2015, 12:34:25

berkay_91

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;

}

Gökhan BEKEN

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);
Özel mesaj okumuyorum, lütfen göndermeyin.

berkay_91

ö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...

freeggCC94

Merhaba gerçek devre üzerinde sd kart içerisinde açtığınız txt doyasına veri yazabiliyormusunuz acaba?


freeggCC94

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?

berkay_91

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 

RaMu

CcsC örneği 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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html