İ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 :]
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme