lector de tarjeras SD,MicroSD y MMC con PIC16F877A

      • 8
      • mensajes
      • miembro desde
      • 03/12/07
    #51 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Hola cyber-amigos, me alegra mucho encontrar gente usando el PIC por estos lares y este foro para hacer investigaciones, y me les voy a unir, yo ya uso el PIC 18F4680 (mi bebe), pq tengo un desarrollo montado en el, me interesa saber, si es posible donde Electropiquio y Ejtagle consiguieron al dichoso zocalo, estudiare todos los pasos que siguieron y les comento mis experiencias, esto tiene mil aplicaciones, y dejenme un lugarsito q me tiro a la pile....
    Gracias y saludos,

      • 21
      • mensajes
      • miembro desde
      • 25/01/08
    07/04/2008
    #52 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Hola Cremator:
    No se por donde estas vos, pero en Buenos Aires, el zocalo de SD para plaqueta lo podes conseguir en Cika Electronica SRL ( Registrarse Inicia sesión )
    El costo es de aproximadamente $9 pesos (USD 2,35 + 21% IVA).
    El codigo de articulo en Cika es el PSDBT4-09GL (te paso el codigo porque actualmente en la pagina no figuran los detalles de los articulos, y si lo buscas como zocalo SD, no vas a encontrar nada)

    Esta es la hoja de datos del zocalo, del fabricante: Registrarse Inicia sesión

    Eso si, en Cika tenes que gastar como minimo USD 15 en tu compra, asi que te aconsejo que te vallas con una lista con otros componentes, para no pasar papelon alli cuando el vendedor te diga "que otro articulo mas vas a llevar?"
    Te aconsejo en invertir en Pic´s, tienen buenos precios

    Nos mantenemos en contacto,
    Saludos

      • 8
      • mensajes
      • miembro desde
      • 03/12/07
    09/04/2008
    #53 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Si vivo en Capital, mil gracias, conozco Cika, seguro en estos dias me doy una vuelta. Gracias nuevamente,

      • 8
      • mensajes
      • miembro desde
      • 03/12/07
    18/04/2008
    #54 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Ayer pase x Cika y ya compre los zocalitos... Miles de gracias, estuve pensando y para no desvirtuarme del foro voy a empezar el desarrollo con el 16F877A, dame un tiempito para estudiar todo y probar algunas rutinas y me largo a hacerlo. Y como lo prometido comentar los avances, Mil gracias nuevamente y saludos,

    Lucho

      • 99
      • mensajes
      • miembro desde
      • 09/02/07
    03/10/2008
    #55 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    La verdad que esto me viene como anillo al dedo (del pie, pero bue.. ). El tema es que estoy haciendo un proyecto para la facu y tambien quiero usar una SD. La diferencia (y de ahi lo del pie) es que uso un MCS-51 (AT89S52 de atmel). En fin... Primero les cuento que tengo un código que sé que anda para usar SPI con un micro que no tenga SPI, está en C para 8051. Está orientado a un ADC SPI (que también uso en el proyecto). Si a alguien le puede servir ese código avisen que lo posteo. Se que anda porque lo probé.
    Ahora el mangazo... Alguien sabe como hacer para grabar en la SD algún tipo de archivo que pueda después leer en una PC? La idea de mi proyecto es loggear en la SD, aunque sea un texto plano, no me calienta. El tema es cómo generar un archivo dentro de la SD.- Gracias! saludos!

      • 1
      • mensajes
      • miembro desde
      • 07/11/08
    07/11/2008
    #56 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    hola, yo estoy generando mi codigo para solo leer y grabar en la tarjeta SD, a traves del modulo SPI del PIC16F877, uso el de Microchip, y lo trabajo todo en assembler, aun no he podido implementarlo, pero por el momento no pienso hacerlo con el interfaz de a la PC, me gustaria recibir ayuda con ese codigo para comunicarme a traves del RS232
    mi proyecto es para un curso, asi que solo debo asegurarme que puedo escribir y leer en la tarjeta, por el momento solo uso el CMD24 para escribir en un bloque 512 Bytes, y lectura de un bloque simple con el CMD17, te adjunto tambien mi circuito de prueba del proteus, pero para esto hay que deshabilitar las etiquetas WRESPONSE, ya que no puedo generar la respuesta de la tarjeta SD, revisalo por fa, cualquier ayuda me vendria muy

    ya creo haber resuelto el tema del inicio de la tarjeta como lo especificas al comienzo de este foro
    mi problema es ahora que al mandar el CMD24, debo acompañarlo con 40 bits mas u 5 bytes, de los cuales los primeros 4bytes indican la direccion donde se escribe, verdad?, el 5to byte seria un 0xXX, luego esperar por la respuesta y luego le envio los 512Bytes que me pide?..y para lectura, creo que debo usar previamente el CMD16, el cual me selecciona el tamaño del bloque a leer, luego con el CMD17 mas los 4bytes para la direccion de partida, y luego me preparo para leer, cierto...

    ahora para hacer eso atraves del hyperterminal de la PC, con el 232, tengo que usar el modulo USART; verdad?...bueno..agradeceria tu ayuda..cdt

    pasame tu correo por favor, para enviarte el codigo, la pagina me sale con error y no me deja adjuntar...mi correo es lokyllos@hotmail.com

      • 21
      • mensajes
      • miembro desde
      • 25/01/08
    10/11/2008
    #57 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Hola,
    mirá, lo que yo hacía para leer datos de la tarjeta era lo siguiente:
    1- inicializar la tarjeta: mandando 10 bytes 0xFF por el SPI (80 1's)
    2-mandar CMD0 (resetea la tarjeta)
    3- espera rta
    4-mandar CMD1 (activa el proceso de inicializacion de la tarjeta)
    5-recibir rta
    6-el paso 4 se realiza n-veces hasta recibir respuesta de la tarjeta (a mi para leer la rta tenía que mandar el CMD1 como tres veces. Te conviene hacer un lazo que mande por ej 20 veces como maximo y si no hay rta que vuelva con error)
    7- mando CMD 18 (lectura de sectores continuos, es decir, le das la direccion del sector donde queres empezar, y seguis leyendo datos hasta mandar el comando STOP)

    para los distintos comandos se mandaban estos bytes por el SPI:
    CMD D'0' , 0 , 0 , 0 , 0 , H'95' ; send CMD0
    CMD1 D'1' , 0 , 0 , 0 , 0 , H'FF' ; send CMD1
    CMD17 D'17',H'00',H'06',H'CA',H'00',H'FF' donde los 4 del medio son la direccion a grabar
    CMD18 D'18',0,H'03',H'94',H'00',H'FF' idem 17

    es importante que la direccion de lectura sea multiplo de 512, sino te da una error de frame

    antes de mandar cada comando hay que poner el CS en cero.....y al finalizar el comando en 1

    las respuestas se reciben mandando unos por el SPI (0xFF)

    De muchas cosas no me acuerdo porque lo hice hace un año, ahora dentro de poco tiempo voy a sentarme con todo lo que había hecho, y despues de tratar de entender lo hice en su momento, voy a recopilar de forma prolija toda la información, y colgarla en alguna página y/o blog, pero por estas semanas no tengo nada de tiempo.

    En cuanto a la UART, podés usar tranquilamente la del PIC 16F877. Es bastante facil de configurar en el Pic, para eso tengo a mano varias rutinas.....solo configuras la velocidad a 9600 por ej, y ya lo conectas a la PC y con el Terminal a esa velocidad ya recibis y visualizas los datos (previo adaptador de voltajes CMOS-232, obviamente)

    Espero que te haya servido como ayuda,
    Saludos!!!

      • 1
      • mensajes
      • miembro desde
      • 03/12/08
    20/01/2009
    #58 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    hola nano soy nuevo en este foro y la verdad me intereso mucho tu propuesta del proyecto quisiera saber como vas con el codigo en asm ya que solo publicaste una parte y la verdad me gustaria verlo todo completo oviamente te reservo los derechos de autor, es que creo que me puede servir para mi proyecto final de microcontroladores.te agradeceria que me colaboraras.

      • 1
      • mensajes
      • miembro desde
      • 15/01/09
    21/01/2009
    #59 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Hola permalink,
    Yo en estos momentos tengo el mismo problema, con unas tarjetas SD me funciona el comando de inicializacion pero con otras no, incluso son de la misma marca kingston, quisiera saber si encontraste solución a tu problema para que me ayudes por favor, gracias.

    Mahatma

      • 1
      • mensajes
      • miembro desde
      • 22/02/09
    22/02/2009
    #60 Re: lector de tarjeras SD,MicroSD y MMC con PIC16F877A

    Hola tengo un problema he estado en el proyecto del lector gravador de SD, pero tengo un problema, por ahora lo que nos dejaron es inicalizar la memoria SD con SPI, bueno hemos estado leyendo un poco de esto y los comandos para realizar esto son el comando 0 y el comando 1, en terminos de pic debe ser 40 y 41, cuando intento inicializar la sd, segun si la inicializar pero ahora cuando no tiene SD hace exactamente lo mismo, es por eso que no se si esta respondiendo bien aqui esta mi codigo, espero que me ayuden por favor, es que como probamos y si enviaban los comando bien pensamos que ya estaba bien pero se me ocurrio comprobarlo quitandole la memoria al adaptador y respodnia de la misma forma saludos

    #include <16F877A.h> /* tipo de PIC */
    //#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT ciudado no se que pes
    #fuses HS,NOPROTECT //configura no protegido y la frecuencia
    #use delay(clock=4000000)//Reloj para 4 MHZ
    #org 0xF00,0xFFF void loader16f877(void){}
    int8 i;
    int8 data_in=0;

    /************************************************** **************************
    Sección de comandos
    ************************************************** **************************/

    void CMD0(){
    spi_write(0x40) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0x95) ;
    }

    void CMD1(){
    spi_write(0x41) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0x00) ;
    spi_write(0xFF) ;
    }
    /************************************************** **************************
    Función para cambiar a modo SPI la SD
    ************************************************** **************************/
    int inicializa(){
    set_tris_c(0x10);

    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_bit(PIN_C2,1);
    // Manda 80 pulsos de reloj para cambiar a modo SPI
    for(i=0;i<10;i++)
    {
    spi_write(0xFF);
    }
    output_bit(PIN_C2, 0); /* Activacion de la SD */

    /* Envia a la SD el comando 0 */
    while(data_in!=1)
    {
    CMD0();
    for(i=0;i<64;i++)
    {
    spi_write(0xFF);
    data_in = spi_read();
    if(data_in==0x01)
    {
    output_b(data_in); //
    delay_ms(2000); //
    break;
    }
    }
    }
    output_bit(PIN_C2,1); /* Desactivacion de la SD */
    spi_write(0xFF);
    output_bit(PIN_C2, 0); /* Activacion de la SD */

    /* Envia a la SD el comando 1 */
    while(data_in!=0)
    {
    CMD1();
    for(i=0;i<64;i++)
    {
    spi_write(0xFF);
    data_in = spi_read();

    if(data_in==0x00)
    {
    output_b(data_in);
    break;
    }
    }
    }
    output_bit(PIN_C2,1); /* Desactivacion de la SD */
    spi_write(0xFF);
    return 0;
    }
    void main()
    {
    inicializa();
    }

Primer ... 4567 Último
IR ARRIBA