Autor Tema: ayuda con pic y mmc  (Leído 4418 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
ayuda con pic y mmc
« en: 16 de Febrero de 2006, 05:09:00 »
Hola a todos!!
Estoy metido en un diseño con un pic y una tarjeta mmc y he probado el codigo que facilitan en la web http://www.microchipc.com/sourcecode/#mmc, y tengo una duda porque al compilar el programa me da un error en la siguiente linea: SPI_WRITE(i2c_eeprom_read(HIGH(i),LOW(i))); // send data de la funcion mmc_write_block(), porque no se porque utiliza la funcion i2c para la comunicacion SPI, y tb he tenido que cambiar el HIGH y LOW por el make8. A ver si alguien me echa una mano.
Gracias de antemano!!!!
loco

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: ayuda con pic y mmc
« Respuesta #1 en: 16 de Febrero de 2006, 05:38:00 »
Al poner esa función deben dar por hecho que los 512bytes de un sector los has almacenado en una memoria externa por i2c.
Esto se hace cuando el pic que se utiliza no dispone de ram suficiente para almacenar esos 512bytes.
Si tu pic dispone de ram suficiente, deberías crear un array de 512 bytes y cambiar esa línea por esta:

SPI_WRITE( sector[ i ] );

Habiendo definido anteriormente una variable sector, por ejemplo asi:

int    sector[512];


Pruebalo a ver y nos cuentas. Un saludo Sonrisa
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #2 en: 16 de Febrero de 2006, 05:56:00 »
Giño
Muchiisimas gracias por tu ayuda El_Coach voy a probarlo y ya te cuento. Tenía esa dudilla y ya me lo has dejado claro. Ahora lo que estoy mrando es como manejar los ficheros para poder ver el contenido de la mmc en el pc y buscando información en el foro e visto que tu tb estabas con lo mismo, si tienes información sobre el tema te lo agradecería enooooooooooooooooooooooooooooooooooooooormemente.
De todos modos gracias por tu ayuda y sigue asi porque no solo me has ayudado a mi  por lo que que e leido por ahi.SonrisaSonrisaSonrisaSonrisaSonrisa

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: ayuda con pic y mmc
« Respuesta #3 en: 16 de Febrero de 2006, 07:57:00 »
Hola de nuevo RollEyes

El compañero Ankarius puso el enlace de unos drivers muy muy interesantes en este hilo:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4555720

Echales una ojeada porque te pueden ahorrar mucho trabajo.
Yo no los he utilizado, cuando me hizo falta no dispuse de ellos, pero puedes intentarlo con esos drivers. Giño


Salu2
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #4 en: 16 de Febrero de 2006, 10:09:00 »
Rebotado
Muchas gracias El_Coach he probado lo del spi y ya leo y escribo en la mmc. Le echare  un vistazo al codigo que me has dicho a ver que tal y ya contare a ver que tal.
Gracias por todo!

Desconectado Tigreivan

  • PIC10
  • *
  • Mensajes: 3
RE: ayuda con pic y mmc
« Respuesta #5 en: 21 de Febrero de 2006, 08:33:00 »
Sonrisa Gigantehola toxete: mira estamos trabajando con una memoria sd con el mismo codigo q vos, la pudimos inicializar, pero cuando queremos leer siempre leemos el sector cero, y no podemos escribir.
Te agradeceriamos que nos pases si cambiaste algo en el codigo, gracias  Rebotado

P/D: de que se trata tu proyecto, nosotros estamos haciendo un holter

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #6 en: 22 de Febrero de 2006, 03:31:00 »
Hola Tigreivan,Divertido mi proyecto consiste en un modulo de adquisición de datos controlado por un pic 16f873, aqui te paso la rutina que he gastado para la mmc. Leo y escribo bien lo que me falta es manejar los archivos en fat16, estoy buscando cosas  pero todavia ando un poco perdidillo. Bueno aqui te la dejo. Un saludo!

// archivos include
#include <16F873.h>
#device ICD=TRUE
//#define *=16
#device   ADC=8
#include <STDIO.H>   //Para las funciones RS232
#include <STDLIB.H>   //Para la función atol
#include <STRING.H>   //Para funciones con strings

//------Declaraciones para el compilador-------
#use   delay(clock =19660800)                                 //frecuencia de reloj
//#use   i2c(master,sda=PIN_C4, scl=PIN_C3,FORCE_HW)
#use   i2c(master,sda=PIN_C4, scl=PIN_C3,FORCE_HW,NOFLOAT_HIGH)
#use   rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)              //configuracion puerto serie
#fuses   HS,NOWDT,PUT,NOPROTECT,BROWNOUT
#use standard_io(b)

int mmc_init();
int mmc_response(unsigned char response);
int mmc_read_block(unsigned long block_number);
int mmc_write_block(unsigned long block_number);
int mmc_get_status();
int dato;
char Keypress=" ";
//int sector[512];

/************************** MMC Init **************************************/
/* Initialises the MMC into SPI mode and sets block size, returns 0 on success */

int mmc_init()
{
int i;

SETUP_SPI(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4 | SPI_SS_DISABLED);

*0x94 |= 0x40;                          // set CKE = 1 - clock idle low
*0x14 &= 0xEF;                          // set CKP = 0 - data valid on rising edge

OUTPUT_HIGH(PIN_C2);                    // set SS = 1 (off)

for(i=0;i<10;i++)                       // initialise the MMC card into SPI mode by sending clks on
{
        SPI_WRITE(0xFF);
}

OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on) tells card to go to spi mode when it receives reset

SPI_WRITE(0x40);                        // send reset command
SPI_WRITE(0x00);                        // all the arguments are 0x00 for the reset command
SPI_WRITE(0x00);
SPI_WRITE(0x00);
SPI_WRITE(0x00);
SPI_WRITE(0x95);                        // precalculated checksum as we are still in MMC mode

puts("Sent go to SPI
"Giño;

if(mmc_response(0x01)==1) return 1;     // if = 1 then there was a timeout waiting for 0x01 from the mmc

puts("Got response from MMC
"Giño;

i = 0;

while((i < 255) && (mmc_response(0x00)==1))     // must keep sending command if response
{
        SPI_WRITE(0x41);                // send mmc command one to bring out of idle state
        SPI_WRITE(0x00);                // all the arguments are 0x00 for command one
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF
        i++;
}
if(i >= 254) return 1;                   // if >= 254 then there was a timeout waiting for 0x00 from the mmc

puts("Got out of idle response from MMC
"Giño;

OUTPUT_HIGH(PIN_C2);                    // set SS = 1 (off)

SPI_WRITE(0xFF);                        // extra clocks to allow mmc to finish off what it is doing

OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on)

        SPI_WRITE(0x50);                // send mmc command one to bring out of idle state
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x02);                // high block length bits - 512 bytes
        SPI_WRITE(0x00);                // low block length bits
        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF

if((mmc_response(0x00))==1) return 1;
OUTPUT_HIGH(PIN_C2);            // set SS = 1 (off)
puts("Got set block length response from MMC
"Giño;
puts("Memoria inicializada!!
"Giño;
return 0;
}

/************************** MMC Get Status **************************************/
/* Get the status register of the MMC, for debugging purposes */

int mmc_get_status()
{

OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on)

        SPI_WRITE(0x58);                // send mmc command one to bring out of idle state
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);                //
        SPI_WRITE(0x00);                // always zero as mulitples of 512
        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF

      OUTPUT_HIGH(PIN_C2);                    // set SS = 1 (off)
       OUTPUT_HIGH(PIN_C0);
return 0;
}

/************************** MMC Write Block **************************************/

int mmc_write_block(unsigned long block_number)
{
unsigned long i;
unsigned long varh,varl;
int j=0;

varl=((block_number&0x003F)<<9);
varh=((block_number&0xFFC0)>>7);

puts("Write block
"Giño;                // block size has been set in mmc_init()

OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on)

        SPI_WRITE(0x58);                // send mmc write block
        SPI_WRITE(make8(varh,1));
        SPI_WRITE(make8(varh,0));
        SPI_WRITE(make8(varl,1));
        SPI_WRITE(0x00);                // always zero as mulitples of 512
        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF

if((mmc_response(0x00))==1) return 1;
puts("
Got response to write block
"Giño;

SPI_WRITE(0xFE);                        // send data token

for(i=0;i<512;i++)
{

   SPI_WRITE(j++);     // send data
   putc(j);

}

SPI_WRITE(0xFF);                        // dummy CRC
SPI_WRITE(0xFF);

if((SPI_READ(0xFF)&0x0F)!=0x05) return 1;

puts("Got data response to write block
"Giño;

OUTPUT_HIGH(PIN_C2);                    // set SS = 1 (off)
return 0;
}



/************************** MMC Read Block **************************************/
/**** Reads a 512 Byte block from the MMC and outputs each byte to RS232 ****/

int mmc_read_block(unsigned long block_number)
{

unsigned long i;
unsigned long varh,varl;
int parte_alta_varh;
int parte_baja_varh;
int parte_alta_varl;
OUTPUT_HIGH(PIN_C1);  
varl=((block_number&0x003F)<<9);
varh=((block_number&0xFFC0)>>7);

parte_alta_varh=make8(varh,1);
parte_baja_varh=make8(varh,0);
parte_alta_varl=make8(varl,1);

OUTPUT_LOW(PIN_C2);                     // set SS = 0 (on)

        SPI_WRITE(0x51);                // send mmc read single block command
        SPI_WRITE(parte_alta_varh);      // arguments are address
        SPI_WRITE(parte_baja_varh);
        SPI_WRITE(parte_alta_varl);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF

if((mmc_response(0x00))==1) return 1;   // if mmc_response returns 1 then we failed to get a 0x00 response (affirmative)

puts("Got response to read block command
"Giño;
OUTPUT_LOW(PIN_C1);  
if((mmc_response(0xFE))==1) return 1;   // wait for data token

puts("
Got data token
"Giño;

        for(i=0;i<12;i++)
        {
                putc(SPI_READ(0xFF));               // we should now receive 512 bytes
        }

SPI_READ(0xFF);                 // CRC bytes that are not needed
SPI_READ(0xFF);

OUTPUT_HIGH(PIN_C2);            // set SS = 1 (off)
SPI_WRITE(0xFF);                // give mmc the clocks it needs to finish off

puts("
End of read block
"Giño;

return 0;
}
/************************** MMC get response **************************************/
/**** Repeatedly reads the MMC until we get the response we want or timeout ****/

int mmc_response(unsigned char response)
{
        unsigned long count = 0xFFFF;           // 16bit repeat, it may be possible to shrink this to 8 bit but there is not much point

        while(SPI_READ(0xFF) != response && --count > 0);

        if(count==0) return 1;                  // loop was exited due to timeout
        else return 0;                          // loop was exited before timeout
}


void main (void){

   int return0;
   set_tris_c(0b10111111); //configuro puerto c como usart
   
   disable_interrupts(GLOBAL);      // Apaga todas las interrupciones
   enable_interrupts(INT_RDA);      // Da permiso a la interrupcion por recepcion RS232
   enable_interrupts(GLOBAL);      // Ahora habilitamos todas
   

   delay_ms(3000);

   printf("
********************************************
"Giño;
   printf("Team Industrial SA
"Giño;
   printf("Datalogger 01
"Giño;
   printf("Realizado por: Jose Antonio Martinez Jimenez
"Giño;
   printf("********************************************
"Giño;

//   return0=mmc_init();
//   return0=mmc_get_status();
//   return0=mmc_read_block(1);
   
do {

   if(dato!=0x00)
   {
   switch(dato)
   {
      case "i": if (mmc_init()==0)
         printf("
 Arranco la memoria

" );
         else printf("
 No anda la puta madre!

" );
      break;
      case "r":
         return0=mmc_init();
         if(mmc_read_block(0)==0){
            printf("
leido el contenido de la memoria

" );
         }else printf("
fallo al leer el contenido de la memoria

"Giño;
      break;
      case "w":
         return0=mmc_init();
         if(mmc_write_block(0)==0){
            printf("
 escribiendo en la memoria

" );
         }else printf("
fallo al escribir en la memoria

"Giño;
      break;
      
      case "0": output_low(PIN_C0);
         printf(" 0 - LED Apagado
" );
      break;   

      case "1": output_high(PIN_C0);
      printf(" 1 - LED Encendido
" );
      break;
   }
      dato=0x00;
   }

} while (TRUE);

}//main


#INT_RDA                         //Tratamiento de la interrupcion por recepcion
void rs232_isr(void)
{
  //int dato;
 
   
      dato=getch();

 

}


 

Desconectado Tigreivan

  • PIC10
  • *
  • Mensajes: 3
RE: ayuda con pic y mmc
« Respuesta #7 en: 23 de Febrero de 2006, 21:20:00 »
Hey toxete que tal Sonrisa Giganteaca te mando el enlace  para trabajar con fat16, la verdad que no lo he usado, pero talvez te sirva:
http://miarroba.com/foros/http://rapidshare.de/files/9480531/FlashFileSD-PIC.zip.html

Y en la pagina de CCS hay tambien hay algo q te pueda servir, te de jo el enlace:
http://www.ccsinfo.com/forum/viewtopic.php?t=21721

P/D: gracias por tu ayuda Rebotado

Desconectado elguitre

  • PIC10
  • *
  • Mensajes: 34
RE: ayuda con pic y mmc
« Respuesta #8 en: 27 de Febrero de 2006, 21:55:00 »
Toxete como estas, como vas con tu proyecto? Ya podes trabajar en fat 16? te comento yo tambien estoy trabajando con estas memorias y con el codigo de microchipc, es mas tu codigo me es conocido. Tengo una libreria para trabajar con fat16 pero no me sirve para el 16F877 ya que el codigo de programa que genera es muy grande, vos tenes algo??
 

Este es el codigo de mi programa

#include <16f877a.h>

#include <stdlib.h>            //Para la función atoi
#include <STDIO.H>             //Para las funciones RS232
#include <STRING.H>            //Para funciones con strings

//------------------------- Directivas para el compilador ------------------------

#zero_ram

#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

//----------------------- Funciones para controlar la memoria ---------------------

int mmc_init();
int mmc_response(unsigned char response);
int mmc_read_block(unsigned long block_number);
int mmc_write_block(unsigned long block_number);
int mmc_get_status();

char cadena[4];                //Cantidad de caracteres a recibir. Ej 125 y el "enter".
char texto[30];
int8 i=0;
char Keypress=" ";
long int x;

//------------------------- Interrrupcion del puerto serie -----------------------

#int_rda
 void rda_isr()
  {
   Keypress=0x00;
   if(kbhit())  {Keypress=getc();}
  }


//-------------------------------- MMC Init ----------------------------------------
//- Inicializa la memoria en modo SPI y setea el tamaño del bloque, retorna 0 si OK-

int mmc_init()
{
 int i;
 SETUP_SPI(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4 | SPI_SS_DISABLED);
 *0x94 |= 0x40;                          // setea CKE = 1 - clock idle low
 *0x14 &= 0xEF;                          // setea CKP = 0 - el dato es valido en el flnco ascendente
 OUTPUT_HIGH(PIN_C2);                    // setea SS = 1 (off)

 for(i=0;i<10;i++)                       // Inicializa la memoria en modo SPI enviando clks altos

    { SPI_WRITE(0xFF);}

 OUTPUT_LOW(PIN_C2);                     // setea SS = 0 (on)

 SPI_WRITE(0x40);                        // Envio comando de reset
 SPI_WRITE(0x00);                        // Todos los argumntos son 0x00 para el comando de reset
 SPI_WRITE(0x00);
 SPI_WRITE(0x00);
 SPI_WRITE(0x00);
 SPI_WRITE(0x95);                        // checksum precalculado
 puts("
Comando -Ir a modo SPI- enviado
");

 if(mmc_response(0x01)==1) return 1;     // Si respuesta = 1 se supero el tiempo de espera para 0x01 desde la SD

 puts("Respuesta correcta de la SD!
");
 i = 0;
 while((i < 255) && (mmc_response(0x00)==1))     // Enviamos el comando hasta tener la respuesta esperada
   {
        SPI_WRITE(0x41);                // Enviamos el comando para sacar la memoria del estado idle
        SPI_WRITE(0x00);                // Todos los argumentos son 0x00 para el comando uno
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);                // El checksum no es requerido pero igual siempre le enviamos 0xFF
        i++;
   }

 if(i >= 254) return 1;                 // Si >= 254 se supero el tiempo de espera para 0x00 desde la SD
 puts("Memoria fuera del estado idle
");
 
 OUTPUT_HIGH(PIN_C2);                   // Chip Select = 1 (off)
 SPI_WRITE(0xFF);                        
 OUTPUT_LOW(PIN_C2);                    // Chip Select = 0 (on)
 
        SPI_WRITE(0x50);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x02);                // Con esto configuramos el tamaño de bloque = 512
        SPI_WRITE(0x00);                
        SPI_WRITE(0xFF);                // El checksum no es requerido pero igual siempre le enviamos 0xFF

 if((mmc_response(0x00))==1) return 1;

 OUTPUT_HIGH(PIN_C2);                   // Chip Select = 1 (off)
 puts("Configuracion tamaño de bloque = 512
");
 puts("Memoria inicializada!
");

 return 0;

}

//--------------------------------- MMC Get Status ----------------------------------------
//--------- Toma el registro de estado de la memoria para propositos de debug -------------

int mmc_get_status()
{

 OUTPUT_LOW(PIN_C2);                     // Chip Select = 0 (on)
        SPI_WRITE(0x58);                
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);
 OUTPUT_HIGH(PIN_C2);                    // Chip Select = 1 (off)
 return 0;

}


//-------------------------------- MMC Write Block ----------------------------------------
//---------------- Escribe en la memoria un bloque de datos de 512 Bytes ------------------

int mmc_write_block(unsigned long block_number)
{
 unsigned long i;
 unsigned long varh,varl;
 int j=0;
 
 varl=((block_number&0x003F)<<9);
 varh=((block_number&0xFFC0)>>7);
 
 puts("Escritura de bloque
");       // El tamaño del bloque se setea en  mmc_init()

 OUTPUT_LOW(PIN_C2);                    // Chip select = 0 (on)

        SPI_WRITE(0x58);                // Comando para escritura de bloque
        SPI_WRITE(make8(varh,1));
        SPI_WRITE(make8(varh,0));
        SPI_WRITE(make8(varl,1));
        SPI_WRITE(0x00);  
        SPI_WRITE(0xFF);                // El checksum no es requerido pero igual siempre le enviamos 0xFF
       
 if((mmc_response(0x00))==1) return 1;

 puts("Respuesta correcta al comando de escritura de bloque
");
 SPI_WRITE(0xFE);                       // Envio el data token

 for(i=0;i<512;i++)
  {
    if (i<30)
     SPI_WRITE(texto);               // Envio los datos
  }
 
 SPI_WRITE(0xFF);                      
 SPI_WRITE(0xFF);

 if((SPI_READ(0xFF)&0x0F)!=0x05) return 1;
 puts("Respuesta de datos correcta a la escrutura de bloques
");
 OUTPUT_HIGH(PIN_C2);                   // Chip Select = 1 (off)
 texto=" ";
 cadena=" ";
 
 return 0;

}



//------------------------------- MMC Read Block ----------------------------------
//------- Lee bloques de 512 bytes de la memoria y los envia por RS232 ------------

int mmc_read_block(unsigned long block_number)
{

 unsigned long i;
 unsigned long varh,varl;
 int parte_alta_varh;
 int parte_baja_varh;
 int parte_alta_varl;

 varl=((block_number&0x003F)<<9);
 varh=((block_number&0xFFC0)>>7);
 
 puts("Lectura de bloque
");
 
 parte_alta_varh=make8(varh,1);
 parte_baja_varh=make8(varh,0);
 parte_alta_varl=make8(varl,1);

 OUTPUT_LOW(PIN_C2);                    // Chip select = 0 (on)
 
        SPI_WRITE(0x51);                // Envio el comando de lectura de bloque
        SPI_WRITE(parte_alta_varh);     // arguments are address
        SPI_WRITE(parte_baja_varh);
        SPI_WRITE(parte_alta_varl);
        SPI_WRITE(0x00);
        SPI_WRITE(0xFF);                // El checksum no es requerido pero igual siempre le enviamos 0xFF
       
 if((mmc_response(0x00))==1)
    {
        puts("Fallo al enviar el comando
");
        return 1;  // Si la respuesta es 1 fallo el envio del comando
    }
 
 puts("
Respuesta correcta al comando de lectura de bloque
");

 if((mmc_response(0xFE))==1)
    {
        puts("Token incorrecto
");
        return 1;  // Esperando el  data token
    }

 puts("
Data token correcto
");

 for(i=0;i<512;i++)
        {
                putc(SPI_READ(0xFF));   // Leemos 512 bytes
        }

 SPI_READ(0xFF);                        // CRC bytes that are not needed
 SPI_READ(0xFF);
 OUTPUT_HIGH(PIN_C2);                   // Chip Select = 1 (off)
 SPI_WRITE(0xFF);                       // Le enviamos algunos clocks para asegurar que termina el proceso
 puts("
Fin de lectura de bloque
");

 return 0;

}


//-----------------------------   MMC get response -------------------------------------
//------ Lee repetdamente la SD hasta obtener la respuesta buscada o sale por timeout --

int mmc_response(unsigned char response)
{
        unsigned long count = 0xFFFF;           // 16bit repeat, it may be possible to shrink this to 8 bit but there is not much point
        while(SPI_READ(0xFF) != response && --count > 0);
        if(count==0) return 1;                  // loop was exited due to timeout
        else return 0;                          // loop was exited before timeout
}



//-----------------------------   Programa principal -------------------------------------

void main()
 {
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
   output_low(PIN_B5);

   enable_interrupts(int_rda);
   enable_interrupts(global);

   cadena=" ";
   texto=" ";


   printf("
********************************************
");
   printf("
UTN - Facultad Regional Parana
" );
   printf("
 Tecnicas Digitales II
" );
   printf("
 Proyecto Holter
" );
   printf("
 Para inicializar la memoria presione i

" );
   printf("
********************************************

");
   
   do {

      if(Keypress!=0x00)
      {
         switch(Keypress)
                        {
                           case "i": if (mmc_init()==0)
                                     printf("
 Arranco la memoria

" );
                                     else  printf("
 Fallo al iniciar la memoria
" );
                           break;

                           case "r": disable_interrupts(global);
                                     printf("
 Que sector quiere leer?
" );
                                     gets(cadena);                               // Guarda caracteres hasta que recibe enter.
                                     x = atoi32(cadena);                         // Convierte los 3 caracteres ascii recibidos a un numero entero.
                                     printf("
 Leyendo sector %x

",x );
                                     mmc_read_block(x);
                                     enable_interrupts(global);
                           break;


                           case "w": disable_interrupts(global);
                                     printf("
 Ingrese el texto a guardar en la memoria
");
                                     gets(texto);
                                     puts(texto);
                                     printf("
 En que sector lo quiere guardar?
");
                                     gets(cadena);
                                     x = atoi32(cadena);
                                     printf("
 Guardado en el sector %x
",x );
                                     mmc_write_block(x);
                                     enable_interrupts(global);
                           break;

                   
                        }
         Keypress=0x00;
       }

   } while (TRUE);

 }


Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #9 en: 02 de Marzo de 2006, 05:50:00 »
GiñoMuxas gracias Tigreivan por las librerias  en cuanto tenga un momento me las miro a ver que tal y ya os comento.
 A elguitre, todavia estoy mirando cosas sobre el tema del fat16 en cuanto tenga algo  os cuento.

Gracias a todos por hacer de este foro una la mejor herramienta de ayuda.Rebotado

Desconectado elguitre

  • PIC10
  • *
  • Mensajes: 34
RE: ayuda con pic y mmc
« Respuesta #10 en: 02 de Marzo de 2006, 23:37:00 »
Toxete: Como estas, bueno si tenes novedades con el tema de FAT16 me gustaria que las comentes, estamos trabajando con tigreivan en un proyecto para la facultad, saludos.

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #11 en: 16 de Marzo de 2006, 10:29:00 »
Perdonar pero no me deja subir el archivo, os pongo el link y esta en la zona Download.

http://www.mpic3.com/downloads/?page=2&rpp=20&so=Latest%20Files

Un saludo!!

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #12 en: 16 de Marzo de 2006, 10:35:00 »
A ver si podeis hacer andar este codigo que he puesto de la pagina mpic3 que esta para el pic 18f4752 pero lo necesito para el pic16f876, yo lo he compilado y sin problemas para el 18 pero para el 16 se vuelve loco. Ya me contais.


Un saludo desde la ciudad de las fallas!!!!

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: ayuda con pic y mmc
« Respuesta #13 en: 16 de Marzo de 2006, 19:00:00 »
A primera vista veo que en HDD.c define el reloj a 40MHz y el 16F876 admite hasta 20MHz.
Por lo demás ni idea. Yo intenté hacer funcionar ese mismo driver y no lo logré.

Un saludo y muxa suerte Sonrisa Gigante y...

¡¡¡ A disfrutar de les falles !!!

Giño Estais tod@s invitad@s Giño
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado toxete

  • PIC10
  • *
  • Mensajes: 44
RE: ayuda con pic y mmc
« Respuesta #14 en: 22 de Marzo de 2006, 02:16:00 »
desquiciado
Hola a todos de nuevo!
Mirad estoy gastando el codigo de micrcochip que hay mas arriba y funciona bien con un pic16f873, pero quiero gastar un pic18f2525 que es el mismo encapsulado y mismo pinout pero ni siquiera inicializa la MMC y todo lo demas me funciona perfecto RS232, I2C, etc....
A ver si alquien me puede decir algo.

Gracias y un saludo!!


 

anything