Lecto-grabador de tarjetas MMC, SD, MicroSD con PIC

No estoy seguro si el puerto SPI usado para la microSD también pueda utilizarse para comunicación entre el WT5001M02 y el microcontrolador.
La persona que me vende esos módulos me dijo que si, pero yo no lo he comprobado.
Yo uso el protocolo RS-232, ya que me resulta más cómodo que el SPI.

No voy a afirmar nada sobre las microSD, pero me gustaría decir que en mi opinión
el protocolo SPI es considerablemente más simple de implementar que el RS232.
Yo probé ambos protocolos para cosas diferentes y cada uno tiene lo suyo.

En el RS232 la frecuencia es un estándar (ventaja) pero si no la podés sincronizar perfectamente se pierde la "trama" (contra).

En el SPI también se usan como mínimo 2 bits, pero uno mismo maneja el CLK y así sabe en qué momento tomar cada bit y enviarlo o guardarlo (ventaja). Esto es bueno para el principiante que puede probar la transmisión a baja velocidad y ver el valor de los bits en un led de control. En algunos casos viene implementado en modo bidireccional, de manera que uno envía datos y a la vez los recibe en forma cíclica (usando un 3er pin).
Además, algunos dispositivos como el MAX6675 (lector de termocupla compensado) solo se pueden leer mediante SPI. https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf
A veces no se puede elegir. :oops:

Un abrazo.
 
Hola a todos, tengo una pregunta. Yo deceso pasar la señal de audio generada por el Wt5001 aun un moden Sim900, la forma en que lo realice en un principio fue de forma directa, cosa que no me funciono :cry::confused: ya que el modulo Wt sufrió traumas serios a tal punto que se daño :eek: jejejejej.
Ahora lo que realice fue que la señal de audio primero la paso por un transformador 1.1 de audio, y le coloque una resistencia 10 Oh para simular la resistencia de la bocina.
“ Conexión de la resistencia: La pata 1 del primario a la pata 1 de la resistencia, la 2 de la resistencia a un terminal del modulo wt .
De la pata 2 del primario a el terminar de el wt.
Siendo los terminales del modulo lo que generan la señal”
Luego la salida del secundario lo conecto a la entrada del MIC del modulo sim900.
Existe una manera en el que yo pueda suprimir el transformador 1:1 o de que otra forma puedo acoplar la señal del modulo de audio a el modulo SIM900, sin tanto componente de por medio.
Les agradezco su tiempo y paciencia
 
Última edición:
Los módulos WT5001 tienen un pin llamado AL, (ADC Audio Output) aparte de los pines LOUT y ROUT.
Dicho pin entrega una señal de audio de baja intensidad, apta para entradas de línea.
De ahí puedes tomar la señal a través de un capacitor, una resistencia y un preset o potenciómetro.
 
Gracias D@rkbytes por tus muy buenos concejos y oportunos, la verdad que has sido un gran maestro para mi.
Voy a realzar la maniobra utilizando un capacitor electrolítico, conectando la pata + del -|(- a la salida del (ADC Audio Output) luego de la pata - del -|(- colocare la pata 1 de la resistencia y la pata dos de la resistencia al preset y de ahi saldra la señal para el siguiente modulo.
Te comento como me fue.
 
Hola D@rkbytes Gracias, ya pude realizar el acople de manera perfecta pero me gustaría dejar la señal sin ese zumbido característico de grond (ñiiiiiiiiiiiiiii).
le coloque un electrolítico -|(- de 100 micro F.
 
Hola amigos como ustedes saben estoy estudiando el tema del acoplamiento, y según los datos suministrados en el foro ya pude acoplar la señal y eliminar el ruido en un 80 %.Pero el otro 20% aún se resiste jejejejeje.
He notado el siguiente comportamiento.
Cuando sale la señal del acoplador para el moden gprs shield de arduino uno, el celular que uso de prueba previo recibe la llamada y cuando escucho el mensaje tiene un ruidito.
Ahí mismo, en ejecución desconecto la señal enviada por wt5001 justo antes de la etapa de acoplamiento, y espero que el sonido del mensaje en el celular de prueba se deje de escuchar. Luego conectó la señal para que se escuche el mensaje nuevamente y cuando lo reproduce el celular de prueba, el mensaje de voz está completamente limpio 0 ruidos (no puedo creerlo hechicería:confused: jejejje).
Si han tenido alguna experiencia o tiene alguna idea de cómo tratar el tema, le agradezco que me orienten un poco para documentarme en el caso y poder realizar los cambios en el circuito.Sé que suena como a locura pero eso me está pasando.
Gracias por su tiempo.
 
Última edición:
Hola:

Quiero saber si se puede almacenar datos en una Micro-SD sin ningún formato de archivo sea deWindwos, Linux o en Mac, solo en crudo y cómo funciona por dentro.

Y si hay ejemplos en asm o en C en microchip sobre controlar dicha tarjeta. Da igual el PIC que uses.

Se que si guardas algo, Windows no lo reconocerá precisamente porque no usa formato, solo en crudo.

Saludos
 
Hola que tal amigo, creo haber encontrado el origen de mi problema.

Creo que el problema está en que yo estoy enviado la señal de audio del Wt5001 a una entrada de un micrófono. Quizás a mi circuito acoplador (Capacitor, resistencia y preset )le falte algo más para poder convertir la entra del micrófono en una especie de entrada auxiliar.
La entrada del micrófono es solo para hablar no es de grabar, por lo que tengo entendido, la entrada del micrófono es como la de las PC.
Al final de toda las pruebas a mi circuito de acoplamiento le coloque un transformado de audio 1:1 y el sonido se escucha muy bien 'clarito'.
Les agradezco que si estoy equivocado con mi hipótesis de que una entrada de micrófono no se puede usar como entrada de señal auxiliar, me corrijan. Y de estar en lo correcto de que otra forma puedo pasar la señal sin usar un trasformador de audio.
 
Hola amigos entusiastas de la electrónica.

Tengo problemas con este tema de los microcontroladores y las memorias SD. En el simulador mi señal de reloj se ve cuadrada y bien definida, con los parámetros necesarios, pero en cuanto la grabo en el PIC, la señal se ve muy mal. He intentado cambiar la programación y grabar en otros PICs nuevos para descartar la falla, pero solo en el simulador se logra una señal buena.

¿Alguien ha tenido un problema similar? he estado pensando incluso que podría estar fallando la programadora de los micros cuando los grabo.

Adjunto algunas capturas y la programación con la que he estado intentando por lo menos inicializar.

Esto es lo que estoy usando:
-Compilador: CCS Compiler V5.081
-Simulador Proteus 8.8 SP1
-Programador PIC600
-Microcontrolador PIC18F4550

Gracias por sus respuestas y un saludo.
 

Adjuntos

  • Osciloscopio.jpg
    Osciloscopio.jpg
    123.1 KB · Visitas: 11
  • Proteus.jpg
    Proteus.jpg
    253.9 KB · Visitas: 11
  • PICYSD.txt
    2.4 KB · Visitas: 8
Sería maravilloso que en la vida real las señales se vieran tan definidas como en el simulador.
Existen cosas como las capacidades parásitas que pueden deformar la señal, y más si se usa un protoboard.
Sin embargo, mientras las señales estén dentro del rango interpretable por el dispositivo, las debe reconocer.
 
Por lo que se vé, parece tener un problema de terminacion de linea. Si es un protoboard seria entendible, pero yo pondría algunas resistencias de terminacion de valor...vaya uno a saber. Con que no perjudique el fan-out de los terminales del transmisor SPI seria un buen comienzo...
 
He intentado cambiar la programación y grabar en otros PICs nuevos para descartar la falla, pero solo en el simulador se logra una señal buena.
Lo que te hizo falta cambiar es la palabra de configuración.
Por mera curiosidad compilé el programa que adjuntas para ver los fuses y existe un problema.

El CPU está funcionando con una frecuencia dividida por dos.
Bad_Config.jpg

Si se requiere que trabaje a 10 MHz, (HS_OSC) se tiene que desactivar el prescaler y el PLL.
Como no se va a usar el USB, tampoco tiene caso activar el regulador interno.
Good_Config.jpg

Y para lograr esa configuración en PIC C de CCS, no hay mucho que declarar...

#use delay (CRYSTAL = 10 MHz, CLOCK = 10 MHz)
#fuses NOVREGEN, NOFCMEN

Con eso basta.

Nota:
Cuando se desactiva el prescaler, la parte donde dice: -Oscillator Selection- (Postscaler) ya no es tomada en cuenta.
 
Gracias, lo intentare con los cambios que mencionas, llevo un rato en esto y no acabo de entender bien cómo manejar la memoria con el PIC y las librerías y ejemplos que circulan por la red, parece no funcionar.
 
Bien, pues sigo con el problema.

¿Alguien ha utilizado la librería de suky? Se lee que es buena, pero a mi se me queda en esta parte:
C:
BOOL SDCard_send_command_R7(UINT8 cmd,UINT32 arg,UINT8 CRC,SDCARD_RESPUESTA *res)

{


   UINT8_VAL ResTmp;

   UINT16 i;

   UINT32_VAL Temp;

 

   Temp.Val=arg;

   SD_CS=0;

   for( i=0;i<16;i++) WriteMedia(0xFF);

   WriteMedia(cmd|0x40);

   WriteMedia(Temp.MB);

   WriteMedia(Temp.UB);

   WriteMedia(Temp.HB);

   WriteMedia(Temp.LB);

   WriteMedia(CRC);

 

    

   // Se espera respuesta R1

   i=0;

   do{

      ResTmp.Val=ReadMedia();

      i++;

   }

   while((ResTmp.b7)!=0 && i<SDCARD_TIMEOUT);// mientras no corresponda con 0xxxxxxx.-

   if(i>=SDCARD_TIMEOUT){SDDeselect();return(0);}

   Temp.MB=ReadMedia();

   Temp.UB=ReadMedia();

   Temp.HB=ReadMedia();

   Temp.LB=ReadMedia();

 

   res->R1.Val=ResTmp.Val;

   res->Retorno=Temp.Val;

   #if defined(SDCARD_DEBUG)

      printf("Repeticiones para respuesta de CmdXX: %Lu; Respuesta recibida:%u,0x%lX\r\n",i,ResTmp.Val,Temp.Val);

   #endif

   return(1);

}
Solo recibo Repeticiones para respuesta de CmdXX: 1; Respuesta recibida: 0 y de ahí no sale.
 
Bien, pues comento que encontre el problema (y), ya logre una inicialización exitosa, por lo menos en el simulador, falta probarlo en real, pero por ahora intentare con la lectura y escritura también simuladas, la librería me parece una chulada :D ya les comentare que pasa después y les doy las gracias por sus respuestas anteriores, saludos.
 
Atrás
Arriba