Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
106
Tıklama
0
Öne Çıkarma
MikroC SD Karta Yazma / USB ile SD Kartı okuma
İ
7 yıl
Çavuş
Konu Sahibi

Selam arkadaşlar, umarım yardım edebilecek birilerini bulabilirim. Şimdiden teşekkürler. Her türlü fikre ve yardıma açığım.
Sorunlarım şunlar.
Orjina Devre :http://imgur.com/a/qNPMY 4620 kullanıyor
Yapmak istediğim :http://imgur.com/a/Obm23 2550 kullanıyorum
İlgili Resim 1 :https://forum.mikroe.com/download/file.php?id=14470
İlgili resim 2 :https://forum.mikroe.com/download/file.php?id=14469

İnternette vatandaşın biri SD Karta sensörden gelen verileri yazıyor. RTC ile zaman bilgilerinide iliştiriyor. Eski devremde RTC'yide SD kartıda aynı SDA/SCL üzerinden yapmaya çalışıyordum. Olmuyordu. Bu vatandaş x2 SDA/SCL kullanıyor, bunuda RC1 ve RC0 portlarını SDA/SCL olarak kullanarak yapıyor. Sorum şu, bunu nasıl yapıyor?. Kendileri 4620 kullanıyor ben ise 2550. Çünkü devremde USB girişi de olacak. USB i taktığımda, SDKartın içini görebilmek istiyorum, EXPLORER da çıkmıyor gözükmüyor fakat Cihazlar/Yazıcılar kısmında bağlandığını görebiliyorum.

Vatandaşın orjinal devresindeki Kodları:

sbit Mmc_Chip_Select at LATC0_bit;
sbit Mmc_Chip_Select_Direction at TRISC0_bit;
sbit Soft_I2C_Scl at RC1_bit;
sbit Soft_I2C_Sda at RC2_bit;
sbit Soft_I2C_Scl_Direction at TRISC1_bit;
sbit Soft_I2C_Sda_Direction at TRISC2_bit;
char temp[16] = "00:00:00;000,0\r";
short segundos, minutos, horas, dia, date, mes, ano;
unsigned long adc;
char filename[11] = "DataXX.csv";//o array nao pode ser maior que 14??
//define os segundos, minutos.. para o ds1307
void ds1307_write(){
Soft_i2c_stop();
Soft_i2c_start();
Soft_i2c_write(0xD0);
Soft_i2c_write(0x00);
Soft_i2c_write(Dec2Bcd(0));//segundos
Soft_i2c_write(Dec2Bcd(0));//minutos
Soft_i2c_write(Dec2Bcd(12));//horas
Soft_i2c_write(Dec2Bcd(1));//dia da semana
Soft_i2c_write(Dec2Bcd(12));//data
Soft_i2c_write(Dec2Bcd(3));//mes
Soft_i2c_write(Dec2Bcd(13));//ano
Soft_i2c_stop();
}
//faz a leitura do ds1307
void ds1307_read(){
Soft_i2c_start();
Soft_i2c_write(0xD0);
Soft_i2c_write(0x00);
Soft_i2c_Start();
Soft_i2c_write(0xD1);
segundos = Bcd2Dec(Soft_i2c_read(1));
minutos = Bcd2Dec(Soft_i2c_read(1));
horas = Bcd2Dec(Soft_i2c_read(1));
dia = Bcd2Dec(Soft_i2c_read(1));
date = Bcd2Dec(Soft_i2c_read(1));
mes = Bcd2Dec(Soft_i2c_read(1));
ano = Bcd2Dec(Soft_i2c_read(0));
Soft_i2c_stop();
}
//Esta funcao cria um novo arquivo
void Create_New_File()
{
//cria o arquivo(caso nao exista) com atributo de "arquivo" e abre
Mmc_Fat_Assign(&filename, 0xA0);
//define a data de criação do arquivo
Mmc_Fat_Set_File_Date(ano+2000, mes, date, horas, minutos, segundos);
Mmc_Fat_Append();//prepara o arquivo para gravação
Mmc_Fat_Write(temp, 15);//escreve no arquivo
}
//Esta função deleta o arquivo
void Delete_File()
{
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Delete();
}
short Test_File_Exist()
{
//como nao definiu nenhum atributo de criação, caso o arquivo exista
//retorna 1, caso contrario retorna 0
return Mmc_Fat_Assign("DATA00.csv", 0);
}
//abre o arquivo(caso não exista, nao ira ler) e inicia a leitura.
void Open_File_Read()
{
unsigned long i, size;
char caracter;
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Reset(&size);//recupera o numero de caracteres do arquivo
for (i = 1; i <= size; i++)
{
Mmc_Fat_Read(&caracter);// le um caracter do arquivo
UART1_Write(caracter);
}
}
void main()
{
char i;
ADC_Init();//inicia o modulo ADC
ADCON1 = 0B00001110; //define o canal 0 como analogico, o restante como digital.
Soft_i2c_init();//inicia a comunicação software i2c
//inicia a comunicação SPI
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
//inicia a comunicaçao com cartão SD
MMc_Fat_Init();
//verifica-se se o arquivo ja existe. caso exista cria um novo arquivo com um nome diferente
for(i=0;i<100;i++)
{
filename[4] = (i/10) + 48;
filename[5] = (i%10) + 48;
if(Mmc_Fat_Assign(&filename, 0)==0)
{
break;
}
else
{
MMC_Fat_Close(); //Bug resolvido
}
}
while(1)
{
adc = ADC_Read(0);
adc = adc * 1000/204;
temp[9] = (adc/1000) + 48;
temp[10] = ((adc/100)%10) + 48;
temp[11] = ((adc/10)%10) + 48;
temp[13] = (adc%10) + 48;
ds1307_read();
temp[0] = horas/10 + 48;
temp[1] = horas%10 + 48;
temp[3] = minutos/10 + 48;
temp[4] = minutos%10 + 48;
temp[6] = segundos/10 + 48;
temp[7] = segundos%10 + 48;
Create_New_File();

delay_ms(500);
}
}



İ
7 yıl
Çavuş
Konu Sahibi

hallettim. Kitlenebilir :]



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.