escribir y leer en la eeprom (25LC020).


Este ejercicio consiste en escribir y leer en la eeprom (25LC020).

Los pasos para poder escribir y leer en este caso, serán los siguientes:

ESCRITURA:

1-      ) Habilitar la escritura (para esto hay que habilitar el chip-select (cs) y deshabilitarlo.

2-      ) Mandarla instrucción de escritura, (se requiere volver habilitar el cs).

3-      ) Direccionar donde se quiere escribir.

4-      ) MANDAR los 16 datos.(en este caso enviaré 5 datos).

LECTURA:

1-      ) Habilitar el cs.

2-      ) configurar como lectura.

3-      )  direccionar la eeprom.

Una vez teniendo esto en cuenta, lo siguiente es hacer el programa.

Programa:

////////////////////////////////////////////////////////////////////////////////////
// AUTOR: Esmelis Rafael                                                  Noviembre/2011
////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: Escritura EEPROM (25LC020)                                            VERSIÓN: 1.0
// DISPOSITIVO: PIC18F4550                                                                          COMPILADOR: CCS vs4.088
// Entorno IDE: MPLAB 8.56                                                                             SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: VIRTUAL                                                     DEBUGGER: VIRTUAL
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// Escribir 5 bytes en la memoria EEPROM a través del bus SPI
//
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// CABECERA ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
#include <c:\h\18F4550.h>
#fuses INTHS //Selecciona el oscilador interno
#use delay(internal=8Mhz) // Selecciona la velocidad del oscilador interno
#include <c:\h\LCD_SIS.c>
/*
Mientras no empleemos el bus USB, se utilizará el oscilador interno para simplificar
la configuración de reloj y reducir componentes externos.
*/
////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
void main()
{
int direccion;
int dato;

setup_spi(spi_MASTER | spi_L_to_H | spi_clk_div_16| SPI_XMIT_L_TO_H);
lcd_init();
/*
Para decidir cual es la configuración de la lógica de control del bus SPI del micro,
debemos de mirar el databook de la EEPROM

Esta configuración deja el estado IDLE en bajo activo, recoje el dato en el flanco
de subida y deja la velocidad del reloj de transferencia en FOSC/16
El IDLE y el FLANCO deben de coincidir en ambos dispositivos
*/

//ESCRITURA //////////////////////////////////////////////////////////
//1º PASO (HABILITAR LA ESCRITURA)
//Para ello es necesario habilitar el CS y deshabilitarlo.
output_low(PIN_A0);            //HABILITO CS
spi_write(0x06);               //HABILITO ESCRITURA
output_high(PIN_A0);           //DESHABILITO CS

//2º PASO (MANDAR LA INSTRUCCIÓN DE ESCRITURA).
output_low(PIN_A0);            //Hay que volver a habilitar la EEPROM
spi_write(0x02);                //CONFIGURO OPERACIÓN ESCRITURA

//3º PASO (DIRECCIONAR DONDE SE QUIERE ESCRIBIR)
spi_write(0x10);                 //DIRECCIONO

//4º PASO (MANDAR LOS 5 DATOS)
//Para una transferencia de datos correcta, hay que finalizar deshabilitando la EEPROM
for(dato=65;dato<70;dato++)

{

spi_write(dato); //No ha hecho falta poner retardos para mandar los datos
printf(lcd_putc,»%u «,dato); //escribir en el LCD el valor de dato
delay_ms(200);
}
output_high(PIN_A0);
delay_ms(1000);                    //esperar 1 segundo
lcd_putc(«\n «);                        //escribir en la siguiente linea del LCD L (lectura)

//// LECTURA///////////////////////////////////////////////////////////

//1º PASO (HABILITAR CS)
output_low(PIN_A0);                    //Es necesario habilitar el CS

//2ºPASO (CONFIGURAR COMO LECTURA)
spi_read(0x03);                        //Además de leer, con esta función puedo escribir en la EEPROM.
//siempre que meta un dato en el paréntesis.
//En nuesto caso aprovechamos para mandar la instrucción de LECTURA.
//De este modo no hace falta habilitar el permiso de escritura.

//3ºPASO (DIRECCIONAR LA EEPROM)
spi_read(0x10);                     //DIRECCIONO

for(direccion=65;direccion<70;direccion++)
{
//dato=(spi_read(direccion));
dato =(spi_read(direccion));
// printf(lcd_putc,»%u»,dato);
printf(lcd_putc,»%c»,dato);
delay_ms(500);
}
output_high(PIN_A0);

for (;;){}

}

Descargar ejercicio de la eeprom en proteus.