About This Blog

Este es un blog dedicado al módulo de "Desarrollo y Construcción de Prototipos Electrónicos", el cual pertenece al segundo año del ciclo "Desarrollo de productos electrónicos", en el que se irá colgando cualquier tema que sea abordado en dicho ciclo.

Comunicación SPI entre PIC´s

Posted by Diego Lavín 17:06, under | 3 comments

En este ejercicio vamos a comunicar dos PIC18F4550, utilizando el bus SPI (Serial Peripheral Interface)
Como en el ejercicio anterior vamos a utilizar el CCS C para programar y compilar en C y el Proteus 7.7 sp2 para simular el circuito. Finalmente usaremos el Ares para diseñar el pcb y ver como quedaría finalmente.

En este caso existen dos PIC´s, por lo que tendrá que haber dos progrmas distintos, uno para cada pic. El primero actuará como maestro que se encargará de mandar un dato al otro pic, el esclavo que leerá el dato.

En la imagen se ve como en el primer pic (maestro) hay un switch y en el segundo (esclavo) hay un diodo led rojo, el otro símplemente es de prueba. Cuando el switch está activado se enciende el led, por lo que está habiendo una comunicación entre pic´s.



El código del maestro, en el que configuro el pic como maestro para el uso del SPI y escribo en un pin:

/////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: Diego Lavín                        Febrero/2011 
/////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA:   Comunicación entre PICs                   VERSIÓN:    1.0
//   DISPOSITIVO: PIC18F4550                                          COMPILADOR: CCS vs4.93
//   Entorno IDE:                                                                     SIMULADOR:  Proteus 7.7 sp2
//   TARJETA DE APLICACIÓN:                                         DEBUGGER:  
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//Comunicar 2 PICs 18F4550 utilizando el protocolo SPI. Cuando hay un "1" lógico
//en el pin ra1 se enciende un diodo led.
//
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//CABECERA///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
#include < 18f4550.h>                  //pic a utilizar
#fuses inths                                    //oscilador interno
#use delay(internal=8Mhz)           //frecuencia del oscilador

/////////////////////////////////////////////////////////////////////////////////////
//VARIABLES GLOBALES////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//FUNCIONES/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//PRINCIPAL/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
void main( )
{
   setup_spi(spi_master | spi_l_to_h | spi_clk_div_16);    //configurar spi como maestro
   while(1)
   {
    //  spi_write(input(pin_a0));    //escribir en el pin ra0
      spi_write(input(pin_a1));    //escribir en el pin ra1
      delay_ms(1000);
   }





Código del esclavo, aquí configuro el pic como esclavo y leo continuamente si hay dato en el SPI y si le hay que active el puerto c como salida:

/////////////////////////////////////////////////////////////////////////////////////
//   AUTOR: Diego Lavín                        Febrero/2011 
/////////////////////////////////////////////////////////////////////////////////////
//   PROGRAMA:   Comunicación entre PICs                   VERSIÓN:    1.0
//   DISPOSITIVO: PIC18F4550                                          COMPILADOR: CCS vs4.93
//   Entorno IDE:                                                                     SIMULADOR:  Proteus 7.7 sp2
//   TARJETA DE APLICACIÓN:                                         DEBUGGER:  
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//Comunicar 2 PICs 18F4550 utilizando el protocolo SPI. Cuando hay un "1" lógico
//en el pin ra1 se enciende un diodo led.
//
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//CABECERA///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
#include < 18f4550.h>                  //pic a utilizar
#fuses inths                                    //oscilador interno
#use delay(internal=8Mhz)           //frecuencia del oscilador

/////////////////////////////////////////////////////////////////////////////////////
//VARIABLES GLOBALES////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//FUNCIONES/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//PRINCIPAL/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
void main()
{
   setup_spi(spi_slave | spi_l_to_h | spi_clk_div_16);     //configurar spi como esclavo
   for(;;)
   {
      if(spi_data_is_in())      //si hay un dato en el spi
      {      
         //output_d(spi_read()); 
         output_c(spi_read());
      }
   }
}

Vista en Ares y como dije anteriormente cuidado con los packages de los componentes porque pueden faltar al no haber sido asignados en el Proteus o porque no existe package de ese componente:




3D:









DESCARGA EL EJERCICIO

3 comentarios:

El archivo de ejemplo no esta disponible u.u

Disculpe amigo podria subir de nuevo el archivo le agradeceria mucho

Este comentario ha sido eliminado por el autor.

Publicar un comentario