Você está na página 1de 37

Comunicación Serie: Módulo SSP_SPI

COMUNICACIÓN SERIE
PARA SISTEMAS BASADOS EN MICROCONTROLADORES PIC
MÓDULO SSP (SYNCHRONOUS SERIAL PORT)

EEPROM serie
MCU

Conversores A/D

Registros despl.

LCD con SPI


1
Microcontroladores PIC ©ATE-Universidad de Oviedo
Fernando Nuño García
Comunicación Serie: Módulo SSP_SPI

MÓDULO SSP (SYNCHRONOUS SERIAL PORT)

• Puerto Serie Síncrono: Interface de Comunicación Serie Síncrona

• Pensado para comunicación con otros Microcontroladores o Periféricos:

EEPROM serie (almacenamiento de datos no volátiles)


Registros de Desplazamiento (expansión de entradas y/o salidas)
Drivers de Displays (reducción de conexiones)
Conversores A/D (digitalización externa de señales)
....

• Modos de Operación posibles del módulo SSP:

- SPI (Serial Peripheral Interface): Interface de Periféricos Serie


SPI: Es una Marca Registrada de Motorola Corporation

- I2C (Inter-Integrated Circuit): Entre Circuitos Integrados


I2C: Es una Marca Registrada de Philips

2
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

1.- Interface SPI en el módulo SSP


• Permite la transmisión y recepción síncrona simultánea de datos de 8 bits

• Para la comunicación debe existir un dispositivo Maestro (genera la señal de reloj)


y uno ó varios esclavos (reciben la señal de reloj)

• En los microcontroladores PIC hay 3 pines asociados con la comunicación SPI:

Salida Serie de Datos (SDO) Serial Data Output -> RC5


Entrada Serie de Datos (SDI) Serial Data Input -> RC4
Reloj de comunicación Serie (SCK) Serial Clock -> RC3

De manera adicional, hay un 4º pin que se puede utilizar cuando el


microcontrolador se configura como dispositivo Esclavo:

Selección de Esclavo (SS) Slave Select -> RA5

• La inicialización del Interface SPI se realiza mediante la configuración de los bits


de control SSPCON<5:0> y SSPSTAT<7:6>

3
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Diagrama de Bloques del Módulo SSP en modo SPI

Registro de Buffer
(lectura/escritura)

Entrada serie de bits


Registro de Desplazamiento
Salida serie de transmisión/recepción
(no accesible)

Selección Esclavo
(opcional si es Esclavo)

Reloj de Entrada
(Esclavo)

Reloj de Salida
(Maestro)
Microcontroladores PIC ©ATE-Universidad de Oviedo
4
Comunicación Serie: Módulo SSP_SPI
ENVÍO/RECEPCIÓN SIMULTÁNEA
Situación Inicial
MAESTRO SPI ESCLAVO SPI

b0 b1 b2 b3 b4 b5 b6 b7 SDO SDI a0 a1 a2 a3 a4 a5 a6 a7

SDI SDO

Reloj SCK SCK

Flanco 1 en reloj SCK

MAESTRO SPI ESCLAVO SPI

a7 b0 b1 b2 b3 b4 b5 b6 SDO SDI b7 a0 a1 a2 a3 a4 a5 a6

SDI SDO

Reloj SCK SCK

5
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Situación Inicial
MAESTRO SPI ESCLAVO SPI

b0 b1 b2 b3 b4 b5 b6 b7 SDO SDI a0 a1 a2 a3 a4 a5 a6 a7

SDI SDO

Reloj SCK SCK

Flanco 8 en SCK

MAESTRO SPI ESCLAVO SPI

a0 a1 a2 a3 a4 a5 a6 a7 SDO SDI b0 b1 b2 b3 b4 b5 b6 b7

SDI SDO

Reloj SCK SCK

Situación Final
Intercambiados los 8 bits de datos
6
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

• SSPSR (registro de desplazamiento) envía y recoge los bits simultáneamente

• SSPBUF tiene doble función: para “cargar” el registro SSPSR para envío de datos
y para “recoger” los datos recibidos en SSPSR

SSPIF=0 por software SSPBUF SSPBUF


b0 b1 b2 b3 b4 b5 b6 b7 b0 b1 b2 b3 b4 b5 b6 b7

SSPSR SSPSR
b0 b1 b2 b3 b4 b5 b6 b7 a4 a5 a6 a7 b0 b1 b2 b3
1.- Carga de SSPSR a través de SSPBUF 2.- SSPSR enviando/recibiendo

SSPIF=1
SSPBUF SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7 a0 a1 a2 a3 a4 a5 a6 a7

SSPSR SSPSR
a0 a1 a2 a3 a4 a5 a6 a7 a0 a1 a2 a3 a4 a5 a6 a7
3.- Completada recepción/envío 4.- SSPSR carga SSPBUF con recepción
7
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

* SSPIF = PIR1<3> (Completada transmisión) Lectura/escritura

Indica que se ha completado un envío/recepción en SSPSR


Se debe poner a 0 por software, puede generar interrupción
Flags Indicadores en modo SPI

* BF = SSPSTAT<0> (Buffer de recepción lleno) Sólo lectura

Se pone a 1 cuando se ha completado la recepción de un dato


se pone a 0 por hardware cuando se lee el registro SSPBUF
Se empleará normalmente únicamente en modo de recepción

* WCOL = SSPCON<7> (Colisión de Escritura) Lectura/escritura

Indica que se ha intentado escribir en SSPBUF mientras se está


transmitiendo un dato previo. Si se da tal situación, se debe poner
a 0 por software

* SSPOV = SSPCON<6> (Desbordamiento en Recepción) Lectura/escritura

Indica que se ha recibido un byte nuevo mientras SSPBUF contiene


un dato recibido anteriormente no leido. El nuevo dato se pierde y ya
no se actualiza SSPBUF. Se pondrá a 0 por software
8
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

El módulo SPI puede utilizarse (independientemente de modo Maestro o Esclavo):

a) Para envío y recepción simultánea (SDI y SDO)

SSPBUF debe leerse antes de cargarlo con el nuevo dato a enviar

b) Sólo para enviar datos (SDO)

SSPBUF se puede cargar con un nuevo dato únicamente después de haberse


completado el envío del anterior dato

Si se pretende cargar un dato en SSPBUF durante una transmisión se produce


una colisión y dicha carga será ignorada

c) Sólo para recibir datos (SDI)

Sólo en este caso SSPBUF se utilizaría como buffer intermedio de recepción,


se puede iniciar la recepción de un nuevo dato antes de leer el dato que se
acaba de recibir

9
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Antes de cargar un nuevo envío


a) Para envío y recepción simultánea debemos leer recepción
(1)
Envío de un dato

(2)
SSPBUF Recepción dato SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7 a0 a1 a2 a3 a4 a5 a6 a7

SSPSR SSPSR
SDI SDO SDI SDO
b0 b1 b2 b3 b4 b5 b6 b7 a0 a1 a2 a3 a4 a5 a6 a7

b) Sólo para enviar datos Intento de carga de Dato2


en SSPBUF durante envío COLISIÓN
Carga de un dato WCOL=1
SSPBUF SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7 b0 b1 b2 b3 b4 b5 b6 b7

SSPSR SSPSR
SDO SDO
b0 b1 b2 b3 b4 b5 b6 b7 a4 a5 a6 a7 b0 b1 b2 b3

10
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

c) Sólo para recibir datos

Se completa la recepción de un dato (BF=1)

SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7
Se lee el dato recibido (BF=0)
SSPSR
SDI
b0 b1 b2 b3 b4 b5 b6 b7 SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7
No se escribe nada
en SSPBUF SSPSR
(sólo recibimos) SDI
a4 a5 a6 a7 b0 b1 b2 b3
y se inicia una nueva
recepción
Si antes de leer el dato anterior se completa la recepción de un nuevo dato,
se perdería el dato previamente recibido, se da error de “OVERFLOW” (SSPOV=1).
Este error sólo es posible si el dispositivo es ESCLAVO

Un microcontrolador MAESTRO inicia una nueva transferencia


Microcontroladores PIC cargando el dato endeSSPBUF
©ATE-Universidad Oviedo
11
Comunicación Serie: Módulo SSP_SPI

ESPECIFICACIÓN DEL MODO SPI EN LA INICIALIZACIÓN

* Modo de funcionamiento: Maestro (SCK salida) o Esclavo (SCK entrada)

* Polaridad del Reloj: Estado Inactivo del Reloj (SCK) a “1” ó a “0”

* Flancos activos del Reloj: Salida de bits en flancos de subida o bajada en SCK

* Muestreo bits de datos: Muestreo de entrada en el “centro” o al “final” del bit

* Frecuencia de Reloj: SÓLO SI ES MAESTRO, frecuencia en salida SCK

* Modo de Selección: SÓLO SI ES ESCLAVO

- Control externo de SDI y SDO con entrada SS


- Sin control externo con pin SS

12
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

El dispositivo Maestro inicia la transferencia enviando la señal de reloj SCK,


los datos salen en los flancos programados y se capturan las entradas en el
momento indicado con el bit SMP si es Maestro.

Ejemplo de Conexión

Los dos dispositivos deben ser programados con la misma


POLARIDAD DE RELOJ para que reciban y emitan a la vez

13
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

HABILITACIÓN DE LOS PINES DE ENTRADA/SALIDA de SSP


• Para habilitar el módulo SSP, es necesario que el bit SSPEN se encuentre a 1. Si
se desea “resetear” el módulo SSP, se debe poner a 0 este bit y luego volverlo a 1

• Para que la funcionalidad de los pines SDI, SDO, SCK y /SS sea la determinada por
los bits de configuración, es necesario además que los bits de dirección de datos
(en TRISA y en TRISC) tengan la dirección adecuada:

SDI (RC4) debe tener TRISC<4> = 1 para ser entrada de datos

SDO (RC5) debe tener TRISC<5> = 0 para que sea salida de datos

SCK (RC3)
debe tener TRISC<3> = 0 si el microcontrolador es MAESTRO
y TRSC<3> = 1 si se define como ESCLAVO

/SS (RA5) debe ser TRISA<5> = 1 si es ESCLAVO y tiene control externo

Cualquier función no deseada en el puerto serie puede ser omitida si en el


registro de dirección de datos (TRIS) se configura el valor opuesto

P.ej.: Si en modo Maestro sólo se van a enviar datos, SDI puede usarse como
una salida de propósito general del microcontrolador cargando TRISC<4>=0 14
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Registro SSPCON<7:5>
(0x14)
Bits Asociados con el modo SPI

15
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Bits Asociados con el modo SPI

Registro SSPCON
(0x14)

Registro SSPCON<4:0>
(0x14)

16
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Registro SSPSTAT (0x94)


Bits Asociados con el modo SPI

17
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Registros y bits Asociados


con el Modo SPI

18
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Funcionamiento como MAESTRO

• El Maestro puede iniciar la transferencia en cualquier momento puesto que


controla la línea SCK. El protocolo software determinará cuando el Esclavo está
en condiciones de enviar datos.

• En modo Maestro, la transmisión/recepción se inicia tan pronto como se escribe


en el registro SSPBUF. Si se desea sólo recibir, la línea SDO puede desactivarse
definiéndola como entrada, los datos presentes en la línea SDI irán entrando al
registro SSPSR a la velocidad marcada por el reloj de transferencia

• La velocidad de transferencia del modo SPI es programable entre los valores:

Fosc/4
Fosc/16
Fosc/64
Frecuencia de Salida de TMR2/2

siendo por tanto la máxima velocidad de trasnferencia: 5Mbps (con Fosc=20MHz)

• La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE

19
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Escritura
en SSPBUF CRONOGRAMA SPI MAESTRO

Muestreo
caso SMP=0

Muestreo BYTE COMPLETO


caso SMP=1 SSPIF=1

20
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Funcionamiento como ESCLAVO


sin Selección Externa

• El Esclavo el dato es transmitido/recibido cuando aparecen los pulsos en la


entrada SCK

• Cuando el último bit termina de ser muestreado, el flag SSPIF se pone a uno

• La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE

• El muestreo de los bits de datos se realiza siempre en la mitad de un bit en el


modo Esclavo (SMP=0 siempre en modo Esclavo)

• La señal de reloj debe cumplir las especificaciones mínimas de tiempos mínimos


en los estados alto y bajo

• En modo de bajo consumo (SLEEP) el Esclavo puede transmitir y recibir datos


puesto que el registro de desplazamiento es asíncrono con el oscilador.

• Al completar una transferencia de un byte, el dispositivo podría despertarse si


se encontraba “dormido”

21
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

CRONOGRAMA SPI ESCLAVO SIN SELECCIÓN EXTERNA

Esperando a que el Maestro genere flancos

CKE=0
F.subida

F.bajada

Muestreo
siempre con SMP=0 BYTE COMPLETO
(en mitad del bit) SSPIF=1
con el flanco opuesto
al de salida de los datos

22
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Funcionamiento como ESCLAVO


con Selección Externa

• El pin /SS (nivel activo bajo) permite la conexión de varios esclavos con un Maestro,
habilitando en cada instante únicamente la transferencia con un Esclavo

• El dispositivo Maestro debe seleccionar para la transferencia únicamente uno de


los Esclavos mediante la activación de la señal /SS (a cero) del elegido, permaneciendo
el resto en estado alto

• Se debe configurar el modo SSP Esclavo con SSPCON<3:0> = 0100 y además definir
el pin /SS/RA5 como entrada con TRISA<5>=1

• Cuando /SS está a 0, se permite transmisión/recepción y el pin SDO se maneja


internamente por parte del registro dedesplazamiento

• Si el pin /SS está a 1, el pin SDO se sitúa en alta impedancia respecto al registro
de desplazamiento (podrían necesitarse resistencias de polarización).

• Además, con /SS a “1” (Vdd) el módulo SPI permanecerá reseteado igual que
si SSPEN=0 y el contador de bits entrantes permanecerá a cero

23
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

CRONOGRAMA SPI ESCLAVO CON SELECCIÓN EXTERNA

Necesaria señal /SS a 0

Muestreo
siempre con SMP=0
(en mitad del bit)
con el flanco opuesto
al de salida de los datos

24
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Interface SPI: Posibilidades de conexión

A).- Un Maestro y un Esclavo con conexión a 3 hilos,

SDO SDI

MAESTRO SDI SDO ESCLAVO


3 hilos
SCK SCK

Transmisión/recepción simultánea

B).- Un Maestro y un Esclavo con conexión a 2 hilos, ¡ Conflicto en las Salidas !

SDO SDI

MAESTRO SDI SDO ESCLAVO


2 hilos

SCK SCK

Transmisión/recepción pero no simultáneas


25
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

B).- Un Maestro y un Esclavo con conexión a 2 hilos ¡ Conflicto en las Salidas !

SDO SDI

MAESTRO SDI SDO ESCLAVO


2 hilos

SCK SCK

Sólo puede haber una salida activa, el receptor anula su salida de datos SDO
por software mediante el registro de dirección de datos
(TRISC<5>=1 define SDO como entrada)

Estado1: Maestro emite (y recibe lo mismo que está emitiendo), Esclavo recibe

SDO SDI

MAESTRO SDI ESCLAVO


(TRISC<5>=0) 2 hilos (TRISC<5>=1)

SCK SCK

26
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

B).- Un Maestro y un Esclavo con conexión a 2 hilos, ¡ Conflicto en las Salidas !

SDO SDI

MAESTRO SDI SDO ESCLAVO


2 hilos

SCK SCK

Sólo puede haber una salida activa, el receptor anula su salida de datos SDO
por software mediante el registro de dirección de datos
(TRISC<5>=1 define SDO como entrada)

Estado 2: Maestro recibe, Esclavo emite (y recibe lo mismo que está emitiendo)

SDI

MAESTRO SDI SDO ESCLAVO


(TRISC<5>=1) 2 hilos (TRISC<5>=0)

SCK SCK

27
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

C).- Un Maestro emitiendo y varios Esclavos recibiendo, conexión a 2 hilos

SDO SCK SDI SCK SDI SCK SDI SCK

ESCLAVO ESCLAVO ...... ESCLAVO


MAESTRO
1 2 n

SDI SDO SDO SDO

No sería necesario el control de la selección del esclavo,


todos tendrían la entrada de datos activa

28
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

D).- Un Maestro y varios Esclavos con posibilidad de emisión, 3 h. y líneas de selección

SDO SCK SDI SCK SDI SCK SDI SCK

ESCLAVO ESCLAVO ...... ESCLAVO


MAESTRO
1 2 n

SDI SDO /SS SDO /SS SDO /SS

Circuito de
PORT?

Selección de . Sólo un Esclavo Seleccionado


Esclavo que “maneja” la línea SDO
(directo . y que recibe por SDI
o decodif.) . (/SS=0, resto /SS=1)

29
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Utilidades de SPI: Expansión de Puertos de Entrada con Registro de Desplazamiento

1.- Pulso en RD7 para Lectura del “Puerto” Datos Puerto de entrada
(carga paralelo de 74HC165)
Microcontrolador b7 b6 b5b4b3b2 b1 b0

RD7 SECUENCIA
RC5/SDO LOAD
REGISTRO DE Entrada serie
DESPLAZAMIENTO
RC4/SDI 74HC165
Salida serie
CLOCK
MÓDULO
SPI
RC3/SCK
3.- Tras 8 flancos de subida, entra el dato completo

2.- Aparición de flancos en SCK por escritura interna en SSPBUF


se debe configurar CKP=1, CKE=1

30
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

74HC165: Registro de Desplazamiento


Entrada Paralelo de datos

Activación
carga paralelo

Entrada serie

Reloj
Salida serie

Habilitación

31
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Cronograma del proceso de lectura del puerto adicional

Microcontrolador b7 b6 b5b4b3b2 b1 b0

RD7
RC5/SDO LOAD
REGISTRO DE Entrada serie
DESPLAZAMIENTO
RC4/SDI 74HC165
Salida serie
CLOCK
MODO
SPI
RC3/SCK

RD7

SCK
(CKP=1, CKE=1)

SDI b7 b6 b5 b4 b3 b2 b1 b0

Desde el MCU PIC: b0


Dato completo en SSPBUF
Escritura en SSPBUF 1.- “Bajar y subir” RD7
2.- Poner SSPIF=0
3.- Escribir en SSPBUF “cualquier cosa”
4.- Detectar SSPIF=1
32
Microcontroladores PIC 5.- Recoger dato en SSPBUF
©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Expansión para Puertos de Entrada de mayor tamaño (p.e. 3 bytes)

BYTE 1 BYTE 2 BYTE 3

RD7 Carga Carga Carga


PIC
SDI Sal Ent Sal Ent Sal Ent
74HC165 74HC165 74HC165

SCK

3 Registros de Desplazamiento Encadenados

Procedimiento para leer los 3 bytes:

1.- Pulso bajo en RD7 para leer simultáneamente los 3 bytes


2.- Borrar SSPIF y escribir en SSPBUF -> se generan 8 flancos y “entra” BYTE 1
pasando BYTE 2 a la posición de BYTE 1 y BYTE 3 a la de BYTE 2
3.- Se recoge BYTE 1 en SSPBUF y se almacena
4.- Borrar SSPIF y escribir en SSPBUF -> 8 flancos en SCK y “entra” BYTE 2...
5.- Se recoge BYTE 2 en SSPBUF y se almacena
6.- Borrar SSPIF y escribir en SSPBUF -> 8 flancos en SCK y “entra” BYTE 3...
7.- Se recoge BYTE 3 en SSPBUF y se almacena
33
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Utilidades de SPI: Expansión de Puertos de Salida con Registro de Desplazamiento


SECUENCIA A SEGUIR
3.- Generar flanco de subida en RD7
para que salga el dato al exterior 4.- Dato retenido y disponible en la salida
b0 b1 b2 b3 b4 b5 b6 b7

Microcontrolador

Q
Reloj

CLR

CLR

CLR

CLR

CLR

CLR

CLR

CLR
SET

SET

SET

SET

SET

SET

SET

SET
sal. paralelo

D
RD7
Ent.serie
RC5/SDO
SET SET SET SET SET SET SET SET
D Q D Q D Q D Q D Q D Q D Q D Q

Q Q Q Q Q Q Q Q
RC4/SDI CLR CLR CLR CLR CLR CLR CLR CLR

MÓDULO Reloj Registro 74HC595


SPI ent. serie
RC3/SCK
2.- Aparecen 8 flancos en SCK que cargan
el dato en los biestables D internos del 74HC595

1.- Escribir el dato a sacar en SSPBUF

34
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Cronograma del proceso de escritura en el puerto adicional

b0 b1 b2 b3 b4 b5 b6 b7

Microcontrolador

Q
CLR

CLR

CLR

CLR

CLR

CLR

CLR

CLR
SET

SET

SET

SET

SET

SET

SET

SET
D

D
RD7
RC5/SDO
SET SET SET SET SET SET SET SET
D Q D Q D Q D Q D Q D Q D Q D Q

Q Q Q Q Q Q Q Q
RC4/SDI CLR CLR CLR CLR CLR CLR CLR CLR

MÓDULO Registro 74HC595


SPI
RC3/SCK
Los bits salen por SDO Flanco de subida
en los flancos de bajada para salida al exterior

RD7

SCK
(CKP=1, CKE=0)

SDO b7 b6 b5 b4 b3 b2 b1 b0

Los bits “entran” al


Escritura en SSPBUF registro en los flancos de subida Dato completo en Registro
(antes pondremos (ya estables los bi) (nos enteramos por SSPIF=1)
SSPIF=0)
Microcontroladores PIC
35
©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Qué hacer para “escribir” en el puerto adicional

b0 b1 b2 b3 b4 b5 b6 b7

Microcontrolador

Q
CLR

CLR

CLR

CLR

CLR

CLR

CLR

CLR
SET

SET

SET

SET

SET

SET

SET

SET
D

D
RD7
RC5/SDO
SET SET SET SET SET SET SET SET
D Q D Q D Q D Q D Q D Q D Q D Q

Q Q Q Q Q Q Q Q
RC4/SDI CLR CLR CLR CLR CLR CLR CLR CLR

MÓDULO Registro 74HC595


SPI
RC3/SCK

Desde el punto de vista del MCU PIC:

1.- Poner SSPIF=0


2.- Escribir en SSPBUF el dato a sacar
3.- Detectar SSPIF=1
4.- “Bajar y subir” RD7 (flanco de subida)

36
Microcontroladores PIC ©ATE-Universidad de Oviedo
Comunicación Serie: Módulo SSP_SPI

Expansión para Puertos de Salida de mayor tamaño (p.e. 3 bytes)

BYTE 1 BYTE 2 BYTE 3

RD7 R.par. R.par. R.par.


PIC
SDO Ent Sal Ent Sal Ent
74HC595 74HC595 74HC595

SCK

3 Registros de Desplazamiento Encadenados

Procedimiento para escribir los 3 bytes de salida:

1.- Borrar SSPIF y escribir en SSPBUF el BYTE 3, se generan 8 flancos y “entra”


BYTE 3 en el registro interno de la izquierda (lo detectamos por SSPIF=1)
2.- Se borra SSPIF y se escribe BYTE 2 en SSPBUF, se generan otros 8 flancos
y pasa BYTE 3 al registro central, entrando BYTE 2 en el de la izquierda
4.- Borrar SSPIF y escribir en SSPBUF el BYTE 1, otros 8 flancos en SCK y
“entra” BYTE 3 a la derecha, queda BYTE 2 en el centro y BYTE 1 a la izquierda
5.- Pulso bajo en RD7 para generar un flanco de subida que haga que los bytes
almacenados internamente en los registros salgan al exterior todos a la vez
37
Microcontroladores PIC ©ATE-Universidad de Oviedo

Você também pode gostar