thenorthstar,
Try to close the openned file before you read it.
Change your while loop to a for loop to write 10 ADC samples enthen close the file:
while (1)
{
if (Button(&PORTB, 1, 2, 0)) { // write Button
RD3_bit = 0;
Rj2_bit = 0; // Turn ON LEDs on PORTJ
mmc_fat_append(); //dosyany'n sonuna ilave et
sicakligi_oku(); //Read tempareture
mmc_fat_write(sicaklik,9); // write in MMC card
Rj2_bit = 1; // Turn ON LEDs on PORTJ
UART1_Write_Line("TEMPERATURE DATA STORAGE");
delay_ms(100); // wait 1 ms
}
} //while (1);
change to:
for(i = 0; i <= 10; i++)
{
//if (Button(&PORTB, 1, 2, 0))
//{ // write Button
RD3_bit = 0;
Rj2_bit = 0; // Turn ON LEDs on PORTJ
mmc_fat_append(); //dosyany'n sonuna ilave et
sicakligi_oku(); //Read tempareture
mmc_fat_write(sicaklik,9); // write in MMC card
Rj2_bit = 1; // Turn ON LEDs on PORTJ
UART1_Write_Line("TEMPERATURE DATA STORAGE");
delay_ms(300); // wait 300 ms so you can see the LED blink
// }
}
After write 10 sample, close the file.
//===========================//
thenorthstar,
For writting an example for you -->> the answer is NO <<--. It is not good for you because you will not learn. On the other hand, this is your project, you should spend lot of time to research and practice so you can learn from it. I can point you to the right direction so that you can complete your project.
And here is a link to the example from MikroC:
http://www.mikroe.com/eng/product_downloads/download/Download the "BIGPIC5 mikroC Examples [147.74KB] ", you will se one example for the MMC. In fact, below is the copy:
/*
* Project name:
MMC_FAT16_Test (Demonstration on usage of MMC_FAT16 library)
* Copyright:
(c) MikroElektronika, 2005-2008
* Description:
This project consists of several blocks that demonstrat various aspects of
usage of the MMC_FAT16 library. These are:
- Creation of new file and writing down to it;
- Opening existing file and re-writing it (writing from start-of-file);
- Opening existing file and appending data to it (writing from end-of-file);
- Opening a file and reading data from it (sending it to USART terminal);
- Creating and modifying several files at once;
* Test configuration:
MCU: PIC18F8520
Dev.Board: BIGPIC5
Oscillator: HS, 10.000 MHz
Ext. Modules: MMC/SD card
SW: mikroC v.8.1
* NOTES:
- Please make sure that MMC card is properly formatted (to FAT16 or just FAT)
before testing it on this example!
- The MMC uses hardware SPI for communication, so make sure that it gets
properly connected to the port where SPI module is located (PORTC for most
PICs)!
- This library is for PIC18 MCUs only!
*/
#include <built_in.h>
char
fat_txt[20] = "FAT16 not found",
file_contents[50] = "XX MMC/SD FAT16 library by Anton Rieckert\n";
char
filename[14] = "MIKRO00xTXT"; // File names
unsigned short
tmp, caracter, loop, loop2;
unsigned long
i, size;
char Buffer[512];
// writes string to USART
void I_Write_Str(char *ostr) {
unsigned short i;
i = 0;
while (ostr
) {
USART_Write(ostr[i++]);
}
USART_Write(0x0A);
}
// creates new file and writes some data to it
void M_Create_New_File() {
filename[7] = 'A'; // set filename for single-file tests
Mmc_Fat_Assign(&filename, 0xA0); // will not find file and then create file
Mmc_Fat_Rewrite(); // to clear file and start with new data
for(loop = 1; loop <= 99; loop++) { // we want 5 files on the MMC card
Usart_Write('.');
file_contents[0] = loop / 10 + 48;
file_contents[1] = loop % 10 + 48;
Mmc_Fat_Write(file_contents, 42); // write data to the assigned file
}
}
// creates many new files and writes data to them
void M_Create_Multiple_Files() {
for(loop2 = 'B'; loop2 <= 'Z'; loop2++) {
Usart_Write(loop2); // signal the progress
filename[7] = loop2; // set filename
Mmc_Fat_Assign(&filename, 0xA0); // find existing file or create a new one
Mmc_Fat_Rewrite(); // to clear file and start with new data
for(loop = 1; loop <= 44; loop++) {
file_contents[0] = loop / 10 + 48;
file_contents[1] = loop % 10 + 48;
Mmc_Fat_Write(file_contents, 42); // write data to the assigned file
}
}
}
// opens an existing file and rewrites it
void M_Open_File_Rewrite() {
filename[7] = 'C';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Rewrite();
for(loop = 1; loop <= 55; loop++) {
file_contents[0] = loop / 10 + 64;
file_contents[1] = loop % 10 + 64;
Mmc_Fat_Write(file_contents, 42); // write data to the assigned file
}
}//~
// Opens an existing file and appends data to it
// (and alters the date/time stamp)
void M_Open_File_Append() {
filename[7] = 'B';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Set_File_Date(2005,6,21,10,35,0);
Mmc_Fat_Append(); // prepare file for append
Mmc_Fat_Write(" for mikroElektronika 2005\n", 27); // write data to assigned file
}
// opens an existing file, reads data from it and puts it to USART
void M_Open_File_Read() {
filename[7] = 'B';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Reset(&size); // to read file, procedure returns size of file
for (i = 1; i <= size; i++) {
Mmc_Fat_Read(&caracter);
Usart_Write(caracter); // write data to USART
}
}//~
// deletes a file. if file doesn't exist, it will first be created
// and then deleted.
void M_Delete_File() {
filename[7] = 'F';
Mmc_Fat_Assign(filename, 0);
Mmc_Fat_Delete();
}//~
// tests whether file exists, and if so sends its creation date
// and file size via USART
void M_Test_File_Exist() {
unsigned long fsize;
unsigned int year;
unsigned short month, day, hour, minute;
unsigned char outstr[12];
filename[7] = 'B';
// filename[7] = 'F'; // uncomment this line to search for file that DOES NOT exist
if (Mmc_Fat_Assign(filename, 0)) {
// file has been found - get its date
Mmc_Fat_Get_File_Date(&year, &month, &day, &hour, &minute);
WordToStr(year, outstr);
I_Write_Str(outstr);
ByteToStr(month, outstr);
I_Write_Str(outstr);
WordToStr(day, outstr);
I_Write_Str(outstr);
WordToStr(hour, outstr);
I_Write_Str(outstr);
WordToStr(minute, outstr);
I_Write_Str(outstr);
// get file size
fsize = Mmc_Fat_Get_File_Size();
LongToStr((signed long)fsize, outstr);
I_Write_Str(outstr);
}
else {
// file was not found - signal it
Usart_Write(0x55);
Delay_ms(1000);
Usart_Write(0x55);
}
}
// tries to create a swap file, whose size will be at least 100
// sectors (see Help for details)
void M_Create_Swap_File() {
unsigned int i;
for(i=0; i<512; i++)
Buffer = i;
size = Mmc_Fat_Get_Swap_File(5000, "mikroE.txt", 0x20); // see help on this function for details
if (size) {
LongToStr((signed long)size, fat_txt);
I_Write_Str(fat_txt);
for(i=0; i<5000; i++) {
Mmc_Write_Sector(size++, Buffer);
Usart_Write('.');
}
}
}
// main. uncomment the function(s) to test the desired operation(s)
void main() {
// prepare PORTB for signalling
CMCON |= 0x07; // turn off comparators
ADCON1 |= 0x0F; // turn off analog inputs
MEMCON.EBDIS = 1; // disable external memory bus
PORTB = 0;
TRISB = 0;
TRISD = 0;
// set up USART for the file read
Usart_Init(19200);
Delay_100ms();
// init the FAT library
Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
// use fat16 quick format instead of init routine if a formatting is needed
if (!Mmc_Fat_Init(&PORTE, 0)) {
// reinitialize spi at higher speed
Spi_Init_Advanced(MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
// test start
PORTB = 0xF0;
// test routines. uncomment them one-by-one to test certain features
M_Create_New_File();
M_Create_Multiple_Files();
M_Open_File_Rewrite();
M_Open_File_Append();
M_Open_File_Read();
M_Delete_File();
M_Test_File_Exist();
M_Create_Swap_File();
// signal end-of-test
Usart_Write('e');
}
else {
I_Write_Str(fat_txt);
}
// test termination
PORTB = 0x0F;
}
Don't try to find the short cut to learn, you will forget very quickly.
I suggest you to use this example and experiment with all the option until it works.
***--- remember in this example the 10MHz crystal is used ---***
Also, when you initialize the MMC with:
Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
Pay attention to the "MASTER_OSC_DIV64" --->>> this is for 10MHz (you use 20MHz)
and where is your buffer? I see in the example hey used: char Buffer[512]; (I think the sector is 512 bytes). When write, I think you need to specify which sector to write to (may be in MikroC is different).
Here is an importance note from MikroC:
"
- Please make sure that MMC card is properly formatted (to FAT16 or just FAT)
before testing it on this example!
- The MMC uses hardware SPI for communication, so make sure that it gets
properly connected to the port where SPI module is located (PORTC for most
PICs)!
"
Good luck,
Tom