Diferencia entre revisiones de «Artículos EC2783 Abr-Jul 2016»

De Wikitronica
Saltar a: navegación, buscar
(Ejemplos de IIC en el QRUG)
 
(No se muestran 49 ediciones intermedias de 7 usuarios)
Línea 1: Línea 1:
=== IIC ===
 
  
== Introduccion IIC ==
+
En esta sección se encuentran los artículos creados por los grupos del curso EC2783 Abril-Julio 2016. En los cuales se trabaja en el módulo DEMOQE128.
  
El Inter-Integrated Circuit (IIC) provee un método de comunicación entre varios dispositivos. Está diseñado para operar hasta los 100 kbps con la máxima carga del bus y del tiempo. El dispositivo es capaz de operar a tasas de baudios altas, sin sobrecargar el bus. La longitud máxima de comunicación y el número de dispositivos que pueden ser conectados está limitado por la capacitancia del bus, la cual es de 400 pF.
+
Por favor leer sobre las normas de edición:
  
'''Configuración del módulo:'''
+
[[Sobre la redacción]]
  
Los pines SDA y SCL del módulo IIC1 pueden ser reposicionados por software usando el registro SOPT2[IIC1PS] tal como se muestra en la siguiente tabla. Este bit selecciona cual puerto de E/S con propósito general está asociado con la operación del IIC1.
+
[[Sobre los artículos]]
  
{| class="wikitable"
+
[[Sobre la corrección y discusión de artículos]]
|+ Opciones de Posición del IIC1
+
! SOPT2[IIC1PS] !! Pines para SDA !! Pines para SCL
+
  
|-
+
== Lista de Artículos ==
| 0 por defecto || PTA2 || PTB6
+
Cada artículo debe estar debidamente clasificado en una o varias categorías.
|-
+
| 1 || PTA3 || PTB7
+
|}
+
 
+
'''Vectores de Interrupción:'''
+
 
+
Para la serie de microcontroladores MC9S08QE128, los cuales tienen dos IIC, el vector de interrupciones es compartido por ambos módulos IIC. Cuando las interrupciones son habilitadas para ambos módulos, se debe verificar el bit de IICIF (que hace referencia a la bandera de interrupciones) de los registros IIC1S y IIC2S (estos son los registros de status) para determinar cuál módulo es el causante de la interrupción.
+
 
+
'''Características:'''
+
 
+
El IIC incluye las siguientes características:
+
 
+
* Compatibilidad con el bus estándar del IIC.
+
 
+
* Operación con múltiples maestros.
+
 
+
* Software programable para una de las 64 frecuencias diferentes del reloj serial.
+
 
+
* Software que permite seleccionar el bit de reconocimiento (acknowledge bit)
+
 
+
* Manejo de interrupciones mediante la transferencia de datos byte por byte.
+
 
+
* Resolución de las interrupciones perdidas con un modo que hace intercambio automático de maestro a esclavo.
+
 
+
* Llamado a las direcciones de identificación de las interrupciones.
+
 
+
* Generación y detección de las señales START y STOP.
+
 
+
* Generación repetida de la señal START.
+
 
+
* Generación y detección del bit acknowledge.
+
 
+
* Detección de la disponibilidad del bus.
+
 
+
* Llamada general de reconocimiento.
+
 
+
* Extensión de la dirección a 10 bits.
+
 
+
'''Modos de Operación:'''
+
 
+
Se presenta a continuación una breve descripción de los modos de operación del IIC:
+
 
+
* Modo Corriendo o “Run”: Este es el modo de operación básico. Para conservar la energía en este modo, inhabilite el módulo.
+
 
+
* Modo de espera o “Wait”: El módulo seguirá funcionando mientras que el microcontrolador esté en modo de espera y pueda proporcionar una alarma de despertador.
+
 
+
* Modo detenido o “Stop”: El IIC está inactivo en el modo Stop para reducir el consumo de energía. La instrucción de Stop no afecta a los registros de estados del IIC. Esta instrucción reiniciará el contenido de los registros.
+
 
+
'''Descripción de Señales externas'''
+
 
+
Se describe a continuación las señales que son accesibles por cada usuario:
+
 
+
* SCL — Línea del Reloj Serial (Serial Clock Line): Es bidireccional, y es la línea del reloj serial del sistema del IIC.
+
 
+
* SDA - Línea de Data Serial (Serial Data Line): Es la línea de datos serial del sistema del IIC. Es bidireccional.
+
 
+
== Registros IIC ==
+
== Protocolo IIC ==
+
 
+
 
+
El Protocolo Inter-Integrated Circuit (IIC), se compone de 4 partes principales, las cuales componen el envío de un mensaje, descritos a continuación:
+
 
+
'''Señal de inicio (START Signal):''' Inicialmente, los buses SCL y SDA se encuentran lógicamente encendidos (en caso de estar disponibles para ser utilizados), por lo cual la señal de inicio, consiste en una bajada del flanco de SDA, mientras SCL se mantiene encendido por parte del maestro. Puede ocurrir un caso en el que se da por repetida una señal de inicio, aun sin finalizado una comunicación previa; esto indica el envío de datos bien sea con otro dispositivo esclavo, o en un modo diferente (lectura/escritura).
+
 
+
'''Transmisión de la “llave” de esclavo:''' Este paso consiste en la transmisión de una dirección de 8-bit, los cuales son diferenciados por los primeros 7 bits consecutivos, que representan la “llave” que establece con cuál dispositivo esclavo se desea establecer una comunicación. Cada esclavo mantiene una clave que debe intersectar (lógico AND) con la llave enviada, y solo aquel que coincida con la clave enviada se dispondrá a “escuchar” el mensaje que será enviado a continuación. Con respecto al último bit, éste se refiere a una solicitud de tipo Lectura/Escritura. Para el bit en 1, se desea iniciar una transferencia de lectura del maestro, mientras que para el bit en 0 se desea establecer una comunicación de escritura maestro-esclavo.
+
 
+
'''Transferencia de datos:''' Una vez recibida la clave por parte del esclavo correspondiente, con su respectiva dirección de transferencia de datos, se procede a ejecutar en envío de los bytes de información uno a uno, en el cual cada bit representa un clock del reloj, iniciando por el bit as representativo (MSB) y finalizando por el bit menos representativo (LSB). Por último, en el noveno flanco del clock se envía un bit de reconocimiento o de no reconocimiento; en este último caso la transmisión de data no es exitosa y se procede a abortar o a retransmitir según sea el caso.
+
 
+
'''Señal de STOP:''' Cuando la transmisión de datos ha finalizado, ambos buses SDA Y SCL vuelven a su estado lógico inicial en 1 y tanto maestro como esclavo dan por finalizada la comunicación.
+
 
+
[[
+
 
+
 
+
Image:iic1|thumb|widthpx| ]]
+
 
+
 
+
Funcionamiento del protocolo
+
 
+
Como ya se mencionó, cada 9 flancos de reloj ocurre un reconocimiento del byte inmediatamente enviado. La dirección del esclavo, o “llave” como ya se hizo referencia, se encuentra contenida en una combinación de 10-bits, configurados de la siguiente manera:
+
 
+
El primer byte enviado del maestro al esclavo contiene necesariamente el siguiente contenido:
+
 
+
Bits 0-4 (11110x): Son bits constantes, e indican que una dirección de esclavo será enviada posteriormente.
+
 
+
Bits 5-6 (AD10-AD9): pertenecen a los primeros 2 bits de los 10 que componen la dirección de esclavo.
+
 
+
Bit 7 (R/W): debe estar configurado obligatoriamente en 0 ya que es el maestro quien transmite, y en este caso los esclavos quienes escuchan. NOTA: hasta este punto pueden seguir escuchando mas de un esclavo, ya que la llave será completada por 8-bits, enviados posteriormente.
+
 
+
Luego el maestro debe esperar el bit de reconocimiento, para proceder a enviar la segunda cadena de bit, compuesta por los 8 bits restantes que completan la llave, para la cual solo debe existir una respuesta de reconocimiento, del esclavo respectivo con quien se establece la comunicación.
+
 
+
Dependiendo la dirección de la comunicación, ocurre lo siguiente:
+
 
+
Comunicación Maestro a esclavo: Posteriormente al procedimiento explicado se proceden a enviar los bits de datos, los cuales son recibidos por el esclavo hasta que ocurra la condición de STOP.
+
 
+
Comunicación Esclavo a maestro: Una vez recibido el segundo bit de reconocimiento(A2), se debe enviar un tercer byte con los primeros 7-bits idénticos al primer byte enviado (1110xxx0) con la diferencia del bit 0, el cual es sustituido con 1, para configurar el modo de lectura del maestro.
+
 
+
En la siguiente imagen se muestra gráficamente,
+
 
+
También se puede enviar un mensaje General del tipo “Broadcast”, con llaves de 10 o 7 bits seteando el registro GCAEN.
+
 
+
== Interrupciones ==
+
 
+
El IIC puede generar sólo una interrupción. Para que se genere una interrupción, debe ocurrir cualquiera de los eventos de la tabla siguiente, siempre y cuando el bit IICIE esté activado:
+
 
+
{| class="wikitable"
+
|+ Interrupciones mediante IIC
+
! Fuente de interrupción !! Status !! Flag !! Local Enable
+
 
+
|-
+
| Completar la transferencia de 1 byte || TCF || IICIF || IICIE
+
|-
+
| Ajuste de direcciones de llamada recibidas || IAAS || IICIF|| IICIE
+
 
+
|-
+
| Pérdida arbitraria || ARBL || IICIF || IICIE
+
|}
+
 
+
La interrupción es impulsada por el bit IICIF (del IIC Status Register) y es enmascarada con el bit IICIE (del IIC Control Register). El bit IICIF se puede limpiar asignándole un 1 en la rutina de interrupción. El usuario puede determinar el tipo de interrupción mediante la lectura del Status Register.
+
 
+
'''Interrupción por transferencia de byte'''
+
 
+
El bit TCF (transfer complete flag) se establece a flanco de bajada del 9th clock para indicar la completación de la transferencia del byte
+
 
+
'''Interrupción por detección de dirección'''
+
 
+
Cuando la dirección de llamadas coincide con la dirección del esclavo programado (IIC address register) o cuando el bit GCAEN está activado y una llamada general es recibida, el bit IAAS en el Status Register es activado. La CPU es interrumpida siempre y cuando se active el bit IICIE. La CPU debe revisar el bit SRW y activar su modo Tx en consecuencia.
+
 
+
'''Interrupción por pérdida de arbitraje'''
+
 
+
El IIC es un verdadero bus con múltiples maestros que permite más de un maestro para ser conectado en él. Si dos o más maestros tratan de controlar el bus al mismo tiempo, se determina la prioridad relativa de los maestros en contienda por un procedimiento de arbitraje de datos. El módulo IIC asegura esta interrupción cuando pierde el proceso de arbitraje de datos y el bit ARBL en el Status Register está activado.
+
 
+
El arbitraje se puede perder en las siguientes circunstancias:
+
 
+
*SDA probado como bajo cuando el maestro produce un alto durante un ciclo de dirección o de transmisión de datos.
+
 
+
*SDA probado como bajo cuando el maestro produce un alto durante el bit de aviso de un ciclo de recepción de datos
+
 
+
*Un ciclo de arranque se intenta cuando el bus está ocupado
+
 
+
*Un ciclo repetido de arranque  es requerido en modo esclavo
+
 
+
*Se detecta una condición de parada cuando el maestro no lo solicitó
+
 
+
'''Resets'''
+
 
+
El IIC se desactiva luego de un RESET. El IIC no puede provocar un reinicio o reseteo del microcontrolador.
+
 
+
== Ejemplos de IIC en el QRUG ==
+
 
+
Los ejemplos aquí mostrados están disponibles en el sitio web de Freescale.
+
 
+
'''IIC Master Project:'''
+
 
+
En esta aplicación, dos pines son usados para trabajar con el protocolo del IIC. Uno de ellos es el PTH7, el cual es el pin de datos del protocolo de IIC. El segundo es el PTH6, el pin para el reloj.
+
 
+
Las funciones del IIC MASTER PROYECT son las siguientes:
+
 
+
* main: Es un ciclo infinito en el cual se manda un byte, el cual funciona como contador, y espera que ocurra la interrupción del IIC.
+
* MCU_init: Se deshabilita el “watchdog” de la inicialización del MCU y se habilita el módulo del reloj del IIC.
+
* GPIO_init: Se configuran los puertos PTE como las salidas, y los puertos PTH7 y PTH6 como entrada.
+
* IIC_init: Se configura el módulo de IIC.
+
* IIC_ISR: Configuración de la rutina de interrupción del IIC.
+
* Delay: Retardos.
+
 
+
El IIC MASTER PROJECT configura el MCU para trabajar como “maestro” y usa el protocolo del IIC para mandar un byte, que funciona como contador, al esclavo. La cuenta del contador se muestra en los ocho LEDS del microcontrolador.
+
 
+
La siguiente parte del código corresponde a la inicialización del MCU. Estas instrucciones deshabilitan al “watchdog”, habilitan la opción de “reset” y los pines de segundo plano. El System Option Register 1 (SOPT1) es usado para la inicialización del MCU. El SCGC1 y el SCGC2 son registros usados para ahorrar energía, aquí el reloj de los puertos periféricos puede desactivarse. En este ejemplo, solo el reloj del módulo del IIC está activo. Los “relojes” de otros puertos periféricos están desactivados. 
+
 
+
<pre>void MCU_init(void){
+
SOPT1 = 0x23; // Watchdog disable. Stop Mode Enable. Background Pin enable.
+
              // RESET pin enable.
+
SCGC1 = 0x08; // Bus Clock to the IIC module is enabled.
+
}</pre>
+
 
+
Las siguientes líneas de código corresponden a la configuración del General Purpose Input/Output. Está parte configura las direcciones para los puertos PTE y PTH. Ocho LEDs están conectados al puerto PTE, por lo que este esta configurado como la salida. El puerto PTH6 y el PTH7 están configurados como salidas también. Estos dos pines corresponden al Serial Clock (SCL) y a la Serial Data (SDA).
+
 
+
<pre>void GPIO_Init(void) {
+
PTHPE = 0xC0; // Enable Pull ups on PTH7 and PTH6 pins
+
PTEDD = 0xFF; // Configure PTE as outputs
+
PTED = 0x00; // Put 0's in PTE port
+
}</pre>
+
 
+
Lo siguiente corresponde a La inicialización del IIC usando el QE MCU. Aquí Se configura el modulo para que trabaje como “maestro”. El MCU trabaja con una velocidad de transmisión de 4 MHz, La tasa de baudios del IIC puede ser calculada de La siguiente manera:
+
 
+
IIC tasa de baudios = velocidad de transmisión (Hz) / (mul * SCL divisor);
+
IIC tasa de baudios = 4000000 / (1 * 32);
+
IIC tasa de baudios = 125000;
+
 
+
La tasa de baudios de este ejemplo es 125000 porque el módulo ICS no está configurado y el MCU trabaja con su velocidad por defecto (4MHz).
+
 
+
<pre>void IIC_Init (void) {
+
IIC2F = 0x09; // Multiply factor of 1. SCL divider of 32
+
IIC2C1 = 0xC0; // Enable IIC and interrupts
+
}</pre>
+
 
+
La siguiente es la función de retardos, usada antes de que el MCU comience a mandar el siguiente byte (luego de enviar el contador) al esclavo. Esta función sólo se usa para observar los cambios que ocurren en los LEDs.
+
 
+
<pre>void Delay (int16 c) {
+
int16 i = 0;
+
for (i; i<=c; i++) {
+
}
+
}
+
 
+
== Ejemplos IIC ==
+
=== Acelerometro ===
+
 
+
[[Articulo de ejemplo DEMOQE128]]
+
  
 
'''Formato:'''
 
'''Formato:'''
'''Estudiante : Artículo aprobado'''
+
'''Estudiante (Nombre Usuario): Lista de artículos(Link Articulo1, Link Articulo2, Etc)'''
 
+
 
+
 
+
  
 +
Ejemplo:
  
  
  
[[Categoría: EC2783 - Lab. Arquitectura del Computador - Ing. Telecom.]]
+
# Artículo 1:  [[IIC_EC2783_Abril-Julio2016]]
 +
# Artículo 2:  [[C%C3%B3digo_Aceler%C3%B3metro_para_Codewarrior_10.6]]
 +
# Artículo 3:  [[Código_Acelerometro_Rutinas_de_Interrupción]]
 +
# Artículo 4:  [[Ejemplos_IIC_QE128QRUG]]
 +
# Artículo 5:  [[Configuración del Acelerómetro para Orientación]]
 +
# Artículo 6:  [[Registros IIC]]
 +
# Artículo 7:  [[Introducción IIC y sus interrupciones]]

Revisión actual del 12:27 6 jul 2016

En esta sección se encuentran los artículos creados por los grupos del curso EC2783 Abril-Julio 2016. En los cuales se trabaja en el módulo DEMOQE128.

Por favor leer sobre las normas de edición:

Sobre la redacción

Sobre los artículos

Sobre la corrección y discusión de artículos

Lista de Artículos

Cada artículo debe estar debidamente clasificado en una o varias categorías.

Formato: Estudiante (Nombre Usuario): Lista de artículos(Link Articulo1, Link Articulo2, Etc)

Ejemplo:


  1. Artículo 1: IIC_EC2783_Abril-Julio2016
  2. Artículo 2: Código_Acelerómetro_para_Codewarrior_10.6
  3. Artículo 3: Código_Acelerometro_Rutinas_de_Interrupción
  4. Artículo 4: Ejemplos_IIC_QE128QRUG
  5. Artículo 5: Configuración del Acelerómetro para Orientación
  6. Artículo 6: Registros IIC
  7. Artículo 7: Introducción IIC y sus interrupciones