Sunteți pe pagina 1din 14

LABORATORIO DE MICROPROCESADORES II

PRCTICA N4
1. Objetivo:

Desarrollar

una

aplicacin

que

permita

comunicar

el

microcontrolador ATMEGA 128 con un C.I. 24CXX memoria serial utilizando el


interface I2C y el compilador Mikro C o Mikro Basic.
2. Marco terico:
2.1 Memorias EEPROM 24CXX:
Las memorias seriales EEPROM que funcionan bajo el protocolo I2C han
ganado popularidad en los equipos electrnicos hasta convertirse en sistemas
estndar de almacenamiento. Como se trata de una memoria no voltil los
datos que queden almacenados en su interior no se borraran por un corte de
energa prolongado.
En resumen podemos mencionar algunas caractersticas de estas memorias
que las hacen muy prcticas de utilizar y aprender su funcionamiento:

Pueden ser escritas y borradas de forma elctrica EEPROM

(Electrically Erasable Programable Read OnlyMemory)


Estn garantizadas para 1 milln de ciclos de escritura/lectura.
Pueden llegar a retener la informacin sin ser alimentadas durante

cientos de aos.
Se organizan por pginas para facilitar su direccionamiento y

almacenamiento de la informacin.
Utilizan para su funcionamiento una tensin nica (5Volts o 3,3Volts)
Son compatibles con el protocolo serial I2C (Marca registrada de Philips)
Bajsimo costo.
Amplia variedad de encapsulados para adaptar el modelo necesario, de
acuerdo al tamao de la aplicacin.

2.2 Protocolo I2C

El Bus I2C (Inter Integrated Circuit) es un sistema de comunicacin de


dos cables, con propiedades de velocidad de transferencia de datos
considerada de media a baja (400 Khz. a 100 Khz.) y que fue desarrollado
por Philips Semiconductor, a comienzos de la dcada del 80. Originalmente
creado para reducir los costos de los equipos electrnicos, tuvo sus
primeras aplicaciones en controles de contraste, brillo y volumen en
aparatos de televisin pero actualmente encontramos conexiones por bus
I2C en una gran variedad de computadoras, equipos industriales,
entretenimiento, medicina, sistemas militares y un ilimitado abanico de
aplicaciones e importantes usos potenciales.
Antes de la aparicin del protocolo I2C, las transferencias de datos de
memorias a microprocesadores, eran realizadas en forma paralela
requiriendo de esta forma encapsulados con una importante cantidades de
pines (24, 28, o ms pines). La asignacin de funciones de los pines se
repartan entre el direccionamiento de la memoria, la seleccin, el control y
la transferencia de datos. Esta ltima solamente requera de 8 pines ms
otros ocho pines para el direccionamiento, por mencionar algunos. En
contraste con este despilfarro de pines, el protocoloI2C permite la
comunicacin chip-to-chip usando solo dos cables en una conexin serial,
permitiendo de esta forma comunicar dispositivos con muy pocas vas.
Estos dos cables son llamados Clock (SCL) y Data (SDA) y son los
encargados del direccionamiento, seleccin, control y transferencia de
datos, de a un BIT por vez.
SDA est encargado del intercambio de datos, mientras que SCL se
encarga de sincronizar al transmisor y al receptor durante la transferencia
de los datos mencionados desde un IC al otro. Dentro del sistema
de comunicacin

I2C,

los

dispositivos

estn

identificados

como Maestro (Master) y Esclavo (Slave), por lo que al dispositivo que


inicia el contacto y abre el bus se lo denomina Master, mientras que al
que recepciona y contesta el llamado se lo denomina Slave.

Los

dispositivos

conectados

ser Master solamente, Slave solamente

al
o

intercalar

bus
las

pueden
funciones

de Master y Slave de acuerdo como el sistema requiera, tal como es el


caso de las memorias EEPROM I2C.

Este sistema puede interconectar a muchos IC sobre el bus (hasta 255


dispositivos) y todos conectados a los mismos dos cables SDA y SCL.
Cada dispositivo esclavo posee una nica direccin y cuando
el Master transmita el llamado todos los CI s conectados al bus lo
escucharn, pero solo le contestar aquel que posea la direccin que el
transmisor incluy en su llamada y ser con este nico Slave, con quien
iniciar la transferencia de datos hasta que decida cerrarla.

En el protocolo I2C solo pueden existir dos estados elctricos: flotante en


alto y bajo. El dispositivo maestro o esclavo manejan el bus I 2C mediante un
driver de drenador abierto o colector abierto. Las lneas SDA y SCL son
llevadas a Vdd mediante resistores de pull up. Debido a que el driver es de
drenador abierto, solo puede llevar el bus I 2C a nivel bajo. Cuando la salida
de reloj esta en nivel lgico bajo, el transistor NMOS es apagado. En este
caso no fluye corriente desde y hacia el transistor NMOS y por lo tanto el
bus es llevado a nivel lgico alto por los resistores de pull up. En caso
contrario el transistor NMOS es encendido y se lleva las lneas a nivel lgico
bajo. El valor del resistor de pull up depende de la capacitancia de

la

lnea de comunicacin y la velocidad de comunicacin. Se recomiendan


valores de 2,2 K y 1 K para los modos de comunicacin estndar y de
alta velocidad.

Conexin de los dispositivos al bus I2C en modos estndar y alta velocidad


2.3 Seales utilizadas para la transferencia de datos con I2C
1. S (Condicin de inicio): Una condicin de inicio indica que un dispositivo
podra transferir datos a travs del bus I2C. Una condicin de inicio es
representada por un flanco descendente en la lnea SDA cuando la seal de
reloj se encuentra en nivel lgico alto.

2. P (Condicin de parada): Una condicin de parada indica que un


dispositivo desea dejar libre el bus I2C. Una vez liberado el bus, otros
dispositivos podrn utilizarlo para transmitir datos. Una condicin de
parada es representada por un flanco ascendente en la lnea SDA cuando
la seal de reloj se encuentra en nivel lgico alto. Una vez que la condicin
de parada se completa ambas seales SDA y SCL se mantienen en alto,
condicin conocida como bus desocupado.

3. (R) Condicin de inicio repetido: Una seal de inicio repetido es una


seal de inicio generada sin haber antecedido una seal de paro (P). Esta

seal es utilizada por el dispositivo maestro para comunicarse con otro


dispositivo esclavo o con el mismo esclavo en un modo diferente de
comunicacin sin dejar de usar el bus.

4. Datos: El bloque de datos representa la transferencia de un paquete de


datos de 8 bits de informacin. Los datos son enviados por la lnea SDA,
mientras los pulsos de reloj son enviados por la lnea SCL. La seal de reloj
puede ser alineada para con los datos para indicar si cada bit es 1 o 0.
Los datos son vlidos en la lnea SDA solo cuando la seal de reloj es alta.
Cuando SCL no est en alto es posible cambiar los datos.

5. ACK (Condicin de reconocimiento): La transferencia de datos en el bus


serial bajo el protocolo I2C necesitan ser reconocidas positivamente (ACK) o
negativamente (NACK). Un dispositivo puede reconocer (A) la transferencia
de cada byte colocando la lnea SDA en nivel bajo durante el noveno pulso
de reloj.
Si el dispositivo en cambio mantiene la lnea SDA flotante en alto transmite
un reconocimiento negativo (NACK).

2.4 Sincronizacin:

Todos los maestros generan sus propias seales de reloj sobre la lnea SCL
para transferir datos. Los datos son vlidos solo durante el periodo en que
se encuentra en nivel lgico alto la seal de reloj. Por lo tanto es necesaria
una seal de reloj para arbitrar la transferencia de todos los bits. Para la
mayora de los microcontroladores incluyendo el PIC 18 la seal de reloj
SCL es generada por un contador que cuenta en forma descendente un
valor previamente programado.
La sincronizacin de la seal de reloj es realizada utilizando la conexin
AND cableada del interface I 2C a la lnea de reloj SCL. Esto significa que
una transicin de nivel alto a bajo en la lnea SCL causar que los
dispositivos que deseen iniciar la comunicacin empezaran a contar su
periodo en bajo y una vez que un dispositivo ha generado una seal de reloj
en bajo mantendr la seal de reloj en ese estado hasta que se alcance un
estado alto.

La transicin de bajo a alto de este reloj no cambiar el estado de la lnea


SCL si otra seal de reloj (CLK2) se encuentra en nivel lgico bajo. La
lnea SCL se mantendr en nivel lgico bajo por causa del dispositivo con
mayor periodo en nivel bajo. Los dispositivos con periodo de reloj ms
corto se mantendrn en estado de espera durante este tiempo.
Cuando todos los dispositivos han realizado el conteo de su periodo en
nivel lgico bajo, la seal de reloj ser liberada y se cambiar a nivel alto.

La sincronizacin de reloj ocurre cuando varios maestros tratan de


manejar el bus I2C y por lo tanto el arbitraje del bus debe seleccionar cual
es el maestro ganador.
2.5 Arbitraje:
El protocolo I2C permite la existencia de mltiples maestros en el mismo
bus. En caso de que ms de un maestro desee comenzar la
transferencia de datos al mismo tiempo un esquema de arbitraje es
empleado para forzar a un maestro a abandonar el bus. El dispositivo
maestro continua transmitiendo hasta que uno intenta un nivel lgico alto
mientras el otro transmite un nivel bajo. Como el driver del bus es de tipo
drenador abierto el bus ser llevado a nivel bajo. El maestro intentando
transferir una seal en nivel alto detectar un nivel bajo en la lnea SDA
y abandonar el bus cerrando su puerto de salida de datos. El maestro
ganador continuar su transmisin mientras el perdedor se convertir en
esclavo. Este esquema de arbitraje es no destructivo, un dispositivo
gana y los datos no se pierden.

2.6 Formato de la transferencia de datos:

El protocolo I2C permite a un dispositivo utilizar direcciones de 7 o 10 bits para


especificar a un dispositivo esclavo para la transferencia de datos. Los
siguientes son los posibles formatos para la transferencia de datos en el
protocolo I2C.

Maestro transmisor esclavo receptor: La direccin de


transferencia no cambia.

Maestro lee al esclavo inmediatamente despus del primer


byte: En el momento del primer reconocimiento de comunicacin
valida (ACKNOWLEDGE) el maestro emisor se convierte en
maestro receptor y el esclavo receptor se convierte en esclavo
transmisor. El primer ACK es generado por el esclavo. La
condicin de STOP es generada por el maestro el cual enva
previamente un ACK negativo (A).

Formato combinado: Durante un cambio de direccin dentro


una transferencia la condicin de inicio (START) y la direccin del
esclavo son repetidas pero con el bit R/W invertido. Si un maestro
receptor enva una condicin de inicio repetida previamente enva
un ACK negativo.

2.7 Direccionamiento de 7 bits:


El procedimiento de direccionamiento para el protocolo I 2C es tal que el
primer byte despus de la condicin de inicio determina cual esclavo ser
seleccionado por el maestro. La excepcin es el direccionamiento general el
cual direcciona todos los dispositivos. El primer byte despus del bit de inicio
transporta la direccin de 7 bits y la direccin del mensaje. Cuando el bit
menos significativo es 1 el dispositivo maestro lee informacin del esclavo
seleccionado. En caso de 0 el maestro escribe informacin en el esclavo
seleccionado.

Cuando una direccin es enviada cada dispositivo en el sistema compara los


primeros 7 bits despus de la condicin de START con su direccin. Si
ambas son iguales, el dispositivo se considera direccionado por el maestro y
es por lo tanto un esclavo receptor o esclavo transmisor, dependiendo del bit
R/W.
El comit tcnico encargado de normar el uso del protocolo I 2C determina la
ubicacin de las direcciones tal como se detalla en la siguiente tabla:
DIRECCIN ESCLAVO
0000000
0000000

Bit R/W
DESCRIPCIN
0
Direccin de llamada general
1
Byte de inicio

0000001
0000010
0000011
00001XX
11111XX
11110XX

X
X
X
X
X
X

Direccin CBUS
Reservado para diferentes formatos de bus
Reservado para propsitos futuros
Cdigo de modo maestro
Reservado para propsitos futuros
Direccionamiento en modo esclavo de 10
bits

2.8 Proceso de comunicacin


La condicin de START o Inicio ocurre nicamente en la transicin de un
estado ALTO a un estado BAJO en la lnea SDA mientras la lnea SCL se
encuentre en un nivel ALTO. En cambio, la transicin de un estado BAJO a
un estado ALTO en la lnea SDA, mientras la lnea SCL se encuentre en un
nivel ALTO, indicar una condicin de STOP o Parada. Las condiciones
de START y STOP son siempre generadas por el dispositivo que asuma la
condicin de Master dentro del bus.
El bus se considerar ocupado despus de una situacin de START y
pasar a estar nuevamente libre cierto tiempo despus de la transmisin de
la condicin de STOP. Este cierto tiempo ser determinado por el Master y
vendr especificado en la hoja de datos del mismo .

Figura 1: Temporizacin del bus I2C


(Fuente: ATMEL Two wire serial EEPROM datasheet)
2.9 Librera de MikroC para el bus I2C:
La biblioteca Software_I2C de mikroC PRO contiene las funciones necesarias
para establecer la comunicacin con dispositivos I2C. Estas funciones pueden

emplearse con cualquier microcontrolador PIC (aunque no disponga de


mdulos I2C). Las funciones incorporadas permiten que el usuario emplee un
microcontrolador PIC como maestro (el modo multi-maestro no est
disponible). La tabla muestra las funciones que pueden ser utilizadas para la
comunicacin I2C:
FUNCIN
Soft_I2C_Init()
Soft_I2C_Start()

DESCRIPCIN
Configura el mdulo I2C por software
Determina si el bus I2C est libre y
enva una seal de START
Soft_I2C_Read(ack)
Lee un byte del esclavo y responde con
una seal NOACK (ack == 0) o ACK
(ack == 1)
Soft_I2C_Write(dato)
Enva un byte dato por el bus I2C
Soft_I2C_Stop()
Enva una seal de STOP
Soft_I2C_Break()
Todas las funciones de la biblioteca
Software_I2C pueden bloquear el flujo
de programa. Si se ejecuta esta funcin
desde la funcin de interrupcin se
producir el desbloqueo del programa.
Para el microcontrolador ATMEGA se tiene otro conjunto de libreras que cumplen
las mismas funciones que en la tabla anterior.
FUNCIN
TWI_Init()
TWI_Start()
TWI_Busy()
TWI_Read()

TWI_Write(dato)
TWI_Stop()
TWI_Break()

TWI_Status()
TWI_Close()

DESCRIPCIN
Configura el mdulo I2C por software
Determina si el bus I2C est libre y
enva una seal de START
Sealiza el estado del bus
Lee un byte del esclavo y responde con
una seal NOACK (ack == 0) o ACK
(ack == 1)
Enva un byte dato por el bus I2C
Enva una seal de STOP
Todas las funciones de la biblioteca
Software_I2C pueden bloquear el flujo
de programa.
Retorna el estado del bus
Cierra la conexin del bus

Cuando se utiliza la biblioteca Software_I2C se debe deshabilitar las


interrupciones. Los pines utilizados en la comunicacin deben estar conectados a
resistores de pull up.
3

Trabajo de laboratorio:

PRIMERA FIRMA:
Transcribir el siguiente programa ejemplo utilizando el microcontrolador ATMEGA
128 y el software MikroC Pro for AVR.
void main(){
DDRB = 0xFF;
PORTB = 0;
TWI_Init(100000);
TWI_Start();
TWI_Write(0xA2
TWI_Write(2);
TWI_Write(0xAA);
TWI_Stop();
Delay_100ms();
TWI_Start();
TWI_Write(0xA2);
TWI_Write(2);
TWI_Stop();
TWI_Start();
TWI_Write(0xA3);
PORTB = TWI_Read(0u);
TWI_Stop();
}

SEGUNDA FIRMA:
En el circuito anterior, aumentar una pantalla LCD, dos pulsadores y la bocina
(Piezo Buzzer), donde la tarea que realizar es la siguiente:
Por cada pulso que hagamos en el botton Guardar, las variables se guardaran
(contador) internamente en el AVR, despus de haber realizado el guardado de
los valores, pulsamos el botton Leer para que nos pueda motrar en el LCD los

datos guardados y tambin cada vez que se muestre un dato en el LCD,


escucharemos un tono de 2KHz con una duracin de 0,5(seg).
NOTA: el estudiante deber colocar los dispositivos respetando el orden que tiene
la tarjeta entrenadora UNI DS6

S-ar putea să vă placă și