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://img85.imageshack.us/img85/2306/82735261.jpg)
http://rapidshare.com/files/381499922/mmc.rar (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
}
}