Hola LeonPic y ASTROCAR!
LeonPic, cuando vengas me avises, a ver si hacemos un tour!! jejeje!! :
ASTROCAR, muchas gracias, y si, lo recomiendo que lo propongas, pues al construir un aeromodelo se adquire muchos conocimientos
aeronauticos!!! Merece la pena!
Bueno, a respecto de la memória SD:
MIRAD LO QUE ES NO CONOCER EL PIC!
!!!
SOLO HOY me enteré sobre el I2C y el SPI. Eso es lo que pasa cuando todo lo que haces en la vida es leer sensores en los ADC y pasar los
valores e un LCD o a graficos en el PC!
Después de leer muchos temas del foro, y muchas otras paginas, y con la ayuda (y paciencia) de Suky (
http://www.todopic.com.ar/foros/index.php?topic=28403.0), me aclaré lo suficiente para saber como empezar y que camino seguir.
Un resumen para los que futuramente empezaren desde el cero, y no saber nada de nada sobre el tema como yo:
El I2C y el SPI (pines 33, 34 y 26 del PIC18F4550 por ejemplo) tienem funciones parecidas (comunicacion con dispositivos), pero funcionamentos distintos, electricamente hablando. Cada uno tiene sus ventajas y defectos (como se puede ver aqui:
http://www.best-microcontroller-projects.com/spi-interface.html)
Se pueden conectar varios dispositivos a la vez en el I2C y en el SPI, pero no los podemos mezclar, como yo habia hecho en los primeres testes, conectando una EEPROM, y un MMC juntos, pues por ejemplo, para el I2C es necesário resistencias PULL UP, y para el SPI, no.
En el 18F4550, el PIC en cuestión, el I2C y el SPI tienen sus pines compartidos. Lo que significa que se puede usar o el I2C o el SPI (he visto algo sobre un metodo de usar los dos (por hardware), pero me parecio muy dificil, si alguién lo sabe lo dices).
Pero en este caso, existe una solución, que es usar uno de los dos via hardware y el otro, emular via software.
Leí que el SPI es mucho mas fácil de emular via software, y es lo que hice yo, pero Suky me dijo que en CCS tanto el I2C quanto el
SPI son iguales de facil!
Sobre el SD Card (dispositivo SPI), quien todavia no ha hecho nada, lo que debe hacer primero es al conseguir una tarjeta com soporte SPI, saber como inicializarla, leer y escribir en sus sectores. Deeeeeespues de conseguir, empezar con el tema de los FAT, que es lo que voy a empezar a estudiar.
En los temas que poste anteriormente,
MMC Card: Hardware and Firmware (RedPic):
http://www.todopic.com.ar/foros/index.php?topic=15553.20LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A (NANO 1985):
http://www.todopic.com.ar/foros/index.php?topic=17666.0microSD por puerto SPI del micro 18f4550 (therionx):
http://www.todopic.com.ar/foros/index.php?topic=28403.0Hay varios archivos y ejemplos para hacer la conunicación, unos basandose directamente en el driver "mmc_spi.c", y otros en variaciones.
El que mas me pareció claro, fueron los archivos creados por Suky, que son "SDCard.c" (ejemplo de aplicacion) y el "SDCard_hard.c"(comunicacion
y configuracion de hardware para que el archivo anterior funcione). Ambos archivos estan disponibles en el segundo post de este tema
http://www.todopic.com.ar/foros/index.php?topic=28403.0Lo primero que yo hice fue un test usando el SPI por hardware, con este schematic:
Fijaos que el DI, DO y CLK estan conectados en sus respectivos pines SPI!
Peeeero, el CS, lo puedes conectar en el pin que quieras, pero luego hay que cambiar el
#define SD_CS PIN_C0
del archivo "SDCard_hard.c"
Para que funcione en Proteus, también hay que comentar las siguientes lineas en el "SDCard_hard.c":
/*#if RS232_DEBUG
printf("\r\n--> Se envia CMD59 (Desactivación de CRC)\r\n");
#endif
// Se desactiva CRC.
if(SDCard_send_command(CMD59,0,Respuesta)==0){
return(0);
}else if(Respuesta!=0){
return(0);
}*/
En memórias reales eso no es necesário.
Pero, como dije al principio del tema, mi plaquita de telemetria tendra, ademas de una EEPROM, el "chip calendario" DS1307 (tuve exito gracias al tema
http://www.todopic.com.ar/foros/index.php?topic=13282.0), y los dos se conectar via I2C, o sea, el MMC lo tendre que emular via software. Elegi emular
con los pines D2,D3 y D4, y seguir con el CS adonde ya estaba, como se puede ver en el schematic:
Pero para que funcione la emulacion, hay que comentar la línea (archivo "SDCard_hard.c")
//SETUP_SPI(SPI_MASTER|SPI_CLK_DIV_16|SPI_H_TO_L|SPI_XMIT_L_TO_H );
Y cambiar la línea:
#use spi(MASTER,BITS=8,MODE=3,FORCE_HW,stream=SDCard)
para:
#use spi(MASTER,CLK=PIN_D2, DO=PIN_D3, DI=PIN_D4, BITS=8, MODE=3, MSB_FIRST, stream=SDCard, FORCE_SW)
OJO!!! Los pines "DO=PIN_D3, DI=PIN_D4", corresponden respectivamente al D4 y D3 (al revés) en el schematic del image en Proteus!
Eso me dio unos problemillas, en la primera vez lo conecte mal, jejeje
Despues de todos los lios schematicos, jejeje, el archivo "SDCard.c" es facil de compreender!
Pones una string en la variable al principio, por ejemplo:
char BufferSD[512] = "PROYECTO TELEMETRIA - TEST SD CARD";
y en la simulacion, verás: (si no quieres ver todos estos detalles, asigna "0" al "#define RS232_DEBUG 1" del archivo "SDCard_hard.c":
Lo que hiziste nada mas es que escribir la string en la memoria, en 512, y luego, leer la string en dicha posicion!
Se puede saber cual es cual, por ta tabla ASCII:
Bueno! Despues de eso, creo que ahora puedo avanzar!
Voy a practicar un poco mas eso de escribir en distintas posiciones,
y luego voy a estudiar eso de los FAT, que no tengo ni idea!
Lo bueno es que ahora tengo nocion del hardware del USB, del RS-232, de la EEPROM, del DS1307, y del SD.
A ver si lo termino, quiero empezar con el tema del GPS!
Muchas gracias a todos! Este foro es lo más