Micro Control Adores y Lenguaje C

June 4, 2019 | Author: Fury Rios | Category: Programming Language, Analog To Digital Converter, Computer Program, Bit, Compiler
Share Embed Donate


Short Description

Download Micro Control Adores y Lenguaje C...

Description

MICROCONTROLADORES  Y LENGUAJE C

Fundamentos de Lenguaje Lenguaje C para PICs

Introducción En un programa en C se pueden diferenciar varios elementos. * Directivas de preprocesado /* FORMATO TIPO DE FICHERO - Indican al compilador cómo cómo debe generar el código máquina.

* Funciones - Bloque Bloquess funcionales funcionales del programa. - Siempr Siempree debe incluirse una una función llamada main() .

#includ #include e stdio.h>

C*/

//Directiva //Directiva

/* Suma dos enteros */ i nt nt s um um a (i nt nt a ,b ,b ) { return return (a+b); (a+b);

//Devuel //Devuelve ve suma

}

* Sentencias

- Instr Instruccion ucciones es que definen lo que hace el programa y la secuencia de ejecución del mismo.

/* Función principal */ main() { int dato1,dat dato1,dato2; o2; //Declaració //Declaración n int res; //Declar //Declaració ación n

* Comentarios

- Imprescindib Imprescindibles les como documentación del código fuente.

dato1=5; dato2=3;

//Asignación //Asignación

res=suma(dato1,dato2); }

Fundamentos de Lenguaje Lenguaje C para PICs

Variables Una variable es un nombre asignado a una o varias posiciones de memoria RAM. En C es necesario declarar declarar todas las variables variables antes de poder utilizarlas utilizarlas,, indicando indicando el nombre asignado y el tipo de datos que en ella ella se van a almacenar (opcionalmente (opcionalmente también el valor inicial inicial asignado).

tipo no nombre_variable [= [=valor] ;

p.e.: int i;

Los tipos de datos aceptados en C estándar son cinco: char (carácter) intt in (entero) float (coma flotante en 32 bits) double (coma flotante en 64 bits) void (sin valor)

Las variables pueden ser locales o globales. Las variables locales locales sólo pueden ser usadas en la función función en que se declaran, mientras que las variables globales son compartidas por todas las funciones del programa (deben declararse fuera de cualquier función y antes de ser utilizadas).

Fundamentos de Lenguaje Lenguaje C para PICs El compilador de CCS acepta los siguiente tipos de variable. Especificación

Significado

Tamaño

Rango

char

carácter

8 bits

(sin signo) signo) 0 a 255 (sin

int

entero

8 bits

(sin signo) signo) 0 a 255 (sin

float

coma fl f lotante

32 bits

double

floa floatt doble precisió precisiónn

no soportado

No para PCM

void

sin valor

nulo

ninguno

int1

entero de de 1 bit

1 bit

0a1

int8

entero de d e 8 bits

8 bits

(sin in sig signo) no) 0 a 255 (s

int16

entero de 16 bits

16 bits

int32

entero de 32 bits

32 bits

0 a (2 32-1)

short

entero de de 1 bit

1 bit

0a1

long

entero de 16 bits

16 bits

6 bits de precisión

0 a 65535

0 a 65535

(sin signo) gno)

(sin si sign gno) o)

Los tipos de variable short short y  y long pueden tener detrás la palabra int sin efecto alguno.

Fundamentos de Lenguaje Lenguaje C para PICs Todos los tipos de datos son por defecto sin signo ( unsigned unsigned)) salvo los de tipo float float.. Para almacenar datos con signo, hay que introducir el modificador signed signed delante del tipo. tipo. El efecto que se consigue es el recogido en la siguiente tabla. Especificación

Significado

Tamaño

Rango

signed char

carác carácter ter con signo signo

8 bits

-128 a 127

sign si gned ed in intt

entero co con si signo

8 bits

-128 a 127

signed long

coma fl f lotante

16 bits

-32768 a 32767

Los números negativos se codifican en complemento a 2. Cuando se opera con distintos grupos de datos en una misma expresión, se aplican una serie de reglas para resolver las diferencias. En general se produce una “promoción” hacia los tipos de datos de mayor longitud presentes en la expresión.

Fundamentos de Lenguaje C para PICs

Funciones Las funciones son los bloques constructivos fundamentales en C. Todas las sentencias deben encontrarse dentro de funciones. Las funciones deben ser definidas antes de ser utilizadas. Formato general de definición de una función

tipo_dato nombre_func (tipo param1 , tipo param2 , … ) { cuerpo de la función (sentencias); } Las funciones pueden devolver un valor a la sentencia que las llama. El tipo de dato devuelto se indica mediante tipo_dato. Si no se indica nada, se entiende que devuelve un entero. Si no devuelve nada, debe incluirse una especificación tipo void.

Fundamentos de Lenguaje C para PICs La manera que tiene una función para devolver un valor es mediante la sentencia return. return (expresión);

return expresión;

La expresión debe proporcionar el mismo tipo de dato que el especificado en la función. Si no debe devolver nada, se finaliza con return;

Cuando una función se encuentra con una sentencia return se vuelve a la rutina de llamada inmediatamente y las sentencias posteriores a return no se ejecutan. Además de con las sentencia return, las funciones terminan su ejecución y vuelven al lugar desde donde se les llamó cuando alcanzan la llave de cierre de función } tras ejecutar la última sentencia de la misma.

Fundamentos de Lenguaje C para PICs Además de devolver valores, una función también puede recibir parámetros (denominados argumentos) según se indicó en su definición. Por ejemplo:

int suma (int a , int b) { return (a+b); } main() { int c; c = suma (10 , 23); }

Los argumentos se pueden pasar a las funciones por valor o por referencia. La llamada por valor copia el argumento de llamada en el parámetro formal de la función. La llamada por referencia usa la dirección de la variable que se pasa a la función.

Fundamentos de Lenguaje C para PICs

Operadores El lenguaje C define numerosos operadores mediante los cuales se construyen las expresiones (combinación de operadores y operandos).

Operadores aritméticos +

-

*

/

% (resto de división de enteros)

Operadores incremento y decremento x++

ó

++x

x--

ó

--x

Operadores relacionales >

>=

<

>

!=

Operadores lógicos &&

||

!

Operadores a nivel de bits &

|

^

~

a&b

a|b

a^b

~a

> n a 5V “0” -> 0V Micro a 5V lectura y escritura

“1” -> -5V a -15V “0” -> +5V a +15V

“1” -> -3V a -15V “0” -> +3V a +15V

Escritura RS232

Lectura RS232

Existen varios circuitos integrados comerciales que realizan esta adaptación con muy pocos componentes (p.e. la familia MAX220 a 249)

La conexión puede realizarse utilizando las líneas que se consideren oportunas. Se puede simplificar el conexionado y obviar las líneas de pregunta-respuesta “engañando” al emisor para hacerle creer que el receptor está siempre listo. El truco pasa por “puentear” las líneas de petición de envío y las respuestas.

Comunicación serie asíncrona

Emisores/Receptores de 2 canales para adaptación TTL -RS232 Una sola alimentación de 5V para generar tensiones de ±10V.

13

Comunicación serie asíncrona

Conexión serie según norma RS232: Comunicación PIC - PC Niveles escritura RS232 “1” -> -5V a -15V “0” -> +5V a +15V

“1” -> 5V “0” -> 0V RX TX GND EJEMPLO DE CONEXIÓN A 3 HILOS FULL DÚPLEX

Driver RS232 (MAX232)

TX

Pin3 Pin2

RX

Pin5

Puentes Pins 4 y 8 Pins 6 y 7

GND Niveles lectura RS232 “1” -> -3V a -15V “0” -> +3V a +15V

14

Comunicación Serie Síncrona I2C

Características generales de la comunicación serie Los datos se envían bit a bit por una misma línea durante un tiempo fijo. La velocidad de transmisión se indica en baudios (número de bits enviados por segundo). La transferencia puede ser síncrona o asíncrona. Síncrona: Se envía la señal de reloj para sincronizar cada bit. Asíncrona: Se necesitan “relojes” en el emisor y el receptor de la

misma frecuencia y en fase Datos

Datos EMISOR

¿Reloj?

Bit i RECEPTOR

Bit i+1

Reloj

Referencia de tensión

t

Comunicación Serie Síncrona I2C

Se emplean dos registros de desplazamiento (uno en el emisor y otro en el receptor) encadenados para la conversión paralelo/serie en la emisión y serie/paralelo en la recepción. Se puede llevar a cabo varios tipos de sincronización.

De los sucesivos bits. De cada paquete de bits (8 ó 9 bits)

Se envía la señal de reloj si la distancia entre Emisor y Receptor es corta.

Así se consiguen menores retardos en las transiciones y mejores flancos en la señal de reloj recibida.

Posibles codificaciones de cada bit. NRZ: Nivel alto: 1 / NRZI: Cambio de nivel: 1 / Impulso: 1 / RZ: ...

t

Nivel bajo: 0 Sin cambio de nivel: 0 Sin impulso: 0

Comunicación Serie Síncrona I2C

Transferencia Transfere ncia síncrona La comunicación comunicación síncrona entre dos dispositivos dispositivos requiere que uno de ellos actúe como maestro y el otro, como esclavo. Dispositi Dispositivo vo Maestr Maestro: o: Es el que que gener generaa la señal señal de reloj reloj y el que tiene tiene capacidad de iniciar iniciar o finalizar finalizar una transferenci transferenciaa . Disposit Dispositivo ivo Escla Esclavo: vo: Recibe Recibe la seña señall de reloj reloj y no tiene tiene capacid capacidad ad para para iniciar una transferencia de información. Es posib posible le efec efectuar tuar una transmis transmisión ión continu continua a de bits de informació informaciónn. Dato

M ae s t r o

Clk

Dato

Esclavo

Maestro

Clk

Esclavo

Ref.

Ref.

Maestro Maestro Emitiendo Emitiendo

Maestro Maestro Recibiendo Recibiendo

Comunicación Serie Síncrona I2C

Comunicación Comunic ación serie síncrona síncrona en micro microcontrol controlador adores es PIC Se imple implement mentaa mediant mediantee el módulo módulo SSP

: Interfaz de comunicación serie síncrona. Está pensado para poder poder comunicarse con otros otros microcontrolado microcontroladores res o periféricos mediante transmisión serie síncrona.

EEPROM serie Registros de Desplazamiento Drive Dr ivers rs de Dis Displa plays ys Conversores A/D ....

Almacenamiento de datos no volátiles Almacenamiento Expansión de entradas entradas y/o salidas Reducción de conexiones Digitalización externa de señales

El módulo SSP tiene dos posibles modos de funcionamiento. nterface: ace: Inter Interface face de Periférico Periféricoss Serie Serie)) SPI (Serial Peripheral Interf

SPI: Es una Marca Marca Registrada de Motorola Corporation

I 2C (Inter-I ntegrated Circuit: Entre Circuitos Integrados)

I2C: Es una Marca Registrada Registrada de Philips

Comunicación Serie Síncrona I2C

Característica Carac terísticass general generales es del bus bus I2C El bus Inter-Integrated-C Inter-Integrated-Circ ircuit uit (I2C) fue creado por Philips.

Para transferencia de datos entre entre CIs de una PCB. PCB. Soporta transmisión de datos de hasta 400kbd.

Es más lento que el módulo SPI.

Un bus I 2C puede tener distintas configuraciones.

Configuración de un y varios . Configuración . En cualquiera de estas configuraciones, el dispos dispositivo itivo es el único que tiene capacidad de iniciar la transferencia, decidir con quiénn se realiza, quié realiza, el sentido sentido de la misma misma (envío o recepció recepciónn desde el punto de vista del ) y cuándo se finaliza.

El bus I 2C consiste físicamente en dos líneas de colector abierto.

SCL para el reloj (pin (pin RC3) RC3).. SDA para los datos (pin (pin RC4) RC4)..

La comunicación es, por tanto,

.

Comunicación Serie Síncrona I2C

Las líneas necesitan resistencias externas de

.

Para poder implementar un (Y cablea cableado). do). Cuando el bus está inactivo, ambas líneas están a “1”.

El protocolo I 2C puede usar direcciones de 7 ó de 10 bits.

Puede haber hasta 128 ó hasta 1024 dispositivos colgados del bus. Con la dirección se informa si el quiere leer o escribir.

El protocolo I 2C incluye un mecanismo de comprobación (

).

- Cada transferencia de de 8 bits, el Maestro envía un un 9º pulso de reloj. - En ese instante, el dispositivo “transmisor” suelta la línea SDA y el “receptor” reconoce el dato enviado mediante un ACK (SDA ←0). - Se envía un NACK (deja SDA=1) SDA=1) para finalizar la transmisión.

Todos los cambios en SDA deben ocurrir mientras SCL=0.

Así se permit permitee diferen diferencia ciarr dos condiciones condiciones únicas: únicas: Secuencia START (S). El Maestro hace SDA←0 mientras SCL=1. Secuencia STOP (P). El Maestro hace SDA←1 mientras SCL=1.

Comunicación Serie Síncrona I2C

Fácil inclusión de nuevos dispositivos I 2C en el bus.

Una vez disponibl disponiblee el microcontr microcontrolado oladorr con sus funciones funciones de interface con bus interface bus I2C, la inclusión de un dispositivo I 2C adicional sólo precisaa su conexión precis conexión a las dos dos líneas líneas del bus (SDA (SDA y SCL), SCL) , que son las mismas para todos, todos, y asign asignarle arle una direcci dirección. ón.

Conexiones en el bus I 2C. VDD

R p  ≥ Periférico Rp

V DD  − V OL i OL

Rp Rs

Número máx. máx. de dispositivos dispositivos definidos por la capacida capacidadd en el bus: C max=400pF

Rs

SDA SCLL SC

C bus=10 – 400p 400pFF

Comunicación Serie Síncrona I2C

Direccionamiento de dispositivos en el bus I 2C

Formato de 7 bits: (A7-A6 (A7-A6-...-A1) -...-A1)

Reconocimiento (lo de debe be pone ponerr el Es Escl clav avo) o)

Lo “pone” “pone” el Maes Maestro tro

En la líneaSDA: Start

S A7 A6 A5 A4 A3 A2 A1 R/ R /W ACK Dirección de 7 bits bits del esclavo esclavo

Lectura Lectura (1) o Escri Escritur turaa (0)

Formato de 10 10 bits: (A9-A8-A7-...-A0) Primer byte del Maestro

2º byte del del Maestro Maestro

En la R ACK A7A6A5A4A3 A2A1A0 ACK líneaSDA: S 1 1 1 1 0 A9 A9 A8 W ACK S Start

Lectura Lectura (1) o Escri Escritur turaa (0)

Reconocimientos del Escl Esclavo avo despu de spués és de cad cadaa by byte te del Maestro

Comunicación Serie Síncrona I2C

Reconocimiento de transferencia (ACK)

Los datos se transmiten en paquetes de 8 bits (bytes). Tras cada byte el receptor debe intercalar un bit de reconocimiento (ACK). Si el receptor es el Esclavo y no genera el bit de reconocimiento después de cada byte, el Maestro debe abortar la transferencia generando un bit de fin (STOP).

En este caso, y dado que las etapas de salida son de drenador abierto, los niveles lógicos “0” son dominantes en las líneas, por lo que el Esclavo debe dejar su salida SDA a “1” para que el Maestro pueda generar el STOP (paso de “0” a “1” con SCL=“1”)

Si el receptor es el dispositivo Maestro, genera un ACK tras cada byte recibido, permitiendo al Esclavo que continúe enviando bytes. Si el Maestro decide finalizar la transferencia, genera un bit de STOP tras colocar un bit de no-reconocimiento (NACK). El Esclavo puede retardar el envío del siguiente byte (porque no lo tiene todavía disponible, p.e.) situando la línea SCL en estado bajo, forzando así al Maestro a situarse en un estado de “Espera” puesto que no podrá generar flancos en SCL.

Comunicación Serie Síncrona I2C

Secuencia de transmisión I 2C desde el Maestro.

SDA:

S Dirección del Esclavo De Maestro a Esclavo De Esclavoa Maestro

R/W

A Dato

“0” porque el Maestro quiere escribir (enviar)

A Dato

A/A

P

Reconocimiento (A) o no reconocimiento (A)

Secuencia de recepción I 2C por parte del Maestro.

SDA:

S Dirección del Esclavo R/W

A Dato

“1” porque el Maestro quiere leer (recibir)

A Dato

A P

No reconocimiento por Maestro y Parada

Comunicación Serie Síncrona I2C

Típica transmisión I 2C para lectura desde el Esclavo.

ACK

A7 A6 A5 A4 A3 A2 A1

Puesto por el Esclavo NACK

ACK D7 D6 D5 D43 D3 D2 D1 D0

D7 D6 D5 D4 D3 D2 D1 D0

R/W

1

S

2

3

4

5

6

7

8

9

1

2

Pulso ACK

3

4

5

6

7

8

9

1

2

3

ACK

5

6

7

Pulso ACK

8

9

P

Pulso ACK

Típica transmisión I 2C por parte del Esclavo.

A7 A6 A5 A4 A3 A2 A1

4

Puesto por el Maestro NACK

D7 D6 D5 D4 D3 D2 D1 D0

R/W S

1

2

3

4

5

6

7

8

9

Pulso ACK

1

2

3

4

5

El Esclavo pone SCL a 0 para darse tiempo de preparar el dato

6

7

8

9

P

Pulso ACK

Comunicación Serie Síncrona I2C

Repetición de START (Sr)

Si un dispositivo Maestro no desea abandonar el bus tras una transferencia, en lugar de generar un bit de STOP y volver a generar el nuevo START, puede generar una Repetición de START (Sr). La Repetición de START es idéntica a la condición de START (SDA pasa de 1 a 0 con SCL en estado alto) pero se produce tras un pulso de reconocimiento de bus (ACK) y no desde un estado inactivo.

Comunicación Serie Síncrona I2C

El interface I2C en los microcontroladores PIC Puede implementarse en dos módulos (s egún el tipo de PIC). BSSP (Basic )

Modo Esclavo: Completo por hardware. Modo Maestro: Detección de bits START y STOP por hardware. 16C64, 16C65, 16C73, 16C74, ...

MSSP (Master

)

Modo Esclavo: Completo por hardware. Modo Maestro: Completo por hardware. 16F87x

Ambos módulos son idénticos en lo que se refiere al interface SPI. Características del interface I 2C en el módulo MSSP.

- Detecta condiciones START y STOP en el bus por interrupción. - Permite seleccionar tres modos de operación. Esclavo I2 C con dirección de 7 bits. Esclavo I2 C con dirección de 10 bits. Maestro I2C con reloj SCL de frecuencia fSCL = fOSC/[4·(SSPADD+1)]

- Seis registros asociados al funcionamiento de este módulo. SSPCON SSPADD

SSPCON2 SSPBUF

SSPSTAT  

Comunicación Serie Síncrona I2C

Diagrama de bloques del bus I 2C en modo Bus de datos Leer

RC3 / SCL

Escribir

SSPBUF

Reloj

Registro Registro E/S E/S

No Noaccesible accesible directamente directamente

SSPSR

RC4 / SDA

MSb

Buffer Buffer para para envío envío yy recepción recepción

LSb

Detector de dirección

Detecta coincidencia en la dirección o llamada general

SSPADD Detección de START/STOP

Control de los bits S y P del registro SSPSTAT 

Dirección Dirección asignada asignada alal Esclavo Esclavo

Comunicación Serie Síncrona I2C

Diagrama de bloques del bus I 2C en modo Bus de datos Leer

SSPM3:SSPM0 SSPADD

Escribir

SSPBUF SDA In

RC4 SDA

SSPSR MSb

Generador de baudios

Reloj LSb

Generación de START/STOP ACK

RC3 SCL

Detección de START/STOP SCL In Colisión de bus

Detección de colisión Control de CLK

S , P , WCOL (SSPSTAT) SSPIF , BCLIF ACKSTAT , PEN (SSPCON2)

Comunicación Serie Síncrona I2C

Registro SSPSTAT (94h) SMP

bit 7

CKE

D/A

P

S

R/W

UA

BF

bit 4

SMP: Bit de control de slew rate 0 : V el oci dad estándar 1 : Alta velocidad (400k Hz) CKE: Bit de selección de niveles umbral en los pines 0: Especificaciones I 2C 1: Especificaciones SMBus D/A: Información del último byte transmitido 0: Dirección 1: Dato P: Bit de STOP Se pone a 1 si la última secuencia detectada es un bit de STOP

bit 3

S: Bit de START  Se pone a 1 si la última secuencia detectada es un bit de START 

bit 2

R/W: Información de lectura/escritura 0: Escritura 1: Lectura ( 0 : N o hay transmi sión 1 : Transmisión en pr ogreso ( UA: Actualización del byte de dirección 0: No hace falta 1 : Es necesario actualizar la dirección BF: Bit de estado del buffer 0: SSPBUF está vacío 1 : SSPBUF está lleno

bit 6 bit 5

bit 1 bit 0

)

)

Comunicación Serie Síncrona I2C

Registro SSPCON (14h) WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

bit 7

WCOL: Bit de detección de colisión 0 : N o ha habido coli sión 1 : Ha habid o colisión

bit 6

SSPOV: Bit indicador de overflow en la recepción 0: No ha habido overflow 1: Ha habido overflow

bit 5

SSPEN: Habilitación del puerto serie síncrono 0: Desabilitado 1: Habilitado (usa SCL y SDA)

bit 4

CKP: Control de SCL 0 : Mantiene SCL a “0”

SSPM1

SSPM0

1 : Reloj habilitado

bits 3:0 SSPM3:SSPM0: Modo de funcionamiento 0110: con direcciones de 7 bits. 0111 : con direcciones de 10 bits. 1000 : con CLK=Fosc / [4·(SSPADD+1)]. 1011 : Modo controlado por firmware ( inactivo). 1110: controlado por Fw(dir. de 7 bits, interrup. por bits de START y STOP). 1111: controlado porFw (dir. de 10 bits, interrup. por bits de START y STOP).

Comunicación Serie Síncrona I2C

Registro SSPCON2 (91h) GCEN

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

ACKSTAT 

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

GCEN: Habilita 0: Deshabilitada 1 : Habilita interrupciones por / Recepción) ACKSTAT: Bit de reconocimiento ( 0: Recibido ACK del 1: No se ha recibido ACK del ACKDT: Valor a transmitir tras una recepción ( / Recepción) 0: ACK 1: NACK ACKEN: Habilitación de secuencia ACK ( / Recepción) 0 : Desactivada 1 : Inicia secuencia de reconocimiento en SDA y SCL RCEN: Bit de habilitación de recepción ( ) 0: Recepción desactivada 1: Activa modo recepción PEN: Habilitación de una secuencia STOP ( ) 0: Desactivada 1 : Inicia situación de STOP en SDA y SCL RSEN: Habilitación de START repetido ( ) 0: Desactivado 1 : Inicia repetidas situaciones de START   SEN: Habilitación de una secuencia START  ( ) 0: Desactivada 1: Inicia situación de START en SDA y SCL

Comunicación Serie Síncrona I2C

Otros registros relacionados con el módulo MSSP TRISC

(87h)

Para definir RC3 y RC4 como entradas.

SSPBUF

(13h)

Buffer de transmisión/recepción serie.

SSPSR

Registro de desplazamiento SSP (no accesible directamente).

SSPADD

(93h)

Define la dirección del

PIR1 – PIE1

(0Ch – 8Ch)

PIR2 – PIE2

(0Dh – 8Dh)

o los baudios de la comunicación (

).

Interrupciones del módulo SSP (SSPIF – SSPIE). Interrupción por colisión del bus (BCLIF – BCLIE).

INTCON

(0Bh , 8Bh , 10Bh , 18Bh)

Habilita interrupciones de periféricos.

Comunicación Serie Síncrona I2C

Funcionamiento en modo Antes de activar el módulo hay que configurar RC como entradas. Configurar el MSSP en el registro SSPCON.

I 2C con direcciones de 7 bits o con direcciones de 10 bits. I 2C con o sin interrupciones por bits de START y STOP. Lo más habitual es que no se usen interrupciones por ST ART/STOP

Establecer la dirección del esclavo.

Escribirla en el registro SSPADD.

La dirección viene indicada por SSPADD - SSPADD=0 LSb se usa para determinar la operación solicitada por el

Esperar por un suceso I 2C.

Se puede determinar con la ayuda del bit SSPIF. La interrupción puede estar activada o no

Identificar el suceso y actuar en consecuencia.

Los sucesos I2C que percibe el

pueden ser de 5 tipos.

Comunicación Serie Síncrona I2C

solicita escritura. Último byte fue una dirección El ha comenzado una operac ión de escritura con el inicio de una secuencia START o RESTART en el bus, seguida del envío de la dirección del . La dirección que hay en el bus pasa al registro SSPSR del Si coincide con la suya, la dirección recibida pasa a SSPBUF.

.

Bits del registro SSPSTAT. -S=1 La última secuencia detectada fue un START  - R/W = 0 El va a escribir datos en el - D/A = 0 El último byte recibido fue una dirección - BF = 1 El buffer está lleno Debe leerse el registro SSPBUF aunque no se vaya a usar la información que contiene. Esta acción borra el bit BF  y evita posteriores .

Comunicación Serie Síncrona I2C

solicita escritura. Último byte fue un dato Tras el byte de dirección, el bytes de datos al .

puede enviar uno o más

Bits del registro SSPSTAT. -S=1 La última secuencia detectada fue un START  - R/W = 0 El escribe datos en el - D/A = 1 El último byte recibido fue un dato - BF = 1 El buffer está lleno Debe leerse el registro SSPBUF. Si SSPBUF no estaba lleno antes de la escritura, el un reconocimiento ACK en el 9º pulso de reloj.

Lo hace el MSSP automáticamente. Si ya estaba lleno, SSPOV ← 1 y se envía un NACK.

envía

Comunicación Serie Síncrona I2C

solicita lectura. Último byte fue una dirección El ha comenzado una operación de lec tura con el inicio de una secuencia START o RESTART en el bus, seguida del envío de la dirección del . Bits del registro SSPSTAT. -S=1 La última secuencia detectada fue un START  - R/W = 1 El va a leer datos del - D/A = 0 El último byte recibido fue una dirección - BF = 0 El buffer está vacío El bit CKP se pone a 0 para que la línea SCL pase a estado bajo, dando así tiempo al para preparar el dato a enviar. El

debe escribir en el buffer el dato solicitado por el .

Y debe hacer CKP



1 para liberar la línea SCL.

Comunicación Serie Síncrona I2C

solicita lectura. Último byte fue un dato El

ya ha leído un dato del

y quiere leer otro.

Bits del registro SSPSTAT. -S=1 La última secuencia detectada fue un START  - R/W = 1 El lee datos del - D/A = 1 El último byte recibido fue un dato - BF = 0 El buffer está vacío El bit CKP se pone a 0 para que la línea SCL pase a estado bajo, dando así tiempo al para preparar el dato a enviar. El Esclavo manda el dato al Maestro escribiéndolo en el registro SSPBUF y haciendo CKP 1 para liberar la línea SCL. 

Comunicación Serie Síncrona I2C

envía NACK El ha enviado un NACK como respuesta al dato que ha recibido desde el .

De este modo indica que ya no quiere recibir más datos. Bits del registro SSPSTAT. -S=1 La última secuencia detectada fue un START  - R/W = 0 La lógica del queda reseteada - D/A = 1 El último byte recibido fue un dato - BF = 0 El buffer está vacío El envío de un NACK queda identificado porque R/W



0.

Debido a que la recepción de un NACK da lugar a un reset de la lógica I 2C del . Esta situación da lugar a que los bits del registro SSPSTAT reflejen una situación incoherente. Indican que se ha recibido un dato del está vacío.

pero que el buffer

Comunicación Serie Síncrona I2C

Control de errores en modo Cada vez que se lee el SSPBUF, el usuario debe asegurarse de que no han ocurrido overflows.

Comprobando el estado del bit SSPOV. Si ha ocurrido un overflow, será necesario hacer SSPOV SSPBUF para permitir nuevas recepciones.



0 y leer

Los sucesos que tienen lugar tras un overflow dependen de cada caso.

La lógica del Típicamente el reciba un ACK.

le enviará un NACK al . intentará volver a enviar el dato hasta que

Tras escribir un dato en SSPBUF, el usuario debe comprobar el valor de WCOL para asegurar que no se ha producido una colisión.

En la práctica, no habrá colisiones si únicamente se escribe en SSPBUF cuando BF=0 y el está transmitiendo al .

Comunicación Serie Síncrona I2C

Funcionamiento en modo Configurar el MSSP para funcionar en modo

- Definir líneas SDA y SCL como entradas.

I 2C.

TRISC ← xxx11xxx

- Configurar el modo I2C.

SSPCON1 ← 00101000

- Seleccionar los baudios de la comunicación. Sólo se usan los bits 0 a 6

SSPADD ← [(f osc/Bd) / 4] – 1 Control del slew rate (SSPSTAT)

100kHz 400kHz 1MHz

- Configurar interrupciones (si se necesitan) SSPIE / SSPIF -

BCLIE / BCLIF

Implementar alguno de los 6 eventos I 2C.

1. START 2. RESTART  3. STOP 4. Leer (recibir datos)

5. Reconocer (tras una lectura) * ACK * NACK

6. Escribir (transmitir datos)

Comunicación Serie Síncrona I2C

Funcionamiento del Maestro Secuencia típica de transmisión de un byte por parte del Maestro a) Se genera una condición de START poniendo a 1 el bit de habilitación

de START (SEN) del registro SSPCON2.

b) Se esperará el tiempo necesario para detectar START , cuando se

haya dado la condición, SSPIF=1 (se debe poner a 0 por software).

c) Se carga SSPBUF con la dirección a enviar por el bus y el bit R/W=0. d) Los bits de la dirección salen por SDA hasta completar los 8 bits. e) Se el bit de reconocimiento (ACK) recibido del esclavo y se

introduce ese bit en SSPCON2.

f) Al final del 9º flanco en SCL, se pone SSPIF=1 (hay que resetearlo). g) Se cargan en SSPBUF los 8 bits del dato a enviar. h) Los bits del dato salen por SDA hasta completar la transmisión. el bit de reconocimiento (ACK) y se graba su valor en i) Se

SSPCON.  j) Al final del 9º flanco en SCL se pone SSPIF a 1 (hay que ponerlo a 0). k) Se genera una condición de STOP poniendo a 1 el bit de habilitación de STOP (PEN) de SSPCON2. l) Una vez detectada la condición de STOP, se pone a 1 el flag SSPIF.

Comunicación Serie Síncrona I2C

Generación de una secuencia START  Hacer SEN

1 para habilitar la generación de START.



Bit SSPCON2.

Esto da lugar a que la línea SDA pase a “0” mientras SCL está a “1”.

Así se define una secuencia START, que da lugar a: S←1 SEN ← 0 SSPIF ← 1

(SSPSTAT) (SSPCON2) (PIR1)

Generación de una secuencia de START repetido Hacer RSEN



1 para habilitar la generación de RESTART.

Bit SSPCON2.

Esto da lugar a que se ejecuten secuencias de START sin ser precedidas de la correspondiente secuencia de STOP.

De este modo, el

no cede el control del bus en ningún momento.

Comunicación Serie Síncrona I2C

Generación de una secuencia STOP Hacer PEN

1 para habilitar la generación de STOP.



Bit SSPCON2.

Esto da lugar a que la línea SDA pase a “1” mientras SCL está a “1”.

Se indica así que ha finalizado la recepción/transmisión. El bus I2C queda libre y se tiene: P←1 PEN ← 0 SSPIF ← 1

(SSPSTAT) (SSPCON2) (PIR1)

Generación de una lectura (recepción) Hacer RCEN



1 para habilitar una lectura.

Bit SSPCON2.

Entran bits cada pulso de SCL en SSPSR.

Tras el 8º bit, RCEN ← 0, SSPSR ← SSPBUF, BF ← 1, SSPIF ← 1. En ese momento SCL=0 y hay que leer el buffer para hacer BF ← 0. A continuación se puede enviar un ACK.

Comunicación Serie Síncrona I2C

Generación de un ACK Indicar en ACKDT si se va a generar un ACK (“0”) o un NACK (“1”).

Bit SSPCON2.

Hacer ACKEN



1 para habilitar la generación de ACK.

Bit SSPCON2.

Esto libera la línea de datos (SDA ponga a “0” durante un pulso de reloj.



1), para que el receptor la

Tras este pulso de reloj, ACKEN ← 0 automáticamente. Es obligatorio mandar un ACK/NACK al final de cada transferencia. ¡¡IMPORTANTE!!

Generación de una escritura (transmisión) Basta con escribir el dato a enviar en SSPBUF.

- BF ← 1 mientras se está enviando el dato. - Cuando se ha enviado el 8º bit, BF ← 0. - El Maestro libera entonces SDA para recibir ACK. - Tras el 9º pulso de reloj, SSPIF ← 1.

Comunicación Serie Síncrona I2C

Control de errores en modo Las colisiones por escritura deben controlarse mediante observación del bit WCOL (SSPCON).

Una colisión de escritura sucede cuando se intenta escribir un dato en el buffer antes de que haya terminado el evento anterior. No tiene asociada ninguna interrupción. Las colisiones de bus sí tienen asociada una interrupción: BCLIF.

Cuando SCL=1, el dato en SDA debe ser estable. Se produce colisión de bus cuando el dato cambia mientras SCL=1 o si se detecta SDA=0 cuando SDA debería ser 1 (estar libre). En ese caso se hace BCLIF ← 0 y se pone la lógica I 2C en reposo. La siguiente secuencia deberá ser un START. Un NACK puede indicar error o simplemente un estado de funcionamiento que debe ser detectado y procesado.

El puede recibir un NACK si hay un error en el o si éste está desbordado. Según la situación, el Maestro deberá generar un RESTART, un STOP o un STOP/START.

Comunicación Serie Síncrona I2C

Bus I2C en el compilador C de CCS Configuración del módulo I 2C

#use i2c (opciones) opciones: MASTER

SLAVE SCL = pin SDA = pin ADDRESS = nn FAST  SLOW NOFORCE_SW RESTART_WDT 

Selecciona modo Selecciona modo Especifica el pin SCL (PIN_C3) Especifica el pinSCL (PIN_C4) Especifica la dirección del Selecciona la especificación I2C rápida Selecciona la especificación I2C lenta Utiliza funciones I 2C hardware. Resetea el WDT mientras espera a hacer una lectura de bus

2 SiSino nose seindica indica NOFORCE_SW implementaráelelprotocolo protocoloII2CCpor porsoftware. software. NOFORCE_SW, ,implementará - Pensado para aquellos microcontroladores PIC que no disponen de MSSP.

- Pensado para aquellos microcontroladores PIC que no disponen de MSSP. --ElElmodo , ,sin modo sinembargo, embargo,deberá deberáusarse usarsecon conelelMSSP. MSSP.

Comunicación Serie Síncrona I2C

Secuencias de ST ART y STOP

i2c_start (); Si el PIC está en modo , esta instrucción genera una secuencia START, tras la cual la línea SCL se pone a “0” hasta que se escribe en el bus. Si se lanza otra secuencia START antes de que se produzca una secuencia STOP, se habrá ejecutado una secuencia RESTART.

i2c_stop (); Si el PIC está en modo secuencia STOP.

, esta instrucción genera una

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF