Autor Tema: MMC en CCS  (Leído 10053 veces)

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

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
MMC en CCS
« en: 12 de Septiembre de 2007, 07:38:51 »
Hola!!!

Estoy probando las tarjetas MMC con los PICs y, para ello, me he basado en el post de RedPic MMC Card: Hardware & Firmware.
El problema es que no se que tengo mal, si la placa o el programa.

En lo relativo a la placa he medido y da valores correctos en los distintos terminales.

¿¿¿¿Me podéis decir si veis algo mal en el código????
Código: [Seleccionar]
#include <18f4550.h>

#Fuses HS,NOWDT,NOPUT,NODEBUG,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NOPUT,PLL1
#Fuses NOSTVREN,NODEBUG,NOWRTD,NOIESO,NOFCMEN,NOPBADEN,,NOWRTC,NOWRTB,NOEBTR
#Fuses NOEBTRB,NOCPB,NOMCLR,NOLPT1OSC,NOXINST,NOUSBDIV,NOVREGEN,NOICPRT,CCP2C1

#use delay(clock=4000000)

#byte   portb=0xf81
#byte   portd=0xf83

 int32 direccion=0;
 int8  datos[512];
 int   contador=0;
 int8  valores[10];
 int16 i=0;
 int16 size=512;

#define MMC_CS PIN_D4
#define MMC_CLK PIN_D6
#define MMC_DI PIN_D5
#define MMC_DO PIN_D7

#include <mmc_spi.c>


void main()
{
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0x00);
   set_tris_e(0x00);


   disable_interrupts(global);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi2(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(VREF_LOW|-2);
   setup_low_volt_detect(FALSE);
   setup_oscillator(False);
   port_b_pullups(false);

   do{
      portd=mmc_init();
      delay_ms(500);
   }while(mmc_init()!=0);

   do{
 
           for (i=0;i<=511;i++)
         {
            datos[i]=0;
         }

         if (mmc_read_block(direccion,size,&datos[0])==0)
         {
            portb=0x33;
            delay_ms(500);
            for (contador=0; contador<=511; contador++)
               if (datos[contador]=='G')
            {
               portb=0x3F;
               delay_ms(500);
               contador=contador+1;
               if (datos[contador]=='H')
               {
                  portb=0x0F;
                  delay_ms(500);
                  contador=contador+1;
                  if (datos[contador]=='G')
                  {
                     portb=0x03;
                     delay_ms(500);
                     contador=contador+1;
                     if (datos[contador]=='p')
                     {
                        portb=0x00;
                        delay_ms(500);
                        contador=contador+1;
                        if (datos[contador]=='r')
                        {
                           portb=0xFF;
                           delay_ms(500);
                           contador=contador+1;
                           for(i=0;i<=10;++i)
                           {
                              valores[i]=datos[contador];
                              contador=contador+1;
                           }
                        }
                     }
                  }
              }
            }
         }
         direccion+=512;
   }while(mmc_read_block(direccion,size,&datos[0])!=0);
  for(i=0;i<=10;++i)
  {
     portb=valores[i];
     delay_ms(1000);
  }
}

Mi idea es tener un archivo txt con datos en la MMC que comiencen con "GHGpr" y cada dato lo saque el micro por el puerto b.

El problema es que no me inicia la MMC y no se si esta bien el resto.


Gracias!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: MMC en CCS
« Respuesta #1 en: 12 de Septiembre de 2007, 08:40:18 »
Más allá de que no conozco el código y de que otro que lo haya implementado te pueda dar un mejor vistazo, te puedo ayudar a plantear tu problema, ya que no aclaras qué tipo de problema tienes.

Hablas de medir tensiones y demás, para comenzar ¿el pic anda o no anda? digo, como para ir descartando cosas y luego enfocarse en tu problema particular.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: MMC en CCS
« Respuesta #2 en: 12 de Septiembre de 2007, 09:22:40 »
Me gustaría mucho poder ayudarte ya que me quiero meter con ese tema...pero tendrás que esperar una semana para que me ponga con ello, de todas maneras intentaré ayudarte en todo lo que pueda.

En principio yo me aseguraría si la inicialización de la mmc es correcta, como...

Código: [Seleccionar]
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// mmc_init()     Initializes the unit.
//
// Paramaters:    <none>
//
// Returns:       0 if initiated correctly
//                Non-zero if initiation failed
//
// Special Info:  This should be called immediately to initialize
//                the multi media card.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Pon sólo el código de inicialización y iguala una salida del PIC a la función mmc_init() de esta forma:

Código: [Seleccionar]
#include <18f4550.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVRE
#use delay(clock=4000000)

#define LED PIN_C0

#define MMC_CS PIN_D4
#define MMC_CLK PIN_D6
#define MMC_DI PIN_D5
#define MMC_DO PIN_D7

#include "mmc_spi.c"

void main() {
    while (TRUE)
   {
        if(mmc_init()==0)
        LED PIN = 1;
        else
        LED PIN = 0;
    }
}

Empieza poco a poco no quieras llegar y que todo funcione, esta es mi recomendación ya me diras si esto te funciona, ya que si tienes todo bien conectado con sólo este código se debería de iniciar tu MMC o SD card por spi.

Veo que tienes un cristal de sólo 4Mhz no sé si eso es suficiente para el funcionamiento de la MMC...ahí ando pez...
« Última modificación: 12 de Septiembre de 2007, 09:27:29 por c4_esp_VR »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: MMC en CCS
« Respuesta #3 en: 12 de Septiembre de 2007, 15:34:04 »
uff Slalen leyendote, sueño cuando será el dia en que pueda hacer mis primeros ensayos con la tarjeta  :?

te cuento a manera de especulación que en el proteus no logro iniciar la mmc con ese driver, la función mmc_init() me devuelve un valor distinto de cero, entonces me doy cuenta que el pic hace muchos reintentos y no logra comunicarse.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: MMC en CCS
« Respuesta #4 en: 12 de Septiembre de 2007, 16:42:57 »
¿¿¿Has probado el código que he puesto yo PalitroqueZ???..¿¿¿.estas seguro que el Proteus puede simular una MMC???...tampoco me fiaría mucho del proteus ya que muchas cosas que funcionan con el proteus luego no funciona en el PIC ya que he visto muchos post por aqui pidiendo ayuda sobre dicho tema  :shock: :shock: :shock: :shock:

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: MMC en CCS
« Respuesta #5 en: 12 de Septiembre de 2007, 16:55:46 »
¿¿¿Has probado el código que he puesto yo PalitroqueZ???..¿¿¿.estas seguro que el Proteus puede simular una MMC???...tampoco me fiaría mucho del proteus ya que muchas cosas que funcionan con el proteus luego no funciona en el PIC ya que he visto muchos post por aqui pidiendo ayuda sobre dicho tema  :shock: :shock: :shock: :shock:

sip, he realizado unos ensayos, pero me extraña porque he probado con otros programas y funcionan muy bien, incluso hay uno por ahí que usa la FAT (no me acuerdo si es tuyo) y trabaja mas que bien, te aparece los caracteres en el virtual terminal y puedes guardar información por bloques de 512 bytes. en estos programas si se inicia la mmc. por eso es la confución que tengo con el mmc_spi.c
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: MMC en CCS
« Respuesta #6 en: 12 de Septiembre de 2007, 17:32:45 »
Desgraciadamente PalitroqueZ yo no he realizado el programa de la FAT que comentas, el único programa que he visto de este tipo es el que tiene hecho red pic que por falta de tiempo no he podido probar...vamos a esperar que nos dice Slalen sobre la funcionalidad del programa que he hecho o si ha conseguido ya algún avance sobre el tema.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: MMC en CCS
« Respuesta #7 en: 12 de Septiembre de 2007, 20:56:10 »
Hola, yo tambien quiero decir que estoy trabajando con la SD Card con este entrenador, y el driver de CCS para SD Card, a mi tampoco me corre.  Intente de varias forma y nada, Recopile varios drivers y nada, siempre regresa otra cosa, antes de inicializarla, es por eso que creo que lo mejor sera crear el propio driver.  Ahorita ando agarrado del tiempo, pero este Domingo me metere a programarlo. Estoy mirando una información sobre SD Card.. ES Bastante complejo eso.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: MMC en CCS
« Respuesta #8 en: 12 de Septiembre de 2007, 22:01:02 »
Hola, quizá los hayais visto ya, pero por si acaso aquí os dejo el código en CCS para MMC/SD FAT32 y FAT16 que hay en los foros de CCS:

MMC FAT32
http://www.ccsinfo.com/forum/viewtopic.php?t=31532

MMC FAT16
http://www.ccsinfo.com/forum/viewtopic.php?t=21721


Suerte!!



Teclado no encontrado - Piense F1 para continuar

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: MMC en CCS
« Respuesta #9 en: 13 de Septiembre de 2007, 04:59:30 »
Me imaginaba que al tener CCS una libreria sobre MMC/SD sería muy fácil manejarlo...pero veo que me estoy engañando a mi mismo porque menudos cachos de código pone la gente en el foro de CCS...y si a eso le unimos que a PICmouse no le ha funcionado teniendo una placa entrenadora...bueno pues avisarme cuando os pongais en serio con ello, ya que en mi caso primero tengo que hacerme la placa y luego programar pero quiero ayudar en todo lo posible ya que me parece un buen proyecto.

Un saludete a todos.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: MMC en CCS
« Respuesta #10 en: 13 de Septiembre de 2007, 06:21:04 »
Bueno a ver si alguien puede simular o probar este código:

Código: [Seleccionar]

#include<18F4550>
#use delay (clock=20000000)
#use rs232(baud=19200, xmit=pin_c6, rcv=pin_c7)
#fuses HS, NOLVP, NOWDT, PUT, BROWNOUT

#define MMC_CS    PIN_D0
#define MMC_CLK   PIN_D1
#define MMC_DI    PIN_D2
#define MMC_DO    PIN_D3

#include <mmc_spi.c>

main()
{
printf("\n\rTeste MMC drivers\n\r");

if(mmc_init()==0)
   printf("\n\rmmc init ok\n\r");
else
   printf("\n\rmmc init fault\n\r");
}

Creo que este código debería de funcionar correctamente o por lo menos eso creo...

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: MMC en CCS
« Respuesta #11 en: 14 de Septiembre de 2007, 12:25:33 »
Hola de nuevo!!!
Más allá de que no conozco el código y de que otro que lo haya implementado te pueda dar un mejor vistazo, te puedo ayudar a plantear tu problema, ya que no aclaras qué tipo de problema tienes.

Hablas de medir tensiones y demás, para comenzar ¿el pic anda o no anda? digo, como para ir descartando cosas y luego enfocarse en tu problema particular.

El problema es que al iniciar la mmc me da un uno en vez de cero, según la descripción tiene que dar cero.

En el código de RedPic sólo la inicia con mmc_init() y comprueba que valga cero.

Si según PalitroqueZ, no funciona en Proteus es que tiene que haber algo mal en el código (a parte del circuito)

Lo que comentáis del tipo de formato, se supone que no importa ya que el micro reconoce todos los caracteres y datos en hexadecimal (como al abrir la tarjeta con el winhex).

Esto me tiene loco!!!!

PD: he traducido el funcionamiento de las funciones de la librería mmc_spi. El archivo está en mi web en la sección de PICs

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: MMC en CCS
« Respuesta #12 en: 15 de Septiembre de 2007, 15:43:19 »
aquí hay dos adjuntos.

452 mmc - Isis 6.9.rar
el primero funciona bien en el proteus, se supone que ocurre la inicialización, pués hace lo demás (lectura, escritura) y no usa el driver del ccs. no le  conozco su autoría.

mmc_spi_probando.rar
el segundo es un ejemplo que monté parecido al prgrama de c4_esp_VR, y nada, no funciona

« Última modificación: 15 de Septiembre de 2007, 15:45:53 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: MMC en CCS
« Respuesta #13 en: 16 de Septiembre de 2007, 12:30:44 »
Hola de nuevo!!!

Veo que tienes un cristal de sólo 4Mhz no sé si eso es suficiente para el funcionamiento de la MMC...ahí ando pez...

No es cosa del cristal ya que (mirando el código de la librería) he visto que los retardos son de ms.

PalitroqueZ, la librería que funciona ya la había visto, es una librería para MMCs con formato FAT16.

RedPic ensu web y en el post que comenté anteriormente lo logró con la librería de CCS

Un saludo

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: MMC en CCS
« Respuesta #14 en: 26 de Septiembre de 2007, 08:34:24 »
Hola de nuevo!!!

Sigo empeñado en hacer funcionar las MMC!!! Pero se queda en el empeño :mrgreen:
He estado leyendo el foro de ccs y como dice PalitroqueZ:


te cuento a manera de especulación que en el proteus no logro iniciar la mmc con ese driver, la función mmc_init() me devuelve un valor distinto de cero, entonces me doy cuenta que el pic hace muchos reintentos y no logra comunicarse.

Parece que nadie ha conseguido hacer funcionar esta librería con el ISIS, debe ser algún fallo del simulador

Los avances son mínimos, pero....


 

anything