jueves, 16 de enero de 2020

Escribir datos en sistema FAT32 con un PIC18F4550

En este ejemplo vamos a a realizar una escritura de datos simple a una memoria SD utilizando el complilador MikroC. Para evitar la restricción de memoria direccionable máxima que impone el formato FAT16 debemos instalar la librería FAT32 descargandola desde LibStock. Si se va a utilizar el 4550 es muy importante descargar específicamente la versión 2.0: FAT32 v2.0. Si usan PIC's más modernos con mayor memoria pueden utilizar la versión más reciente sin ninguna problema. Requerirán descargar también Package Manager y seguir estas instrucciones para instalar la librería.

Deben agregar el archivo __Lib_FAT32.h de cabecera a header files de su proyecto o solo copiándolo en el directorio donde se encuentre su archivo fuente .c.

Teniendo todo instalado, deben conectar el modulo SD al PIC de la siguiente manera:
  • MISO ------ SDI (RB0)
  • MOSI ------ SDO (RC7)
  • SCK -------- SCK (RB1)
  • CS----------- RC2   
Al estar usando el puerto B es necesario que los convertidores A/D estén desactivados para ese puerto o el programa no funcionará aunque compile. El programa completo es el siguiente:

/*..............................................................
Ejemplo de escritura simple a una memoria SD con un PIC18F4550.
Tarjeta de desarollo: Miuva
Compilador: MikroC Pro for PIC
Autor: Rodolfo E. Escobar U.
Fecha: Enero 2020
..............................................................*/
#include "__Lib_FAT32.h"
// -- Variable globales --
char tempStr[6];
char nl[] = "\r\n";
char sep[] = ",";
signed short err;
char FileName[13];
extern __HANDLE fileHandle[];
__HANDLE fileHandle[4];
// Selector de Chip de la tarjeta
sbit Mmc_Chip_Select at LATC2_bit;
sbit Mmc_Chip_Select_Direction at TRISC2_bit;
void main(){
int i,k;
ADCON1 |= 0x07;
CMCON |= 7;
//--- Led de referencia ---
TRISE.F1 = 0;
LATE.F1 = 1;
//--------------------------
TRISB = 0x00;
PORTB = 0X00;
//------ Inicializar el modulo SPI (modo lento) ----------
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64,_SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
//--------------------------------------------------------
//----------- Inicialización de tarjeta SD ---------------
err = FAT32_Init();
//err = FAT32_format("dev0"); // Formatear tarjeta (opcional)
if (err < 0){
LATE.F0 = 0;
while(err < 0){ // Reintentar cada segundo...
err = FAT32_Init();
Delay_ms(1000);
}
}
LATE.F0 = 1;
//-------------------------------------------------------
//------ Inicialización SPI a velocidad de trabajo ------
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
//-------------------------------------------------------
//----------- Escritura de un archivo -------------------
fileHandle[0] = FAT32_Open("FILE1.TXT", FILE_WRITE);
if (fileHandle[0] < 0) while(1);
LATE.F1 = 0;
//Cabecera:
err = FAT32_Write(fileHandle[0],"fecha,temperatura", 18);
err = FAT32_Write(fileHandle[0],nl,2);
// Estampa de tiempo (en una aplición real debe ser tomada de un RTC)
err = FAT32_Write(fileHandle[0],"01/03/2020 11:34:01", 19);
err = FAT32_Write(fileHandle[0],sep,1);
// Dato de temperatura (simulado)
IntToStr(578, tempStr); // Conversión de entero a cadena
err = FAT32_Write(fileHandle[0],tempStr, 6);
err = FAT32_Write(fileHandle[0],nl,2);
LATE.F1 = 1;
err = FAT32_Close(fileHandle[0]); // Cerrar archivo
}
Para el manejo de múltiples archivos y directorios recomiendo revisar el ejemplo que viene en la documentación de la librería.

miércoles, 15 de enero de 2020

lunes, 13 de enero de 2020

Apuntes de transistores BJT (cheatsheets)

Hice dos hojas de apuntes con lo que considero más relevante y fundamental para tener a la mano a la hora de hacer amplificadores de emisor común con transistores. Estan basadas en los siguientes capítulos de Principios de Electrónica de  Albert Malvino y David J. Bates:
  • Capítulo 6:  Transistores de unión bipolares
  • Capítulo 7:   Fundamentos de los transistores
  • Capítulo 8:   Polarización de los transistores
  • Capítulo 9:   Modelos de alterna
  • Capitulo 10: Amplificadores de tensión