clase 13 spi

39
COMUNICACIONES SPI MODULO MSSP PIC16F883

Upload: gaqf

Post on 10-Dec-2015

229 views

Category:

Documents


1 download

DESCRIPTION

e

TRANSCRIPT

Page 1: Clase 13 SPI

COMUNICACIONES

SPIMODULO MSSP PIC16F883

Page 2: Clase 13 SPI

SPI (Serial Port Interface)

• Protocolo de comunicaciones a nivel de PCB.• Basado en una arquitectura maestro/esclavo.• Utiliza las líneas:– SDO: Serial data out, también conocida como

MOSI (Master Output, Slave Input).– SDI: Serial data in, también conocida como MISO

(Master Input, Slave Output).– SCK: Serial Clock.– SS: Slave select,

Page 3: Clase 13 SPI

SPI (Serial Port Interface)

•El direccionamiento lo realiza el maestro utilizando las señales de SS (slave select).

•Solo el esclavo seleccionado puede controlar la línea MISO, los otros esclavos se aislan de esta (tri-state).

•La comunicación es full-duplex, simultaneamente es posible transmitir y recibir un dato.

Page 4: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A7 A6 A5 A4 A3 A2 A1 A0

SHIFT REGISTER

B7 B6 B5 B4 B3 B2 B1 B0MISO

CLK Generator

CLK

SS

Page 5: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A6 A5 A4 A3 A2 A1 A0 B7

SHIFT REGISTER

B6 B5 B4 B3 B2 B1 B0 A7MISO

CLK Generator

CLK

SS

Después del primer pulso de reloj.

Page 6: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A5 A4 A3 A2 A1 A0 B7 B6

SHIFT REGISTER

B5 B4 B3 B2 B1 B0 A7 A6MISO

CLK Generator

CLK

SS

Después del segundo pulso de reloj.

Page 7: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A4 A3 A2 A1 A0 B7 B6 B5

SHIFT REGISTER

B4 B3 B2 B1 B0 A7 A6 A5MISO

CLK Generator

CLK

SS

Después del tercero pulso de reloj.

Page 8: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A3 A2 A1 A0 B7 B6 B5 B4

SHIFT REGISTER

B3 B2 B1 B0 A7 A6 A5 A4MISO

CLK Generator

CLK

SS

Después del cuarto pulso de reloj.

Page 9: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A2 A1 A0 B7 B6 B5 B4 B3

SHIFT REGISTER

B2 B1 B0 A7 A6 A5 A4 A3MISO

CLK Generator

CLK

SS

Después del quinto pulso de reloj.

Page 10: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A1 A0 B7 B6 B5 B4 B3 B2

SHIFT REGISTER

B1 B0 A7 A6 A5 A4 A3 A2MISO

CLK Generator

CLK

SS

Después del sexto pulso de reloj.

Page 11: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

A0 B7 B6 B5 B4 B3 B2 B1

SHIFT REGISTER

B0 A7 A6 A5 A4 A3 A2 A1MISO

CLK Generator

CLK

SS

Después del septimo pulso de reloj.

Page 12: Clase 13 SPI

SPI (Serial Port Interface)

MAESTRO ESCLAVO

MOSI

SHIFT REGISTER

B7 B6 B5 B4 B3 B2 B1 B0

SHIFT REGISTER

A7 A6 A5 A4 A3 A2 A1 A0MISO

CLK Generator

CLK

SS

Después del octavo pulso de reloj.

Page 13: Clase 13 SPI

SPI TIMING

Luego de la transmisión de una palabra (8 o 16 bits), la línea de SS se lleva a 1 para terminar la transmisión, incluso si luego se continua transmitiendo al mismo esclavo.

Existen cuatro modos de reloj. Dependen de cual es el estado del reloj en inactividad (0 ó 1) y el flanco de reloj en el que se capturarán los datos (subida o bajada).

Page 14: Clase 13 SPI

MODULO SSP PIC16F883

MODO SPI MAESTRO

Page 15: Clase 13 SPI

MODULO MSSP (SPI MAESTRO)

Shift register (no directamente accesible)

Buffer, accesible por programación

Control de salida SDO, la señal SS influye solo en modo esclavo.

Generador del reloj (en modo maestro) ó entrada del reloj (en modo esclavo).

Page 16: Clase 13 SPI

PINES UTILIZADOS

Modos maestro y

esclavo

Solo modo esclavo

Page 17: Clase 13 SPI

CONFIGURACIÓN DEL MÓDULO MSSP SPI MAESTRO

Puertos•El pin SDI es controlado por el módulo, no es necesario configurarlo.•El pin SDO debe ser salida.•El pin SCK debe ser salida (entrada si se trata del esclavo).•El pin SS no se utiliza en modo esclavo.

Modo •Configurar el modo maestro utilizando el registro SSPCON•Definir la frecuencia de reloj

Reloj •Definir el tipo de reloj (fase, estado inactivo, punto muestreo)

ON •Activar el módulo SSP (bit SPEN)

Page 18: Clase 13 SPI

SELECCIÓN DEL MODO

Modo y frecuencia de reloj

Page 19: Clase 13 SPI

SELECCIÓN DEL TIPO DE RELOJ

Page 20: Clase 13 SPI

INICIALIZACIÓN DEL MÓDULO SPIvoid SPI_init(void){ TRISCbits.TRISC3=0; //SCK is an output. TRISCbits.TRISC4=1; //Optional, SDI is module controlled TRISCbits.TRISC5=0; //SDO is an output

SSPSTAT=0; SSPCON2=0; SSPCONbits.SSPM=0b0001; //SSP module is SPI master. //Rate is Fosc/16=250Khz. SSPCONbits.CKP=0; //Selects clock mode. SSPSTATbits.CKE=1; SSPSTATbits.SMP=0;

SSPCONbits.SSPEN=1; //Enables serial port

}

Page 21: Clase 13 SPI

ENVIO Y RECEPCIÓN DE DATOS VIA SPI

Selección •Seleccionar el esclavo poniendo en cero su señal SS.•Esto se realiza independiente del módulo, usando un pin GPIO

Bandera •Limpiar bandera SSPIF

Escritura •Cargar el dato a transmitir en SSPBUF.•Inmediatamente se comienza a generar el reloj.

Bandera •Esperar que se active la bandera SSPIF.•Esto indica el fin de la transferencia entre registros

Lectura •Leer el contenido de SSPBUF, ahora contiene los datos enviados por el esclavo.

Selección •Liberar el esclavo poniendo en 1 el pin SS.

Page 22: Clase 13 SPI

ENVIO Y RECEPCIÓN DE DATOS VIA SPI

unsigned char SPI_Send_Receive_Byte(unsigned char data){ PIR1bits.SSPIF=0; SSPBUF=data; while(PIR1bits.SSPIF==0); return SSPBUF;}

• Si se desea solo enviar datos se descarta el dato recibido.• Si se desea solo recibir datos se envia un dato sin significado “Dummy data”• Esta rutina no maneja la línea de selección de esclavo, dicha línea debe ser activada externamente a esta función.

Page 23: Clase 13 SPI

MANEJO DEL DAC MCP4921

USANDO PUERTO SPI

Page 24: Clase 13 SPI

MCP4921• Digital to Analog Converter, 12 bits. Single Channel.• Interfaz SPI hasta 20Mhz.• Referencia de voltaje externa.• Rango: 0 a Vref ó 0 a 2*Vref.

Puerto SPICS = SS

Pin sincronización: permite sincronizar las actualizaciones del DAC entre dispositivos.Si no se desea sincronizar puede llevarse a 0v

Page 25: Clase 13 SPI

MCP4921

Page 26: Clase 13 SPI

CONFIGURACIÓN DEL MCP4921• El DAC recibe una palabra de 16 bits,

indicando la configuración y el valor a convertir.

Dato a convertir

Page 27: Clase 13 SPI

CONFIGURACIÓN DEL MCP4921• El DAC recibe una palabra de 16 bits,

indicando la configuración y el valor a convertir.

Shutdown: Si este bit es cero se desactiva la salida del convertidor.

Page 28: Clase 13 SPI

CONFIGURACIÓN DEL MCP4921• El DAC recibe una palabra de 16 bits,

indicando la configuración y el valor a convertir.

Ganancia del amplificador de salida: 0 = Ganancia 1 = Rango 0 – Vref1= Ganancia 2 = Rango 0 – 2*Vref

Page 29: Clase 13 SPI

CONFIGURACIÓN DEL MCP4921• El DAC recibe una palabra de 16 bits,

indicando la configuración y el valor a convertir.

Buffer de Vref: 0 = Referencia sin buffer: Vref puede llegar hasta Vdd.1= Referencia con buffer: Alta impedancia de Vref, menor rango (Vdd-40mV.

Page 30: Clase 13 SPI

RUTINA PARA ESCRITURA EN EL DAC

void MCP4921_Write(unsigned char mode,unsigned int data){ unsigned char HighByte, LowByte; LowByte=(unsigned char)(data&0xFF); HighByte=(unsigned char)((data&0x0F)>>8) + (mode<<4); MCP4921_CS=0; //Selects the chip SPI_Send_Receive_Byte(HighByte); //Sends the high byte of word SPI_Send_Receive_Byte(LowByte); //Sends the low byte of word MCP4921_CS=1; //Releases chip}

Page 31: Clase 13 SPI

MANEJO DE LA MEMORIA EEPROM SPI

25LC256

Page 32: Clase 13 SPI

25LC256

• La familia 25xx (MICROCHIP) consiste de memorias eeprom con interfaz serie SPI.

• 25LC256 = 256Kbits = 32Kregistros x 8 bits.

Page 33: Clase 13 SPI

OPERACIONES

Page 34: Clase 13 SPI

OPERACIONES (II)

Page 35: Clase 13 SPI

OPERACIONES (III)

Page 36: Clase 13 SPI

OPERACIONES (IV)

Memoria ocupadaDurante escritura1 = Ocupada0 = Libre.

Page 37: Clase 13 SPI

OPERACIONES (V)

Page 38: Clase 13 SPI

LIBRERÍA PARA EL CONTROL DE MEMORIA 25LC256

void EE25LC256_init(void){EE25LC256_CS_TRIS=0;EE25LC256_CS=1;SPI_init();}

void EE25LC256_Write(unsigned int address, unsigned char data){ unsigned char address_high, address_low;

address_high=(unsigned char)(address>>8); address_low=(unsigned char)((address&0xFF)); EE25LC256_CS=0; //Selects the chip SPI_Send_Receive_Byte(0b00000110); //Sends the write enable instruction. EE25LC256_CS=1; //Deselects chip

EE25LC256_CS=0; //Selects the chip SPI_Send_Receive_Byte(0b00000010); //Sends the write instruction. SPI_Send_Receive_Byte(address_high); //Sends the high byte of address SPI_Send_Receive_Byte(address_low); //Sends the low byte of address SPI_Send_Receive_Byte(data); //Sends the data EE25LC256_CS=1;}

Page 39: Clase 13 SPI

LIBRERÍA PARA EL CONTROL DE MEMORIA 25LC256

unsigned char EE25LC256_Read(unsigned int address){ unsigned char address_high, address_low; unsigned char data;

address_high=(unsigned char)(address>>8); address_low=(unsigned char)((address&0xFF));

EE25LC256_CS=0; //Selects the chip SPI_Send_Receive_Byte(0b00000011); //Sends the read instruction. SPI_Send_Receive_Byte(address_high); //Sends the high byte of address SPI_Send_Receive_Byte(address_low); //Sends the low byte of address data=SPI_Send_Receive_Byte(0x00); //Receive the data, send dummy data. EE25LC256_CS=1; return data;}

unsigned char EE25LC256_Is_Busy(void){ unsigned char status; EE25LC256_CS=0; //Selects the chip SPI_Send_Receive_Byte(0b00000101); //Sends the read status instruction. status=SPI_Send_Receive_Byte(0x00); //receive the status byte EE25LC256_CS=1; return status&0x1;}