Autor Tema: Lectura Memoria MMC con Pic Simulator Ide  (Leído 13897 veces)

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

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #30 en: 21 de Enero de 2009, 23:42:06 »
Hola Sabueso, los comandos primero se envian para inicializar luego hay varios comandos, algunos relacionados con la FAT, para leer para escribir y/o borrar en la memoria, para leer los datos de la memoria etc.

Ahora estoy de vacaciones pero pronto me pondre a trabajar nuevamente sobre el tema, tengo algunos problemas con los registros internos del PIC para configurarlos, espero solucionarlos.
PICMANIACO!

Desconectado denitos

  • PIC10
  • *
  • Mensajes: 15
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #31 en: 26 de Enero de 2009, 07:36:25 »
Hola amigos, hace meses intenté leer la MMC con pIC y el comando de PBP shiftout y shiftin (si mal no recuerdo) tomando como base el único ejemplo que he encontrado en basic en la red al respecto.
Tras muchísimo pelear, llegué a la conclusion que añadiendo cualquier instrucción en el programa dejaba de funcionar (incluso el solo hecho de añadir una variable sin más).
Supongo que será por que el autor calculó las instrucciones para ajuste críticos de tiempo o simplemente que estas 2 instrucciones no van muy bien.
Probé con 4,6,8,11,12,16 y 20 Mhz, obteniendo miles de fallos y ahora si, ahora no........
Harto de perder el tiempo, decidí hacerme mi propia subrrutina (hablo siempre en PBP y nada de cod. maq.).Ahora leo y grabo perfectamenta la MMC de 32 y 128 que tengo a cualquier velocidad y sin ningún problema, ah he configurado el PIC a 3V y me ahorro los divisores.
En conclusion: Creo que shiftout y shiftin no funcionan demasiado bien bien.
Venga, un saludo.
« Última modificación: 26 de Enero de 2009, 07:43:48 por denitos »

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #32 en: 27 de Enero de 2009, 18:26:37 »
Denitos serias tan amable de publicar las rutinas que utilizaste para inicilializar la memoria y al menos leer un bloque por favor.

Un saludo!!
PICMANIACO!

Desconectado denitos

  • PIC10
  • *
  • Mensajes: 15
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #33 en: 29 de Enero de 2009, 09:34:11 »
vamos a ver, voy a sacar las partes fundamentales.Decir que en distintas placas he probado con diversos pines y siempre me ha funcionado (ojo con los colectores abiertos).
ojo tambien con el pin de salida de la mmc, no dejarlo libre de conexión ya que si no inicia, ese pin se queda inestable y con las señales del ambiente recibe 0 y 1 y te indica que los cmd estan bien cuando simplemente son interferencias que coinciden. estaría bien poner 47k o algo asi a positivo.(ahora no recuerdo cuanto le puse)
Faltarán definir quizas algunas variables que ya las ireis viendo.
Jeje ahi queda eso, admito críticas constructivas. Esparando sea de utilidad y si hay alguna duda, intentaré resolverla.
Ah, yo lo he probado con 16F876 y con un 18f258 . si mal no recuerdo funcionó hasta con 4 Mhz. Yo usaré 12 por que creo que es la primra frecuencia para trasmitir a 19200 por serie.
Ahhhhhhhhhhh se me olvidaba, por fin he conseguido poner un bootloader en marcha............. Si es que cuando me pongo ......................




DEFINE OSC 10
DEFINE HSER_BAUD 9600
ADCON1   = 7         ' puerto A  adigital

'SPBRG=71             '9600 baudios con cristal de 110592
'TXSTA.2=1         '9600 baudios con cristal de 110592

TRISA=%010000
TRISB=%11001111
TRISC=%10110000
'TRISB.4 = 0

addr_H  VAR     WORD 
addr_L  VAR     WORD   
dat     VAR     BYTE    ' variable para gosubs de recoger dato MMC

'Conexiones MMC
SS      VAR     PORTA.0   ' pin select (pin 1)
SI      VAR     PORTA.1    ' Dato hacia MMC (pin 2)
SCK     VAR     PORTA.2  ' Clock hacia MMC (pin 5)
SO      VAR     PORTA.4   ' Datos desde la MMC (pin 7)

sck=0
si=1


' ************************ INICIO DE LECTURA MMC ****************

cabecera:
   si=1
   ss=1
   
   For i=1 TO 100
       sck=1:sck=0
   Next i   

Pause 50


'******************************** CMD0 **************************
inicio_cmds:
'HSerout ["inicio cmd0",13,10]
intento=0
ss=0

dat=$40
   GoSub mandar_dat'    manda la variable dat
dat=0
   GoSub mandar_dat'    manda la variable dat
dat=0
   GoSub mandar_dat'    manda la variable dat
dat=0
   GoSub mandar_dat'    manda la variable dat
dat=0
   GoSub mandar_dat'    manda la variable dat
dat=$95
   GoSub mandar_dat'    manda la variable dat
While dat<>1
   GoSub recibir_dat'   recibir dat desde la MMC   
Wend
   GoSub recibir_dat'   resto de clock
ss=1
HSerout ["cmd0  ok",13,10]

'******************* CMD1 **************************

'ss=1
'mamdar 2x $FF
'ss=0
'mandar cmd41
'mandar 4x $00
'mandar 2x $FF
'si no contesta 0 volver a mandar cmd

dat=255
While dat<>0
   dat=$FF   
   ss=1
      GoSub mandar_dat
      GoSub recibir_dat
   ss=0   
   dat=$41
      GoSub mandar_dat'    manda la variable dat
   dat=0
      GoSub mandar_dat'    manda la variable dat
   dat=0
      GoSub mandar_dat'    manda la variable dat
   dat=0
      GoSub mandar_dat'    manda la variable dat
   dat=0
      GoSub mandar_dat'    manda la variable dat
   dat=$ff
      GoSub mandar_dat'    manda la variable dat
      GoSub mandar_dat'    manda la variable dat

      GoSub recibir_dat'   recibir dat desde la MMC   
   ss=1
Wend
   
HSerout ["cmd1  ok",13,10]
LCDOut $FE,1
LCDOut $FE,2," cmd1 ok"

Pause 50

'******************* CMD 16 **************************

cMD16:
   addr_H = $0000
      addr_L = $0200
   
      ss=1
      dat=$FF
         GoSub mandar_dat
         GoSub recibir_dat      
   
      ss=0
      dat=$50
      GoSub mandar_dat'    manda la variable dat
   dat=addr_H.BYTE1
      GoSub mandar_dat'    manda la variable dat
   dat=addr_H.BYTE0
      GoSub mandar_dat'    manda la variable dat
   dat=addr_l.BYTE1
      GoSub mandar_dat'    manda la variable dat
   dat=addr_l.BYTE0
      GoSub mandar_dat'    manda la variable dat
   dat=$ff
      GoSub mandar_dat'    manda la variable dat
      GoSub mandar_dat'    manda la variable dat

      GoSub recibir_dat'   recibir dat desde la MMC   
   While dat<>0   
         GoSub recibir_dat'   recibir dat desde la MMC
   Wend
HSerout ["cmd16 ok",13,10]
LCDOut $FE,1
LCDOut $FE,2," cmd16 ok"


'*************************** subrrutinas ***********************************

'En estas subrrutinas, entre flancos puse retardos tanto al subir como bajar, pero funciana igual sin ellos.


mandar_dat:

   si=dat.bit7:sck=1:sck=0
   si=dat.bit6:sck=1:sck=0
   si=dat.bit5:sck=1:sck=0
   si=dat.bit4:sck=1:sck=0
   si=dat.bit3:sck=1:sck=0
   si=dat.bit2:sck=1:sck=0
   si=dat.bit1:sck=1:sck=0
   si=dat.bit0:sck=1:sck=0

Return

recibir_dat:
   
   sck=1:dat.bit7=so:sck=0
   sck=1:dat.bit6=so:sck=0
   sck=1:dat.bit5=so:sck=0
   sck=1:dat.bit4=so:sck=0
   sck=1:dat.bit3=so:sck=0
   sck=1:dat.bit2=so:sck=0
   sck=1:dat.bit1=so:sck=0
   sck=1:dat.bit0=so:sck=0

Return



el estatus segun la memoria devuelve distinto valor (con las que poseo), con las mmc de 32 lo hace bien, sin embargo con la de 128 no devuelve el mismo nº pero cuando el intento pasa de 222 siguo leyendo y va bien, quizas con menos intentos tambien (esta por probar).

****************************** MS STATUS ************************************
mstatus:
      ss = 1
      dat = $ff
        GoSub mandar_dat
        GoSub recibir_dat
   intento=0
      ss = 0
      dat=$4d
        GoSub mandar_dat
      dat=0
         GoSub mandar_dat
      dat=0
         GoSub mandar_dat
      dat=0
         GoSub mandar_dat
      dat=0
         GoSub mandar_dat
      dat=$FF
         GoSub mandar_dat
       
        While dat=$FF AND intento<222       
           GoSub recibir_dat
           intento=intento+1
        Wend
    ss=1       

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #34 en: 29 de Enero de 2009, 16:46:23 »
Hola denitos, Si me ha pasado, que el ruido te juega una mala pasada en el pin de salida de la MMC, ya que otorga respuestas que nos hacen creer que la MMC inicializo, cuando en realidad no inicializo.

Por eso hay que poner una resistencia PULL-UP a positivo para que este pin no flote y sea afectado por el ruido.

A mi ya me habia pasado, y lo que hize fue pasar el pin de salida de la MMC, por un adaptador de tension tambien, para que no sufra interferencias, con eso logre leer la MMC, y escribir datos en la FAT, pero con el PSI todo esto se vuelve el doble o triple de complejo, nose porque sera, como ya dije antes creo que es por la mala configuracion de los registros internos.

Le hechare un ojo a las rutinas que dejaste y vere si puedo encontrar alguna solucion, para poder crear de una vez por todas una libreria que si funcione en PSI.

Un saludo!
PICMANIACO!

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #35 en: 31 de Enero de 2009, 11:49:44 »
Denitos, sabes que no tengo ni idea como puedo en Pic Simulator ide, ubicar los datos como lo hiciste tu en PBP,

mandar_dat:

   si=dat.bit7:sck=1:sck=0
   si=dat.bit6:sck=1:sck=0
   si=dat.bit5:sck=1:sck=0
   si=dat.bit4:sck=1:sck=0
   si=dat.bit3:sck=1:sck=0
   si=dat.bit2:sck=1:sck=0
   si=dat.bit1:sck=1:sck=0
   si=dat.bit0:sck=1:sck=0

En esa rutina de mandar el Dato, veo que fuiste ubicando el dato en bit 7 a bit0, sabes de que manera pueda hacerlo sin tener que usar la instruccion .BIT ?

Espero tu respuesta, Muchas Gracias!
PICMANIACO!

Desconectado denitos

  • PIC10
  • *
  • Mensajes: 15
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #36 en: 31 de Enero de 2009, 14:57:28 »
 :-/ No se que es Pic Simulator ide.

De este modo mio, estás obligado a descomponer los bits, supongo que en el tal pic simulator se podra hacer de algun modo.
Una cosa es que no puedas y otra que no quieras por cualquier razón.
si no sabes como descomponer los bits, puedes hacer lo siguiente:
teniendo dato como byte:

bit7=0
if dato>127 then
 bit7=1 (bit7 puede ser un bit)
 dato=dato-128
endif

bit6=0
if dato>63 then
 bit6=1 (bit6 puede ser un bit)
 dato=dato-64
endif

.............

bit0=0
if dato>1 then
 bit0=1 (bit0 puede ser un bit)
endif

y así sucesivamente hasta obtener los 8 bits individualmente, aunque supongo que habrá modos más fáciles, seguro.
No se........... si .... he ...resuelto tu duda.
venga, un saludo.

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #37 en: 31 de Enero de 2009, 22:39:27 »
Es que ya en PSI, supuestamente esta la opcion de usar las intrucciones del modulo SPI, para enviar los datos.

Algo como  por ejemplo:

SPISENDBITS 0000 0101

El tema es que no quiero usar el modulo SPI, porque entonces entro en el conflicto de configurar el modulo y aunque lo he configurado bien, el mismo falla nose porque razon.

Pense que el dato tambien se podia enviar asi:

En vez de enviar el DAT 40 todo de una, envio bit a bit ..

algo como enviar

un 0 luego un 1 luego un 0 .. 0 ... 0 ... 0 ... 0 ... 0

Un saludo!

PICMANIACO!

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #38 en: 02 de Febrero de 2009, 10:02:33 »
Aca pego el codigo que tengo al momento con un 18F452 a 8 MHZ. Probe y no funciona y parece estar todo correcto, creo que llegare a la conclusion de que PSI no puede hacer trabajar una MMC, y si puede es mas complicado de lo que deberia.

Código: [Seleccionar]
AllDigital
Dim dat As Byte
Dim i As Byte
Dim intento As Byte
'---------CONFIGURACION ENTRADAS Y SALIDAS
Config PORTE.2 = Output
Config PORTC.5 = Input
Config PORTC.4 = Output
Config PORTC.3 = Output
'------------ASIGNACIONES------------------
Symbol cs = PORTE.2  'CHIP SELECT
Symbol sdo = PORTC.5  'Datos desde la MMC
Symbol sdi = PORTC.4  'Datos a La mmc
Symbol sck = PORTC.3  'Clock
'---------CONF. MODULO MSSP---------------- ' Aqui es donde configuro el MODULO MSSP
SSPCON1 = %00100001  'SSP  | FOSC/16
SSPSTAT = %00000000  'muestreo de los datos de entrada en la mitad del reloj  datos se transmiten en el flanco de subida
'__________CONFIGURACION SPI_______________
Define SPI_CS_REG = PORTE
Define SPI_CS_BIT = 2
Define SPI_SCK_REG = PORTC
Define SPI_SCK_BIT = 3
Define SPI_SDI_REG = PORTC  'DATOS QUE VAN A LA MMC
Define SPI_SDI_BIT = 4
Define SPI_SDO_REG = PORTC
Define SPI_SDO_BIT = 5
'PREPARANDO MODULOS SPI Y MODULO USART
SPIPrepare
Hseropen 9600
'_____________________________________
Hserout "Envio 80 Clocks Inicio", CrLf
cs = 1
sdi = 1
For i = 0 To 100
sck = 1
sck = 0
Next i
WaitMs 10
intento = 0
cs = 0
SPISendBits 8, %01000000
SPISendBits 8, %00000000
SPISendBits 8, %00000000
SPISendBits 8, %00000000
SPISendBits 8, %00000000
SPISendBits 8, %10010101
While dat <> 1
Gosub recibir_dat
Wend
cs = 1
Hserout "CMD0 CORRECTO"

End                                               

recibir_dat:
SPIReceive dat
Return       

Ya hize la configuracion del modulo MSSP, segun una pagina, CPOL y CPHA del modulo SPI deben estar en 0 tal como lo estan en los registros que configure, ademas configure un FOSC /16 al igual que lo hacen las librerias de MKBASIC.

La verdad es que ya me estoy quedando sin animos, y es que el compilador pone muchas trabas si alguien podria hecharle un vistazo les agradeceria.

Un saludo  :(
PICMANIACO!

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #39 en: 02 de Febrero de 2009, 22:36:06 »
facundo_10, pidele ayuda al maestro dogflu66...
a lo mejor el tiene la solucion!!!!

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #40 en: 03 de Febrero de 2009, 22:15:33 »
Hola;

He estado algo perdido porque estaba terminado unas practicas con un modem GSM y también descodificando la trama de datos de algún mandito de IR de los que andan por casa... :mrgreen:
Pero antes de comenzar con la memoria MMC voy a hacer unas practicas con una pequeña memoria EEProm por SPI que tengo por aquí para tomar contacto con el modulo ya que no he trabajado anteriormente con él. Ya contare lo que sale... :shock:

PD. ¡No te desanimes facundo!. Si contara las veces que quede bloqueado con algún modulo o rutina durante semanas.... en fin, animo y para atrás ni siquiera para tomar impulso.
Saludos desde Granada, España.

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Lectura Memoria MMC con Pic Simulator Ide
« Respuesta #41 en: 03 de Febrero de 2009, 22:40:59 »
Dogflu yo use el MCP41010, el potenciometro digital de interface SPI, para tomar contacto con el modulo, el protocolo SPI que ofrece el programa, para el pote digital anduvo mas que bien, perfecto anduvo pero parece que la memoria no se lleva muy bien con el SPI de PSI.

Yo por mi parte ando con estudios ahora en CCS, para poder correr la memoria aunque sea usando CCS, sin embargo frecuentare el Hilo y lo seguire intentando, aunque creo que es muy poco viable por PSI.

Un saludo!
PICMANIACO!


 

anything