Вы находитесь на странице: 1из 10

UNIVERSIDAD POLITÉCNICA SALESIANA

Trabajo de Sistemas Microprocesados II


Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

COMUNICACIÓN SPI DE UN MAESTRO Y DOS ESCLAVOS


Iza Cuzco Leonardo Paul
E-mail: lizac@est.ups.edu.ec
Llano Catota Edgar Roberto
E-mail: ellanoc@est.ups.edu.ec

RESUMEN: 2. MARCO TEÓRICO


En el siguiente informe se ilustra el fundamento teórico y 2.1 COMUNICACIONES SERIE SPI
experimental acerca del manejo de un sistema de
La familia PIC18 dispone de varias posibilidades de
funcionamiento matemático mediante la comunicación
comunicaciones serie, dispone de un puerto dedicado a
serial entre varios microcontroladores, tomando en comunicaciones síncronas serie, el SSP (Serial
cuenta el Master (Maestro), como principal emisor de la Synchronous Port). Dicho puerto puede dedicarse a
comunicación para poder comunicar hacia varios varios protocolos, tales como SPI o I2C. Ambos son
microcontroladores denominados Slave (Esclavos), excluyentes, esto es, si se configura el periférico para SPI
quienes se encargar de recibir la comunicación y procesar no podrá usarse para I2C y viceversa. Si se precisan de
dicha información mediante 4 salidas que se representan forma conjunta comunicaciones I2C y SPI la única
de forma binaria y que finalmente serán mostrados por solución es un microcontrolador con dos puertos SSP o
medio de LEDS y una pantalla GLCD que permita mostrar bien, implementar algunos de los dos protocolos a través
dichos resultados de la operación multiplicación.. de software. [1]

El protocolo SPI (Serial Protocol Interface), describe


PALABRAS CLAVE: Comunicación, Serial, los registros SFR involucrados y detalla los
Interface, Master, Slave. procedimientos para transmitir y recibir. Se ilustra con un
ejemplo muy sencillo de comunicación con un periférico
1. OBJETIVOS SPI, un conversor DAC (MCP4822 de Microchip). [1]

1.1 Objetivo General:


Implementar una comunicación SPI mediante 3
microcontroladores, en el cual posee un MASTER y 2
SLAVE, para realizar la operación de multiplicación entre
cada uno de ellos y mostrar su resultado mediante LED’S
que identifiquen el valor total de bits en binario. Figura 1. Descripción de una comunicación SPI.

1.2 Objetivos Específicos: 2.2 Características de la comunicación SPI.


En el protocolo SPI no hay realmente transmisiones ni
 Diseñar la simulación del circuito a implementar
recepciones, solo intercambios de datos A y B, ya que por
que cumpla las condiciones requeridas para una cada dato enviado debe haber siempre uno recibido.
comunicación SPI. Depende de las circunstancias el cómo se interprete una
transferencia SPI:
 Realizar la programación adecuada que
establezca comunicación de envío y recibo de 1. Será una transmisión si el 1er
datos mediante los microcontroladores. dispositivo tenía por objetivo era mandar el dato
A al 2do dispositivo, mientras que el dato B
recibido era basura (pero no puedo "evitar"
 Determinar el funcionamiento de una recibir dicho dato). [2]
comunicación SPI para varios 2. Será una recepción si el dato A enviado
microcontroladores que se comunican mediante es irrelevante y solo lo mando para obtener a
el MASTER.

1
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

cambio el dato B (pero no hay forma de recibir También permite la comunicación de un master con varios
nada si yo no mando algo "a cambio"). [2] slaves:
3. Puede ser una transmisión/recepción
simultánea si tanto el dato A como el B son
significativos para la comunicación. Pensar por
ejemplo en un Digital Signal Procesor (DSP) que
recibe una serie de muestras de una señal y
efectúa algún tipo de procesado sobre ella. Tras
un cierto retraso, inherente al procesado,
empezará a mandar muestras de vuelta. A partir
de ese momento, por cada muestra de la señal
original que mande el host recibirá una muestra
procesada en una comunicación full-duplex. [2]
4. Finalmente, hay situaciones donde los
datos intercambiados no le interesan a ningún
dispositivo. Por ejemplo, en las especificaciones
del protocolo SPI de las tarjetas SD se requiere Figura 4. Transmisión de datos de Master a varios Slaves
mandar 8 clocks de reloj tras un intercambio
comando/respuesta para que la tarjeta pase a La barra encima de SS indica negación, y es la forma
ejecutar el comando recibido. En ese caso el standard de expresar que si queremos seleccionar al
esclavo #2 debemos poner a nivel bajo SS2 y mantener
microcontrolador y la tarjeta se intercambiarán
altas SS1 y SS3. De esta forma los esclavos #1 y #3
un byte que a ninguno de los dos interesa solo ignoraran educadamente la conversación entre Master y
para que le lleguen los 8 pulsos de reloj Slave #2. [3]
necesarios a la tarjeta. [2]
Como se ve, si empieza a haber muchos esclavos el
número de líneas dedicadas a la selección de dispositivos
crece. Además, el master tiene que estar continuamente
preguntando a los esclavos si desean algo, ya que un
esclavo no tiene ninguna forma de iniciar la conversación.

Esta es la razón por la cual SPI es el protocolo


preferido por su simplicidad cuando sólo tenemos una
única conexión master-slave. Cuando hay que manejar
varios esclavos se prefiere el protocolo I2C. Este
protocolo también es de tipo serie y síncrono (en la familia
PIC18, SPI e I2C comparten el mismo puerto de
comunicaciones serie síncronas SSP), pero implementa
un sistema de direcciones, por lo que no es preciso añadir
Figura 2. Descripción de una comunicación SPI de manera líneas adicionales para los nuevos dispositivos. [3]
análoga.
2.3 Comunicación SPI en el PIC 18F4550.
La línea de SDO (master) a SDI (slave) también se Pasemos ahora a detallar como implementar el
suele etiquetar MOSI (Master Out Slave In). Igualmente, protocolo SPI al trabajar sobre un PIC (asumimos que
la línea que conecta SDO (slave) con SDI (master) es dispone del hardware adecuado, el puerto síncrono
denominada MISO (Master In Slave Out): paralelo SSP). Como todo periférico del PIC su
configuración y manejo están controlado por una serie de
registros SFR (Special Function Registers. Para el puerto
SPI dichos registros SFRs son:

SSPCON1, SSPSTAT y SSPBUF los dos primeros


Figura 3. Transmisión de datos Master-Slave
son registros de configuración, mientras que el segundo
Además de las dos líneas de datos (MOSI y MISO) y es donde se ponen los datos a transmitir (y como hemos
el reloj (SCK), en la figura anterior se muestra una cuarta explicado, de donde se recogerán los datos recibidos). [3]
línea (CS, Chip Select, o SS, Slave Select) que se usa
para indicar al Slave que se va a iniciar una comunicación.

2
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

Pasamos ahora a describir las opciones posibles en la 4 DESARROLLO Y PROCEDIMIENTO


configuración del puerto SPI en un PIC, que se
determinan con una serie de bits en los registros Diseño de un sistema basado en el microcontrolador
SSPCON1 y SSPSTAT.[3] 18F4550.
2.4 Elección Master-Slave 4.1. Colocar 3 PIC 18F4550 en la cual se realizara la
Obviamente la primera elección es decidir si el PIC operación de un maestro (emisor) y dos esclavos
será el master o un dispositivo slave en la comunicación. (receptores) y acoplar un oscilador de 4Mhz con dos
capacitores de 22 pF para los pines 13 y 14, a los puertos
Los contenidos de los 4 bits más bajos de SSPCON1
determinan esta elección. Sus posibles valores son: de oscilación del PIC para cada uno.

Opciones modo master:


00 11 --> clock = TMR2/2
00 10 --> clock = Fosc/64
00 01 --> clock = Fosc/16
00 00 --> clock = Fosc/4
Opciones en modo slave:
01 01 -> No se usa SS
01 00 -> Se usa SS
Fig. 5 PIC 18F4550 con oscilador.
Como se ve el primer bit (SSPCON1.SSPM3) es
siempre 0 para ambos modos (esto sucede porque al 4.2 El ambos esclavos (receptor 1 y receptor 2)
estar compartido el puerto SSP, estos cuatro bits también colocar un dip switch cuatro posiciones para cada uno
son usados para la configuración del modo I2C). tendra hasta un valor de 15, en la entrada conectar el
valor de VDD en el protoboard y salida cuatro resistencias
de 10kΩ a tierra.
El segundo bit (SSPCON1.SSPM2) determina si el
dispositivo es master (0) o slave (1).

En modo master los dos últimos bits


(SSPCON1.SSPM1 y SSPCON.SSPM0) determinan las
cuatro posibles frecuencias del reloj. La frecuencia del
reloj será una fracción (4, 16, 64) del oscilador principal o
puede asociarse al ritmo del Timer2. [3]

3. MATERIALES Y EQUIPO
 Fuente DC variable
Fig. 6 Conexión del primer esclavo.
 Modulo grabador de pic
 3 Microcontroladores 18F4550 4.3. En ambos esclavos (receptor 1 y receptor 2)
 3 Pulsadores acoplar ocho diodos led’s, los primeros cuatro son del
 Resistencias de 220 ohms y 1 k ohms maestro y los cuatro siguiente pertenecen al esclavo,
tener en cuenta colocar resistencias de 220Ω para
 Crystal de cuarzo de 4 MHz
protección de cada led’s y enlanzar en cada pin de su
 Capacitores cerámicos de 22Pf puerto del PIC.
 Software de PIckit2
 Potenciómetro
 16 LED’S
 3 Dip Switch
 GLCD

3
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

5 ANÁLISIS DE RESULTADOS
Disponemos de tres Pics 18F4550, los cuales, están
conectados a través del protocolo SPI, actuando como
Maestro-Esclavo.

Dentro de este protocolo se define un maestro que


será aquel dispositivo encargado de transmitir
información a sus esclavos. Los esclavos serán aquellos
dispositivos que se encarguen de recibir y enviar
información al maestro. El maestro también puede recibir
información de sus esclavos, cabe destacar.
La sincronización y la transmisión de datos se realizan
por medio de 4 señales:
 MOSI (Master Out Slave In): llevar los bits que
provienen del maestro hacia el esclavo.
Fig. 7 Conexión de los esclavos.
 MISO (Master In Slave Out): llevar los bits que
4.4 Situar el PIC del maestro y unimos una GLCD provienen del esclavo hacia el maestro.
128X64 muestra el estado del sistema está conectado a  CLK (Clock):.Proveniente del maestro encarga
través del protocolo de comunicación SPI envía un valor de enviar la señal de reloj para sincronizar los
de 15 en el maestro y multiplica en ambos esclavos. dispositivos.
 SS (Slave Select): Línea encargada de
seleccionar y a su vez, habilitar un esclavo.

Se definió un protocolo únicamente un maestro y dos


esclavos. El maestro va conectado a la GLCD en lo cual
se visualiza los tres valores generado por el maestro y
ambos esclavos.

Fig. 8 Conexión del maestro.

4.5 Agregar un dip switch para el maestro de cuatro


posiciones de igual manera entregara hasta un valor de Fig. 10 Visualización en la GLCD.
15 posteriormente multiplicara para los esclavos.
El numero genera el maestro y a su vez multiplicación
de los dos esclavos.

Fig. 9 Dip Switch para el maestro.

Fig. 11 Comunicación SPI.

4
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

Primer esclavo debe poseer ocho diodos led’s ya que


permitirá graficar en bits para lo cual cuatro diodos led’s 7 RECOMENDACIONES
logra graficar en número de bits del maestro y los
siguientes cuatro diodos led’s permite graficar en número  Identificar de manera correcta el Master y los
de bits del esclavo. Slave ya que cada uno indica de qué manera se
deben comunicar entre sí.
Igualmente realizamos la operación para segundo
esclavo, poseer ocho diodos led’s permite graficar en bits  Se recomienda tener un previo conocimiento
los cuatro primeros son del maestro y los siguientes del sobre el manejo de la comunicación SPI para
esclavo, se lograra observar los valores en la GLCD. realizar el montado del circuito.

 Se requiere usar los elementos necesarios, para


efectuar un correcto funcionamiento cada uno de
los circuitos implementados.

8 REFERENCIAS:
[1] Colaboradores de Mikorelectronika, “Puertos de
Entrada/Salida”, Tomado en Mayo 2017, [Online]. Disponible en:
https://learn.mikroe.com/ebooks/microcontroladorespicc/chapter
/puertos-de-entradasalida/

[2] Antonio Hermosa Donate “electrónica digital fundamental y


programable”, editorial marcombo, 2010, cuarta edición, 371-
376.

[3] SHORT, KERMMETH L. “Microprocesadores y Lógica


Fig. 12 Observación funcionamiento.
Programada “RONY, PETER “El Microprocesador 8080 y sus
Interfaces, “PPI200”
6 CONCLUSIONES
[4] APUNTES DE CATEDRA- "Arquitectura", Microprocesador
 Para la implementación de la comunicación SPI se 8085", Aritmética Binaria¨ Modos de Direccionamientos" -"PPI
logró implementar el protocolo SPI, se asume que el 8255", "El 8155"
PIC dispone del hardware adecuado, el puerto
síncrono paralelo SSP, como todo periférico del
microcontrolador su configuración y manejo están
controlados por una serie de registros SFR como
son: SSPCON1, SSPSTAT Y SSSPBUF, los cuales
los dos primeros son registros de configuración,
mientras que el último es donde los datos transmiten
la información.
 Se pudo determinar el comportamiento en modo
master en el cual los dos últimos bits determinan las
cuatro posibles frecuencias de reloj, mientras que, si
escogemos el modo Slave, los bits restantes
determinan si se usa o no el pin dedicado para SS
(Slave Select), esta es la razón por la cual SPI es el
protocolo preferido por su simplicidad cuando solo
se tiene una sola conexión master-slave.
 Se puede concluir que mediante la conexión SPI
podemos realizar varias operaciones matemáticas
como la multiplicación y poder comprobar de qué
manera emiten y reciben datos de información cada
uno de los microcontroladores

5
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

9 ANEXOS

 Simulación en Proteus

ANEXO 1

ANEXO 2

ANEXO 3

6
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

 Programación en Mikroc

EMISOR

char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RE2_bit;


sbit GLCD_CS2 at RC2_bit;
sbit GLCD_RS at RE1_bit;
sbit GLCD_RW at RC6_bit;
sbit GLCD_EN at RC0_bit;
sbit GLCD_RST at RE0_bit;

sbit GLCD_CS1_Direction at TRISE2_bit;


sbit GLCD_CS2_Direction at TRISC2_bit;
sbit GLCD_RS_Direction at TRISE1_bit;
sbit GLCD_RW_Direction at TRISC6_bit;
sbit GLCD_EN_Direction at TRISC0_bit;
sbit GLCD_RST_Direction at TRISE0_bit;

int cont=0;
short dato=0;

void main() {
//define puertos para SPI MASTER
TRISB.f0 =1; /* RB0 as input(SDI) */
TRISB.f1=0; /* RB1 as output(SCK) */
TRISA.f5=0; /* RA5 as a output(SS') */
TRISB.f2=0; /* RA5 as a output(SS1') */
TRISC.f7=0; /* RC7 as output(SDO) */
//Declaracion de entradas de pulsadores
TRISA.f0=1;
TRISA.f1=1;
TRISA.f2=1;
TRISA.f3=1;
TRISb.f7=1;

ADCON1=15; //Son entradas digitales

Glcd_Init(); // Inicializar la GLCD


Glcd_Fill(0); //Limpiar la pantalla
Glcd_Write_Text("Comunicacion SPI",0,0,1); //Escribir texto en la GLCD

//Definir el microcontrolador como MASTER(Maestro)


SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_HIGH_2_LOW );//Parámetros de comunic. SPI
while(1){
int datSLAVE=0, alm=0;
int datSLAVE1=0, alm1=0;
int datSLAVE2=0, alm2=0;
int datSLAVE3=0, alm3=0;
int num1=PORTA.f0;

7
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

int num2=PORTA.f1;
int num3=PORTA.f2;
int num4=PORTA.f3;
int num5=PORTB.f7;
char txt[7];
int total;

//Almacenamiento de datos del Maestro de 8 bits


dato=num1+num2*2+num3*4+num4*8;
inttostr(dato,txt);
Glcd_Write_Text("D_M:",0,2,1); //Etiqueta para representar los valores
Glcd_Write_Text(txt,30,2,1); //Imprimir dicho valor
Glcd_Write_Text(txt,90,2,1);
//SLAVE 1
PORTB.f2=1; //SLave Select del primer PIC1(ESCLAVO1) como entrada
PORTA.f5=0; //SLave Select del primer PIC2(ESCLAVO2) como salida
SPI1_Write(dato); //envia los datos de los pulsadores al SLAVE
delay_ms(10); //Tiempo de retardo
datSLAVE = SPI1_read(alm); //Leer los datos que envia el SLAVE1 (suma)
datSLAVE2 = datSLAVE*dato; //Multiplica los datos que envia el SLAVE1
inttostr(datSLAVE,txt); //Convertir tipo de variable entero a tipo string para ser leído el dato del Slave1
Glcd_Write_Text(txt,30,4,1); //Mostrar el valor en la pantalla GLCD
inttostr(datSLAVE2,txt); //Convertir tipo de variable entero a tipo string para ser leído el dato del Slave1
Glcd_Write_Text("x x",30,3,1); //Imprimir en la GLCD símbolo de multiplicación
Glcd_Write_Text("E1:",0,4,1); //Etiqueta para SLAVE1
Glcd_Write_Text(txt,30,6,1); //Imprimir el valor al ser ingresado un numero de bits en binario
Glcd_Line(0, 40, 127, 40, 1); //Graficar línea para representar en un cuadrado las respuestas
delay_ms(10); //Tiempo de retardo
//SLAVE 2
PORTB.f2=0; //SLave Select del primer PIC2(ESCLAVO2) como salida
PORTA.f5=1; //SLave Select del primer PIC1(ESCLAVO1) como entrada
SPI1_Write(dato); //envia los datos de los pulsadores al SLAVE
delay_ms(10); //Tiempo de retardo
datSLAVE1 = SPI1_read(alm1); //Leer los datos que envia el SLAVE2 (suma)
datSLAVE3 = datSLAVE1*dato; //Multiplica los datos que envia el SLAVE2
inttostr(datSLAVE1,txt); //Convertir tipo de variable entero a tipo string para ser leído el dato del Slave2
Glcd_Write_Text(txt,90,4,1); //Mostrar el valor en la pantalla GLCD
inttostr(datSLAVE3,txt); //Convertir tipo de variable entero a tipo string para ser leído el dato del Slave2
Glcd_Write_Text("E2:",70,4,1); //Etiqueta para SLAVE2
Glcd_Write_Text(txt,90,6,1); //Imprimir el valor al ser ingresado un numero de bits en binario
delay_ms(10); //Tiempo de retardo

total=dato*datSLAVE*datSLAVE1; //Guardar el valor de la multiplicación del MASTER*SLAVE1*SLAVE2


Glcd_Write_Text(" =",0,6,1); //Etiqueta para representar la respuesta
Glcd_Write_Text("MxE1xE2=",0,7,1); //Imprimir etiqueta de multiplicacion
inttostr(total,txt); //Convertir tipo de variable entero a tipo string para ser leído el dato de la
respuesta
Glcd_Write_Text(txt,90,7,1); //Immpimir el valor de la respuesta
}
}

8
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

RECEPTOR

int dato=0;
short dato1=0;
short dato2=0;
short datoMASTER=0;
int cont=0;
//INTERRUPCIÓN DEL DATO QUE ENVÍA EL MAESTRO
void interrupt(){
if(SSPIF_bit == 1){
datoMASTER = SSPBUF; //Lectura de valores que envia el MASTER
cont++;
if(cont==1){
PORTb = datoMASTER<<4; //Lectura de valor que envia el MASTER
//PORTd = datoMASTER;//>>4;
}
if(cont>1){
cont=0;

}
SSPBUF = dato1; //Suma de datos de MASTER y SLAVE

SSPIF_bit = 0; //Bandera de interrupcciion del puerto paralelo a 0


}
}

void main() {
//Define pines de SPI
TRISB.TRISB0 = 1; //RB0 as input(SDI)
TRISB.TRISB1 = 1; //RB1 as output(SCK)
TRISA.TRISA5 = 1; //RA5 as a output(SS')
TRISC.TRISC7 = 0; //RC7 as output(SDO)

TRISA.f0=1;
TRISA.f1=1;
TRISA.f2=1;
TRISA.f3=1;
TRISA.f4=1;

TRISB.TRISB4 = 0;
TRISB.TRISB5 = 0;
TRISB.TRISB6 = 0;
TRISB.TRISB7 = 0;

TRISD=0;
ADCON1=15; //Todas las entradas digitales
//interrupciones en el puerto paralelo
SSPBUF = 0; //almacena datos

9
UNIVERSIDAD POLITÉCNICA SALESIANA
Trabajo de Sistemas Microprocesados II
Fecha de realización:10/06/2019
Fecha de entrega:14/06/2019

SSPIF_bit = 0; //bit de interrupcion


SSPIE_bit = 1; //habibilitante pra la interrupcion en el puerto paralelo
GIE_bit = 1; //habilitacion global de las interrupciones
PEIE_bit = 1; //habilitacion de interrupcion por perifericos
//declarar este pic como SLAVE
SPI1_Init_Advanced(_SPI_SLAVE_SS_ENABLE, _SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_HIGH_2_LOW );

while(1){
int num1=PORTA.f0;
int num2=PORTA.f1;
int num3=PORTA.f2;
int num4=PORTA.f3;

//alamcenamiento de datos (7 bits)


dato1=num1+num2*2+num3*4+num4*8;//+num5*16+num6*32+num7*64;
PORTD = dato1;
delay_ms(100);
}
}

10

Вам также может понравиться