Şimdi Ara

MikroC SD Karta Yazma / USB ile SD Kartı okuma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
2
Cevap
0
Favori
105
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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);
    }
    }







  • hallettim. Kitlenebilir :]
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.