bueno me alegro que te adieras para desarrollar el codigo en ccs...
con respecto a la capacidad de la memoria no esta dado por la memoria del pic, esto es un eror que se comete y es muy comun cometer este tipo de errores, paso a explicar, y de paso aca se van a dar cuenta de porque este muchacho puede leer hasta los primeros 192 byte y tambien se van a dar cuenta de porque se necesita mas memoria o pic mas grande...:
si se ponen a leer información de las tarjetitas, ya sea de 8mb 16mb, 32mb,64mb.... asi hasta 8gb, 16gb,32gb, etc etc etc... dicha información dice que en cualquiera de estas tarjetas se lee y se escribe por bloque (de 512 byte), es decir que las transacciones son atomicas y que cuando uno graba o lee si o si se hace de 512 byte.
entonces que pasa... supongamos que todos estamos trabajando en el proyecto de jonathan.
definimos cuantos byte se usan para reprecentar las muestras que va a guardar
datos utilizados para fecha y hora ocupan 8byte (esto es una suposicion y puede ocupar menos o mas byte)
datos utilizados para temperatura ocupan 2byte
datos utilizados para humedad ocupa 2byte
datos utilizados para algun checksum o algo asi ocupan 1byte
con lo que tenemos 13byte.
ahora como lo guardamos en la memora?
tenemos comunmente 2 formas(pueden existir mas alternativas pero voy a explicar las 2 mas comunes), ir grabando en tiempo real, o buffereando
grabando en tiempo real es:
1- inicializar tarjeta y todo lo demas... (para mas explicacion veer los primeros post)
2- indicar a la tarjeta en que direccion lo voy a grabar.
3- tomar fecha y hora.
4- grabar fecha y hora.
5- tomar humedad.
6- grabar humedad.
7- tomar temperatura.
8- grabar temperatura.
9- esperar x tiempo (que es el tiempo entre muestra y muestra eso lo estima el amigo jonathan segun como lo quiera hacer el y que frecuencia de muestreo se adapte mejor a su proyecto)
10- repetir desde paso 3.
cabe aclarar que a medida que uno va grabando se ingrementa sola la posicion (eso creo, ahora entre un poco en duda pero es cuestion de verlo a eso).
pero en esencia lo que hace es ir grabando nomas.
la otra forma es, mantener un puntero a la ultima direccion que se grabo para saber cual es la siguiente libre, y hacer lo siguiente.
1- inicializar tarjeta y todo lo demas... (para mas explicacion veer los primeros post)
2- indicar a la tarjeta en que direccion lo voy a grabar (la direccion del ultimo bloque que se grabo, es decir del ultimo bloque de 512 byte que se grabo).
3- leer el bloque (digo leer todo el bloque porque si o si se tiene que leer todo, eso es por protocolo de la tarjetita y a este bloque lo tengo que mantener en memoria del micro para poder modificarlo)
4- buscar dentro del bloque cual es la direccion del primer byte libre.
5- tomar fecha y hora.
6- grabar fecha y hora dentro del vector que tiene el micro con los 512 byte.
7- tomar humedad.
8- grabar humedad dentro del vector que tiene el micro con los 512 byte.
9- tomar temperatura.
10- grabar temperatura dentro del vector que tiene el micro con los 512 byte.
11- si se lleno el bloque (los 512 byte) grabar bloque de 512 byte pisando el bloque viejo (el que leimos en el paso 3), sino seguir en el paso tres hasta que se llene el vector de 512byte.
12- esperar x tiempo.
10- repetir desde paso 3.
esta forma ustedes diran que es mas complicada y que es muy tediosa al vicio, pero asi es como se deberia hacer, y de hecho asi es como lo hace el sistema fat, esto es porque es mas rapido trabajar con los bloques levantados en memoria y mas eficas y no produce un bloqueo de la tarjetita.
tambien ronda un monton de teoria que tratan a dicho tema y ni porsupuesto tambien tenes que manejar toda la paginacion de esos bloques, todo eso es otro monton de teoria que ya me lo tuve que comer en la facultad y me gusta , pero es muy tedioso programar eso
pero de eso ya se encarga el sistema de archivo fat.
por eso es importante que definas como vas a grabarlo.
lo que le pasa al amigo que hizo el prueba_mmc es de la segunda forma, por eso el 16f877 no tiene lugar para leer los 512byte, sino que lee los primeros 192 byte y los manda a un vector para procesarlo (como explique anteriormente), esto lo hace leyendo y almacenando, y va preguntando si se va a leer el byte numero mayor a 192 entonce dar los clock para leerlo peor no almacenar el resultado, esto es simplemente porque uno cuando hace el programa utiliza variables y un par de cosas mas como las funciones que te chupan la memoria ram del micro, y por ende le quedan unicamente libre 192 byte que lo usa para este vector.
ahora imaginensen usando sistema fat para el 16f877, directamente no nos compila el css porque nos dice que no tenemos la memoria ram suficiente en el micro para correr el programa.
espero que les guste mi explicacion y que me entiendas, sino pregunten.