El ejercicio consiste en escribir y leer de una eeprom 25LC020, que está disponible en Proteus, utilizando el bus SPI. Todo ello utilizando el PIC18F4550.
Empezaremos haciendo el código en C (Pic c Compiler).
Hay comentarios para aclarar las distintas funciones que se utilizan:
///////////////////////////////////////////////////////////////////////////////
// AUTOR: Diego Lavín Abril/2011
//////////////////////////////////////////////////////////////////////////////
// PROGRAMA:Escribir en eeprom VERSIÓN: 1.0
// DISPOSITIVO: PIC 18F4550 COMPILADOR: Pic c Compiler 4,093
// Entorno IDE: SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: DEBUGGER:
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//Escribir en una eeprom con el PIC 18F4550 utilizando el bus SPI.
//Se mostrará en un lcd los datos escritos y los que ha leido.
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// CABECERA ///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses inths //oscilador interno
#use delay(internal=8Mhz)
#include
///////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
int a,b;
///////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void main()
{
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); //spi como maestro
lcd_init(); //iniciar lcd
do{
output_low(pin_a0); //habilita cs
lcd_putc("\fEscribe\n "); //escribe en lcd
for(a=0x00;a<=0x09;a++) //cuenta desde 0 a 9
{
spi_write(a); //escribe el valor de a
printf(lcd_putc,"%u",a); //muestra el valor de a por lcd
delay_ms(200);
}
output_high(pin_a0); //deshabilita cs
delay_ms(1500);
lcd_putc("\fLee\n "); //escribe en lcd
output_low(pin_a0); //habilita cs
spi_read(0x03); //configurar lectura
spi_read(0x00); //lee desde la posicion 0
for(b=0x00;b<=0x09;b++) //desde la 0 hasta la 9
{
a=(spi_read(b)); //lee el puerto b
printf(lcd_putc,"%u",a); //escribe el valor de a
delay_ms(200);
}
output_high(pin_a0); //deshabilita cs
delay_ms(2000);
}while(1);
}
// AUTOR: Diego Lavín Abril/2011
//////////////////////////////////////////////////////////////////////////////
// PROGRAMA:Escribir en eeprom VERSIÓN: 1.0
// DISPOSITIVO: PIC 18F4550 COMPILADOR: Pic c Compiler 4,093
// Entorno IDE: SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: DEBUGGER:
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//Escribir en una eeprom con el PIC 18F4550 utilizando el bus SPI.
//Se mostrará en un lcd los datos escritos y los que ha leido.
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// CABECERA ///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses inths //oscilador interno
#use delay(internal=8Mhz)
#include
///////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES /////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
int a,b;
///////////////////////////////////////////////////////////////////////////////
// FUNCIONES //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PRINCIPAL //////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void main()
{
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); //spi como maestro
lcd_init(); //iniciar lcd
do{
output_low(pin_a0); //habilita cs
lcd_putc("\fEscribe\n "); //escribe en lcd
for(a=0x00;a<=0x09;a++) //cuenta desde 0 a 9
{
spi_write(a); //escribe el valor de a
printf(lcd_putc,"%u",a); //muestra el valor de a por lcd
delay_ms(200);
}
output_high(pin_a0); //deshabilita cs
delay_ms(1500);
lcd_putc("\fLee\n "); //escribe en lcd
output_low(pin_a0); //habilita cs
spi_read(0x03); //configurar lectura
spi_read(0x00); //lee desde la posicion 0
for(b=0x00;b<=0x09;b++) //desde la 0 hasta la 9
{
a=(spi_read(b)); //lee el puerto b
printf(lcd_putc,"%u",a); //escribe el valor de a
delay_ms(200);
}
output_high(pin_a0); //deshabilita cs
delay_ms(2000);
}while(1);
}
Ahora nos queda relizar el esquemático con Proteus
Así queda el circuito con todos sus componentes, ahora vamos a ver el funcionamiento del programa en sí.
Podemos ver como escribimos y leemos, en este caso una secuencia de 0-9 como se programó en C.
Lo que se muestra por el LCD es lo mismo que muestra la eeprom.
Para descargar el ejercicio: AQUI
0 comentarios:
Publicar un comentario