Amigos me gustaria compartir con la comunidad este programa que hice para utilizar las MMC/SD, como memoria para pics, haciendo la aclaracion de que es mas bien como una eeprom externa, no como disco, o sea que no tiene formato (FAT12/16, FAT32,NTSF) esto quiere decir que no tiene directorios ni subdirectorios ni archivos, para hacer eso se necesitan otros algoritmos, quien busque como grabar archivos este no es el tema correcto OK.
El compilador que use fue Microcode studio 5.0.0.0, PBPL 3.0 y MPASM 5.48. y el pic es un 18f2550, la razon de usar esos compiladores es porque se requiere de usar una variable tipo long de 32bits y versiones anteriores no lo soportan, y el utilizar el pic 18f2550 fue porque ese pic tiene una memoria SRAM de 2048 bytes y un sector de la micro SD tiene 512bytes, para ser funcional se requiere de un pic con mas de 512bytes en memoria SRAM.
con algo de esfuerzo se puede migrar a otro compilador anterior y a otros pics con menos memoria, pero asi eran mis requerimientos al hacer el proyecto.
si al compilar :
- marca un error con algo respecto al ICPRT necesitan reemplazar un archivo llamado P18f2550.inc dentro de la carpeta del MPASM suite.
esto se debe a que tiene un bug el archivo.
- marca un error referente a que se duplico el registro de configuracion se necesita reemplazar un archivo llamado Pic18f2550.PBPINC dentro de la carpeta del PBP3.0
esto se debe a un bug del PBP3
(ambos archivos estan anexados en el archivo rar.)
anexo la simulacion en proteus 8.0 y codigos fuente.
El funcionamiento es mas o menos simple:
se inicializa la memoria con:
Gosub init
*despues de llamar la subrutina init retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
para graba datos:
sector=1 'se define el sector a grabar
SDData[0]=1 ' se pasan los valores a un arreglo con longitud de 512
.
.
.
SDDAta[511]=20
gosub write_sd 'se llama rutina de grabacion
*despues de llamar la subrutina retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
para leer datos:
sector=1 'se define el sector a leer
gosub read_sd 'se llama rutina de lectura
en el arreglo SDData se colocan los valores del sector.
*despues de llamar la subrutina retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
PD. para los que no estan familiarizados con MPASM deben de descomprimir el directorio del rar y ponerlo en el directorio raiz, porque MPASM no acepta rutas de mas de 32 caracteres.
PD1: esta recien echo asi que puede tener algun bug por ahi, si encuentro alguno seguire subiendo el rar con las correcciones.
PD2: si tienen alguna duda al respecto y se la respuesta intentare aclararla.
El compilador que use fue Microcode studio 5.0.0.0, PBPL 3.0 y MPASM 5.48. y el pic es un 18f2550, la razon de usar esos compiladores es porque se requiere de usar una variable tipo long de 32bits y versiones anteriores no lo soportan, y el utilizar el pic 18f2550 fue porque ese pic tiene una memoria SRAM de 2048 bytes y un sector de la micro SD tiene 512bytes, para ser funcional se requiere de un pic con mas de 512bytes en memoria SRAM.
con algo de esfuerzo se puede migrar a otro compilador anterior y a otros pics con menos memoria, pero asi eran mis requerimientos al hacer el proyecto.
si al compilar :
- marca un error con algo respecto al ICPRT necesitan reemplazar un archivo llamado P18f2550.inc dentro de la carpeta del MPASM suite.
esto se debe a que tiene un bug el archivo.
- marca un error referente a que se duplico el registro de configuracion se necesita reemplazar un archivo llamado Pic18f2550.PBPINC dentro de la carpeta del PBP3.0
esto se debe a un bug del PBP3
(ambos archivos estan anexados en el archivo rar.)
anexo la simulacion en proteus 8.0 y codigos fuente.
El funcionamiento es mas o menos simple:
se inicializa la memoria con:
Gosub init
*despues de llamar la subrutina init retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
para graba datos:
sector=1 'se define el sector a grabar
SDData[0]=1 ' se pasan los valores a un arreglo con longitud de 512
.
.
.
SDDAta[511]=20
gosub write_sd 'se llama rutina de grabacion
*despues de llamar la subrutina retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
para leer datos:
sector=1 'se define el sector a leer
gosub read_sd 'se llama rutina de lectura
en el arreglo SDData se colocan los valores del sector.
*despues de llamar la subrutina retorna en la variable error 1 si hubo error, y 0 si no lo hubo,
PD. para los que no estan familiarizados con MPASM deben de descomprimir el directorio del rar y ponerlo en el directorio raiz, porque MPASM no acepta rutas de mas de 32 caracteres.
PD1: esta recien echo asi que puede tener algun bug por ahi, si encuentro alguno seguire subiendo el rar con las correcciones.
PD2: si tienen alguna duda al respecto y se la respuesta intentare aclararla.
Adjuntos
Última edición: