93
1 ESCUELA POLITÉCNICA NACIONAL ESCUELA DE FORMACIÓN TECNOLÓGICA MÓDULO DIDÁCTICO PARA EL MICROCONTROLADOR ATMEGA 8 PROYECTO PREVIO A LA OBTENCIÓN DEL TÍTULO DE TECNÓLOGO EN ELECTRÓNICA Y TELECOMUNICACIONES GORDÓN MOSQUERA CHRISTIAN ROBERTO NAGUA SANDOVAL FANNY MARGARITA DIRECTOR: Ing. ALCIVAR COSTALES Quito, Mayo 2006

ESCUELA POLITÉCNICA NACIONAL · 4.7 PRACTICA 7: COMUNICACIÓN SPI 77 4.7.1 OBJETIVO 77 4.7.2 DESARROLLO 77 CONCLUSIONES Y RECOMENDACIONES 78 REFERENCIAS BIBLIOGRÁFICAS 79 ANEXOS

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

  • 1

    ESCUELA POLITÉCNICA

    NACIONAL

    ESCUELA DE FORMACIÓN TECNOLÓGICA

    MÓDULO DIDÁCTICO PARA EL MICROCONTROLADOR

    ATMEGA 8

    PROYECTO PREVIO A LA OBTENCIÓN DEL TÍTULO DE TECNÓL OGO

    EN ELECTRÓNICA Y TELECOMUNICACIONES

    GORDÓN MOSQUERA CHRISTIAN ROBERTO

    NAGUA SANDOVAL FANNY MARGARITA

    DIRECTOR: Ing. ALCIVAR COSTALES

    Quito, Mayo 2006

  • 2

    DECLARACIÓN Nosotros, Gordón Mosquera Christian Roberto y Nagua Sandoval Fanny Margarita,

    declaramos que el trabajo aquí descrito es de nuestra autoría; que no ha sido previamente

    presentada para ningún grado o calificación profesional; y, que hemos consultado las

    referencias bibliográficas que se incluyen en este documento.

    La Escuela Politécnica Nacional, puede hacer uso de los derechos correspondientes a este

    trabajo, según lo establecido por la Ley de Propiedad Intelectual, por su Reglamento y por

    la normatividad institucional vigente.

    CHRISTIAN GORDON MARGARITA NAGUA

  • 3

    CERTIFICACIÓN Certifico que los señores Christian Roberto Gordón Mosquera y Fanny Margarita Nagua

    Sandoval, han culminado con su Proyecto de Titulación.

    Ing. Alcívar Costales

    DIRECTOR DE PROYECTO

  • 4

    AGRADECIMIENTO

    Al culminar el presente trabajo, quiero

    expresar mi agradecimiento sincero a mis

    padres por darme la vida y la posibilidad de

    adquirir una Carrera, gracias por su

    abnegada labor.

    Y otro agradecimiento a mis maestros que me

    impartieron sus conocimientos a lo largo de

    toda mi vida estudiantil y de manera especial

    al Ing. Alcívar Costales por sus sabios

    consejos para guiar el presente trabajo.

    CHRISTIAN

  • 5

    DEDICATORIA

    El presente trabajo se lo dedico con mucho

    cariño a mi Madre y de manera muy especial

    a mi amado hijo JAVIER, porque ustedes son

    las estrellas que guían mi camino.

    Que dios les bendiga y les tenga muchos años

    a mí lado.

    CHRISTIAN

  • 6

    AGRADECIMIENTO Al Ing. Alcívar Costales, por apoyarnos constantemente en la realización de éste proyecto, ya que es un tema importante para el aprendizaje de los estudiantes de años inferiores. A mis amigos más cercanos, por su apoyo incondicional durante estos años de estudio.

    MARGARITA

  • 7

    DEDICATORIA A mi hijo por ser el ser mas especial en mi vida, por todo éste tiempo que ha estado a mi lado dándome su cariño y amor. A mi madre y hermanos por su apoyo, esfuerzo y comprensión en los momentos difíciles de mi vida. A mis abuelitos por su cariño y amor.

    MARGARITA

  • 8

    CONTENIDO

    INTRODUCCIÓN 11

    CAPÍTULO 1.- EL MICROCONTROLADOR ATMEGA 8

    1.1 CARACTERÍSTICAS DEL ATMEGA 8 13

    1.2 DESCRIPCIÓN DE PINES 15

    1.3 ARQUITECTURA DEL ATMEGA 8 20

    1.4 REGISTROS DE PROPÓSITO GENERAL 23

    1.5 UNIDAD ARITMÉTICA LÓGICA 24

    1.6 FLASH PROGRAMABLE 25

    1.7 MEMORIA DE DATOS SRAM 25

    1.8 MEMORIA DE DATOS EEPROM 26

    1.9 REGISTRO DE ESTADO 26

    1.10 STACK POINTER 28

    1.11 MANEJO DEL RESET Y DE LAS INSTRUCCIONES 29

    CAPÍTULO 2.- COMUNICACIÓN SERIAL DEL ATMEGA 8

    2.1 INTRODUCCIÓN 32

    2.2 TIPOS DE COMUNICACIONES SERIALES 32

    2.2.1 COMUNICACIÓN SERIAL RS-232 34

    2.2.1.1 EL CIRCUITO MAX 232 35

    2.2.2 EL BUS I2C 36

    2.2.2.1 CONCEPTO DEL BUS I2C 37

    2.2.2.2 TRANSFERENCIA DE BIT 37

    2.2.2.3 TRANSFERENCIA DE DATOS 39

    2.2.2.4 DEFINICIONES BÁSICAS DEL BUS I2C 41

    2.2.2.5 FORMATOS DE DIRECCIÓN 45

    2.2.3 INTERFAZ PERIFÉRICA SERIAL (SPI) 46

    2.2.3.1 INTRODUCCIÓN 46

    2.2.3.2 DESCRIPCIÓN FUNCIONAL 47

  • 9

    2.2.3.3 FORMATO DE TRANSFERENCIA DEL SPI 47

    2.2.3.4 CONTROLES DE FASE DE RELOJ Y POLARIDAD 48

    2.2.3.5 SEÑALES DEL SISTEMA SPI 48

    2.2.3.6 ERRORES DEL SISTEMA SPI 50

    2.2.3.7 REGISTRO DEL SISTEMA SPI 51

    CAPÍTULO 3.- MÓDULO DE PRÁCTICAS Y FUNDAMENTOS BÁSI COS DEL SOFTWARE 3.1 MÓDULO DE PRÁCTICAS 55

    3.2 CARACTERÍSTICAS DEL MÓDULO 55

    3.2.1 PROGRAMADOR ISP 55

    3.2.2 FUENTE DE ALIMENTACIÓN 56

    3.2.3 LCD ALFANUMÉRICO ESTÁNDAR 57

    3.2.4 TECLADO MATRICIAL DE 4*4 58

    3.2.5 RESET 59

    3.2.6 REAL TIME 59

    3.3 FUNDAMENTOS BÁSICOS DEL SOFTWARE BASCOM 60

    3.3.1 REVISIÓN DE LA SINTAXIS 62

    3.3.2 REVISIÓN DEL PROGRAMA 63

    3.3.3 INFORME DE RESULTADOS 64

    3.3.4 SIMULADOR 65

    3.3.5 PROGRAMADOR 67

    3.3.6 EMULADOR DEL TERMINAL RS-232 68

    CAPÍTULO 4.- PRUEBAS Y RESULTADOS 4.1 PRÁCTICA 1: ENCENDIDO SECUENCIAL DE LOS LEDS EN UN PUERTO

    DEL MICROCONTROLADOR

    4.1.1 OBJETIVO 70

    4.1.2 DESARROLLO 70

    4.2 PRÁCTICA 2: MANEJO DE TEMPORIZADORES 72

    4.2.1 OBJETIVO 72

    4.2.2 DESARROLLO 72

  • 10

    4.3 PRÁCTICA 3: MANEJO DEL LCD 73

    4.3.1 OBJETIVO 73

    4.3.2 DESARROLLO 73

    4.4 PRÁCTICA 4: ADQUISICIÓN DE DATOS 74

    4.4.1 OBJETIVO 74

    4.4.2 DESARROLLO 74

    4.5 PRÁCTICA 5: COMUNICACIÓN SERIAL RS-232 75

    4.5.1 OBJETIVO 75

    4.5.2 DESARROLLO 75

    4.6 PRÁCTICA 6: COMUNICACIÓN I2C 76

    4.6.1 OBJETIVO 76

    4.6.2 DESARROLLO 76

    4.7 PRACTICA 7: COMUNICACIÓN SPI 77

    4.7.1 OBJETIVO 77

    4.7.2 DESARROLLO 77

    CONCLUSIONES Y RECOMENDACIONES 78

    REFERENCIAS BIBLIOGRÁFICAS 79

    ANEXOS 80

  • 11

    INTRODUCCIÓN

    El aprendizaje de los microcontroladores se ha basado en el conocimiento y

    estudio del 8031 y el 8051. Estos dispositivos son una herramienta importante

    para que el estudiante comience a conocer las posibilidades que ofrecen para

    desarrollar diferentes proyectos, pero se debe tomar en cuenta que los

    microcontroladores, que son tema de estudio a lo largo de la carrera, no

    presentan las facilidades y ventajas que hoy en día se puede encontrar en el

    mercado.

    El desarrollo tecnológico del presente siglo permite tener acceso a nuevas

    tecnologías, como es el caso de los microcontroladores de tipo RISC,

    especialmente los de la casa Atmel, que permiten tener múltiples opciones de

    trabajo al tener incorporados dentro de los mismos, diversos periféricos como

    conversores analógico-digitales, sistemas PWM (Modulación por ancho de pulso),

    comunicaciones I2C, SPI, RXTX ( transmisión serial).

    A esta familia pertenece el microcontrolador ATMEGA 8, con el que se desarrolla

    el proyecto de diseñar y construir un Módulo Didáctico para verificar el correcto

    funcionamiento del microcontrolador, a la vez que se diseñará un conjunto de

    prácticas para que el estudiante se familiarice y aprenda a usar estos

    microcontroladores AVR e implementar los distintos programas aplicables al

    Módulo Didáctico utilizando el software BASCOM.

    El uso del software BASCOM permite diseñar con mayor facilidad la aplicación

    directa sobre periféricos, lo cual transforma a este módulo en un sistema tipo

    microcomputadora, el lenguaje similar al BASIC permite que el estudiante

    aprenda a manejar tanto el microcontrolador ATMEGA como los periféricos

    externos en forma rápida, amena y completa.

    Este Módulo no sustituirá una clase normal con un instructor, sino que este servirá

    como apoyo práctico a la teoría dictada en clases; se debe aclarar que este

  • 12

    sistema, luego de una introducción teórica en clase, podría ser utilizado como

    módulo de desarrollo de proyectos, en el que el alumno desarrolla aplicaciones.

    El sistema constará de un módulo en el que se tendrán los dispositivos

    electrónicos necesarios (Lcd, teclado, leds, potenciómetros, interfaz serial, interfaz

    paralela, pulsadores, etc.) para la realización de las prácticas, así como también

    el grabador del microcontrolador con su respectiva interfaz; con lo cual se facilita

    al alumno el desarrollo y ejecución de proyectos.

    Para la programación del microcontrolador se utilizará el software BASCOM AVR,

    éste permite una programación en lenguaje simple para el alumno. Además este

    software presenta varias ventanas para simulación, con lo cual el alumno puede

    efectuar una revisión del programa previo a la grabación del mismo en el

    microcontrolador.

    En las prácticas desarrolladas en este proyecto, se pondrá especial énfasis en el

    perfeccionamiento del manejo del software por parte del alumno; para que el

    mismo se encuentre en la capacidad de desarrollar proyectos, con la explotación

    al máximo de las herramientas y ejemplos que presenta el software.

  • 13

    CAPÍTULO 1

    EL MICROCONTROLADOR ATMEGA 8

    1.1 CARACTERÍSTICAS DEL ATMEGA 8

    El Atmega 8 es un microcontrolador de la familia Atmel, contiene una arquitectura

    tipo RISC, sus instrucciones se ejecutan en solo un ciclo de máquina, su

    estructura elimina la necesidad de usar componentes externos ya que

    internamente tiene: osciladores, USART, SPI, resistencias pull-up, modulación por

    anchura de pulso (PWM), convertidor ADC, comparador analógico y cronómetros,

    éstas son solo algunas de las características que se encuentran en este

    dispositivo. Su programación es posible realizarla en Lenguaje C, assembly o

    Basic. Todo su sistema está depositado en una sola pastilla.

    “El Atmega 8 tiene las siguientes características:

    • Utiliza arquitectura RISC

    • 130 instrucciones, las más simples se ejecutan en un solo ciclo de reloj

    • 8 Kbytes de Memoria Flash

    - ISP: Programable en sistema.

    - Capacidad Read-While-Write, (Lee mientras escribe). Duración: 1.000

    ciclos de escritura/borrado.

    • 512 bytes de memoria EEPROM.

    - Duración: 100.000 ciclos de escritura/lectura

    • 1 Kbyte de memoria SRAM

    • Seguro programable para la seguridad del software

    • 32 x 8 registros de trabajo de propósito general

    • 23 líneas de entrada/salida de propósito general.

    • USART (Universal Synchronous Asynchronous Receiver Transmitter)

    programable.

    • Reloj en tiempo real

    • Interfaz serial SPI

    • Vcc: 4.5 – 5.5 V

    • Frecuencia de funcionamiento 0 – 16 MHz.

  • 14

    • 3 timer/counter.

    • Interrupciones internas y externas.

    • Interfaz serial 2-wire.

    • 6 canales ADC, donde 4 tienen 10 bits de exactitud, y 2 tienen 8 bits de

    exactitud.

    • 1 Timer Watchdog programable con oscilador interno.

    • 5 modos de ahorro de energía, seleccionado por software”.1

    - “El modo Idle (ocioso) detiene la CPU, mientras permite que la memoria

    SRAM, los timer/counters, el puerto SPI, e interrupciones del sistema

    continúen funcionando.

    - Modo Power-down (baja energía), guarda el contenido del registro, pero

    congela el oscilador, inhabilitando el resto de funciones del chip hasta la

    siguiente interrupción o hasta que se realice un reset del hardware.

    - En el Power save (modo economizador), el contador de tiempo asincrónico

    continúa funcionando, permitiendo al usuario mantener una base de

    tiempo, mientras el resto de dispositivos continúa en reposo.

    - En el modo de reducción del nivel de ruidos ADC, detiene la CPU y todos

    los módulos de entrada y salida excepto el contador asincrónico y el

    Conversor Análogo-Digital (ADC), para reducir al mínimo el ruido de

    conmutación durante la conversión ADC.

    - En standby (modo de espera) el oscilador cristal/resonator sigue

    funcionando, mientras el resto de dispositivos sigue en reposo. Esto

    permite el reinicio muy rápido combinado con el consumo bajo de

    energía.”2

    El microcontrolador AVR tiene y combina un amplio sistema de instrucciones, con

    32 registros de propósito general. Las operaciones de la ALU entre registros son

    ejecutadas en el archivo de registro. Las operaciones son divididas en tres

    categorías: aritméticas, lógicas y funciones de bit. La arquitectura que resulta es

    1 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 1 2 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 30-31

  • 15

    más eficiente, y alcanza rendimientos de procesamiento de hasta diez veces más

    rápido que los microcontroladores con tecnología CISC.

    La Memoria Flash ISP (Programable en sistema) permite que la memoria de

    programa del chip sea reprogramada en el propio sistema a través de la interfaz

    SPI o mediante un programador de memoria convencional. Combinando una

    tecnología RISC de 8 bits con un CPU con memoria Flash, el Atmega 8 resulta un

    poderoso microcontrolador que proporciona una alta flexibilidad en los diseños, a

    bajo costo aportando una solución muy efectiva para la mayoría de las

    aplicaciones de control.

    El Atmega 8 está apoyado por un completo juego de programas y sistemas de

    desarrollo, incluyendo: compiladores, ensambladores, simuladores, emuladores

    en circuito, y kits de evaluación.

    1.2 DESCRIPCIÓN DE PINES

    (RESET) PC6 1 28 PC5 (ADC5/SCL)

    (RXD) PD0 2 27 PC4 (ADC4/SDA) (TXD) PD1 3 26 PC3 (ADC3) (INT0) PD2 4 25 PC2 (ADC2) (INT1) PD3 5 24 PC1 (ADC1) (XCK/T0) PD4 6 23 PC0 (ADC0) VCC 7 22 AGND GND 8 21 AREF (XTAL1/TOSC1) PB6 9 20 AVCC (XTAL2/TOSC2) PB7 10 19 PB5 (SCK) (T1) PD5 11 18 PB4 (MISO) (AIN0) PD6 12 17 PB3 (MOSI/OC2) (AIN1) PD7 13 16 PB2 (SS/OC1B) (ICP) PB0 14 15 PB1 (OC1A)

    FIGURA 1.1 ESQUEMA DE PINES DEL ATMEGA 8

    “Vcc

    Fuente de voltaje digital

    GND

    Tierra de la fuente de voltaje digital

  • 16

    RESET

    Entrada de RESET. Se genera un reset aplicando un nivel bajo de voltaje en este

    pin por un periodo de tiempo más largo que un ciclo de máquina, incluso si el reloj

    no está funcionando. Pulsos más cortos no generan un estado de reset.

    XTAL 1

    Entrada al amplificador inversor del oscilador y entrada al circuito de operación

    interno del reloj.

    XTAL2

    Salida del amplificador inversor del oscilador

    AVCC

    Este es un pin de fuente de voltaje para el Puerto A y sus ADCs (Conversores

    Analógico-Digitales). Si sus ADCs no son utilizados, este pin debe ser conectado

    a Vcc. Si sus ADCs sí son utilizados, este pin debe ser conectado a Vcc pero

    mediante un filtro pasa-bajos.

    AGND

    Tierra analógica. Si el tablero presenta diferentes tierras, se debe conectarlas a

    este pin. En otro caso se conecta a GND

    AREF

    Este es el pin de referencia analógica para los ADC”.3

    Puerto B / XTAL 1 / XTAL 2 / TOSC 1 / TOSC 2

    “El puerto B es un puerto de entrada/salida bi-direccional de 8 bits, con

    resistencias internas de pull-up. Como salidas, los pines del puerto B tienen

    limitada la corriente de salida, si las resistencias pull-up están activadas. Los

    pines del puerto B tienen tres estados cuando la condición de reset llega a

    activarse, incluso si el reloj no está funcionando”.4

    3 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 4-5 4 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 4.

  • 17

    Dependiendo de la configuración de las opciones de reloj, el pin PB6 puede ser

    usado como entrada al amplificador inversor del oscilador y entrada al circuito de

    operación interno del reloj.

    Dependiendo de la configuración de las opciones de reloj, el pin PB7 puede ser

    usado como salida del amplificador inversor del oscilador

    Los pines del puerto B tienen también algunas funciones especiales, que se las

    resume en el siguiente cuadro.

    PIN DEL PUERTO B

    FUNCIÓN ALTERNA

    PB7

    XTAL2 (Chip Clock Oscillator pin 2)

    TOSC2 (Timer Oscillator pin 2)

    PB6

    XTAL1 (Chip Clock Oscillator pin 1 or External clock input)

    TOSC1 (Timer Oscillator pin 1)

    PB5

    SCK (SPI Bus Master clock Input)

    PB4

    MISO (SPI Bus Master Input/Slave Output)

    PB3

    MOSI (SPI Bus Master Output/Slave Input)

    OC2 (Timer/Counter2 Output Compare Match Output)

    PB2

    SS (SPI Bus Master Slave select)

    OC1B (Timer/Counter1 Output Compare Match B Output)

    PB1

    OC1A (Timer/Counter1 Output Compare Match A Output)

    PB0

    ICP (Timer/Counter1 Input Capture Input)

    CUADRO 1.1 DESCRIPCIÓN DE PINES DEL PUERTO B

    Pórtico C / RESET

    “El puerto C es un puerto de entrada/salida bi-direccional de 8 bits, con

    resistencias internas de pull-up. Como salidas, los pines del puerto C tienen

    limitada la corriente de salida, si las resistencias pull-up están activadas.

  • 18

    Los pines del puerto C tienen tres estados cuando la condición de reset llega a

    activarse, incluso si el reloj no está funcionando”.5

    PC6 es usado como entrada de Reset. Un nivel bajo de voltaje en este pin por un

    periodo de tiempo aproximado de 1.5 µs generará un reset, incluso si el reloj no

    está funcionando. Pulsos más cortos no generan un estado de reset.

    Los pines del puerto C tienen también algunas funciones especiales, que se las

    resume en el siguiente cuadro.

    PIN DEL PUERTO C

    FUNCIÓN ALTERNA

    PC6

    RESET (Reset pin)

    PC5

    ADC5 (ADC Input Channel 5)

    SCL (2-wire Serial Bus Clock Line)

    PC4

    ADC4 (ADC Input Channel 4)

    SDA (2-wire Serial Bus Data Input/Output Line)

    PC3

    ADC3 (ADC Input Channel 3)

    PC2

    ADC2 (ADC Input Channel 2)

    PC1

    ADC1 (ADC Input Channel 1)

    PC0

    ADC0 (ADC Input Channel 0)

    CUADRO 1.2 DESCRIPCIÓN DE PINES DEL PUERTO C

    Puerto D

    “El puerto D es un puerto de entrada/salida bi-direccional de 8 bits, con

    resistencias internas de pull-up. Como salidas, los pines del puerto D tienen

    limitada la corriente de salida, si las resistencias pull-up están activadas. Los

    pines del puerto D tienen tres estados cuando la condición de reset llega a

    activarse, incluso si el reloj no está funcionando”.6

    5 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 5. 6 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 5.

  • 19

    Los pines del puerto D tienen también algunas funciones especiales, que se los

    resume en el siguiente cuadro.

    PIN DEL PUERTO D

    FUNCIÓN ALTERNA

    PD7

    AIN1 (Analog Comparator Negative Input)

    PD6

    AINO (Analog Comparator Positive Input)

    PD5

    T1 (Timer/Counter 1 External Counter Input)

    PD4

    XCK (USART External Clock Input/Output)

    T0 (Timer/Counter 0 External Counter Input

    PD3

    INT1 (External Interrupt 1 Input)

    PD2

    INT0 (External Interrupt 0 Input)

    PD1

    TXD (USART Output Pin)

    PD0

    RXD (USART Input Pin)

    CUADRO 1.3 DESCRIPCIÓN DE PINES DEL PUERTO D

  • 20

    1.3 ARQUITECTURA DEL ATMEGA 8

    FIGURA 1.2 ARQUITECTURA DEL ATMEGA 8

    El rápido acceso a los registros, se basa en el concepto de que los 32 registros de

    8 bits, son accesados en un solo ciclo de reloj. Lo cual significa que, durante un

    ciclo de reloj es ejecutada una operación en la Unidad Aritmética Lógica (ALU).

    Dos operandos son tomados del archivo de registros, las operaciones son

    ejecutadas y el resultado es colocado en el mismo archivo, todo en un ciclo de

    reloj.

    Flash Program Memory

    Instruction Register

    Program Counter

    32 x 8 General Purpose

    Registrers

    Data SRAM

    Status and Control

    Interrupt Unit

    SPI Unit

    Watchdog Timer

    Analog Comparator

    i/O Module 1

    i/O Module 2

    i/O Module n

    EEPROM

    I/O Lines

    Instruction Decoder

  • 21

    “Seis de los 32 registros de trabajo pueden usarse como 3 registros de 16 bits que

    sirven como punteros de direccionamiento indirecto para direccionar el espacio de

    datos, lo cual permite un eficiente cálculo de direcciones. Estos registros con

    funciones especiales son el registro X, el Y y el Z, todos de 16 bits y ocupan las

    direcciones de memoria: 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F respectivamente”.7

    La ALU soporta operaciones aritméticas y lógicas entre registros o entre un

    registro y una constante. Las operaciones simples con registros son también

    ejecutadas por la ALU. Después de una operación aritmética el registro de estado

    se carga con la información del resultado de la operación.

    Los registros de trabajo están colocados en las 32 primeras posiciones de la

    memoria de datos ($00 - $1F), permitiendo que su acceso sea como si fueran

    lugares de memoria convencionales.

    El espacio de memoria contiene 64 direcciones para las funciones propias de la

    CPU como son los registros de Control, SPI, los Contadores/Timer, conversores

    A/D, y otras funciones. Estos registros están colocados a continuación de los de

    trabajo, de la dirección 0x20 a la 0x5F.

    Para maximizar el funcionamiento, el AVR utiliza la arquitectura Harvard con

    memorias y buses separados para el programa y para los datos. Mientras que se

    está ejecutando una instrucción, la siguiente instrucción es buscada por la

    memoria del programa. Este concepto permite que las instrucciones sean

    ejecutadas en cada ciclo de reloj. La memoria del programa es una memoria

    flash re-programable en sistema (ISP).

    Con las instrucciones de salto incondicional y con la de llamada, se puede

    acceder directamente a toda la memoria. La mayoría de las instrucciones AVR

    tienen una longitud de 16 bits. Cada dirección de la memoria de programa

    contiene una instrucción de 16 ó de 32 bits.

    7 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 7.

  • 22

    Durante las interrupciones y las llamadas a subrutinas, el contador de programa

    (PC) guarda las direcciones anteriores en el stack. El stack se encuentra alojado

    en los datos generales de la SRAM, y consecuentemente, el tamaño del mismo es

    únicamente limitado por el tamaño total de la SRAM y de su uso. Todos los

    programas del usuario deben inicializar el SP (Stack Pointer) en la rutina de reset

    (antes de ejecutar subrutinas o interrupciones). El stack pointer (SP) de 10 bits es

    seleccionado para lectura/escritura en el espacio de entrada/salida.

    El 1 Kbyte de datos de SRAM pueden ser fácilmente accesados mediante los

    cinco modos diferentes de direccionamiento que soporta la arquitectura AVR. Los

    espacios de memoria, en la arquitectura del AVR, son todos lineales y regulares.

    Un módulo flexible de interrupción, tiene sus registros de control en el espacio de

    entrada/salida con un bit de habilitación de interrupción global en el registro de

    estado. Todas las diferentes interrupciones tienen un vector separado de

    interrupción en la tabla de vectores de interrupción al inicio de la memoria de

    programa. Las diferentes interrupciones tienen prioridad en concordancia con la

    posición del vector de interrupción. El vector de dirección más bajo es el que tiene

    la más alta prioridad.

  • 23

    1.4 REGISTROS DE PROPÓSITO GENERAL

    La figura 1.3 muestra la estructura de los 32 registros de trabajo de propósito

    general presentes en el Atmega 8.

    7 0 Dirección R0 0x00 R1 0x01 R2 0x02 … R13 0x0D R14 0x0E

    REGISTROS R15 0x0F DE R16 0x10

    PROPOSITO R17 0x11 GENERAL …

    R26 0x1A Registro X byte bajo R27 0x1B Registro X byte alto R28 0x1C Registro Y byte bajo R29 0x1D Registro Y byte alto R30 0x1E Registro Z byte bajo R31 0x1F Registro Z byte alto

    FIGURA 1.3 ESTRUCTURA DE LOS REGISTROS DE PROPÓSITO GENERAL

    La mayoría de las instrucciones que funcionan en el archivo de registros tienen

    acceso directo a todos los registros, y la mayoría de ellos son instrucciones de un

    solo ciclo de máquina ciclo.

    Cada registro es asignado a una dirección de memoria de datos, dirigiéndolos

    directamente dentro de las 32 primeras localidades del espacio de Datos del

    usuario, aunque no sea físicamente implementada como localidad SRAM, esta

    organización de memoria permite gran flexibilidad en el acceso a los registros,

    puesto que los registros X, Y y Z pueden ser seteados para indexar cualquier

    registro del archivo.

  • 24

    Registro X, registro Y y registro Z.- Los registros R26….R31 poseen algunas

    funciones adicionales. Estos registros son punteros de dirección para el

    direccionamiento indirecto del Espacio de Datos. Estos registros se encuentran

    definidos como se muestra en la figura 1.4

    15 XH XL 0

    Registro X 7 0 7 0 R27 (0x1B) R26 (0x1A) 15 YH YL 0

    Registro Y 7 0 7 0 R29 (0x1D) R28 (0x1C) 15 ZH ZL 0

    Registro Z 7 0 7 0 R31 (0x1F) R30 (0x1E)

    FIGURA 1.4 REGISTROS X, Y y Z

    En los diferentes modos de direccionamiento, estos registros de dirección tienen

    funciones como realizar los desplazamientos, incrementos automáticos y

    decrementos automáticos.

    1.5 UNIDAD ARITMÉTICA-LÓGICA (ALU)

    “La ALU de alto rendimiento trabaja en conexión directa con todos los 32

    registros de trabajo de propósito general. Las operaciones aritméticas entre los

    registros de propósito general o entre un registro y un dato inmediato se ejecutan

    dentro de un solo ciclo de reloj. Las operaciones de la ALU se dividen en tres

    categorías principales - aritmética, lógico, y bit-funciones. Algunas

    implementaciones de la arquitectura también proporcionan un poderoso

    multiplicador que soporta multiplicaciones con signo, sin signo y formato

    fraccionario”. 8

    8 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 7.

  • 25

    1.6 FLASH PROGRAMABLE

    El Atmega 8 contiene 8 Kbytes de memoria. Como todas las instrucciones son de

    16 o 32 bit, la memoria flash está organizada como 4 x 16. La memoria flash tiene

    una durabilidad de 1000 ciclos de escritura/borrado. El contador de programa

    (PC) es de 12 bits, con lo que tenemos 4096 direcciones de la memoria de

    programa.

    1.7 MEMORIA DE DATOS SRAM

    Registers File Data Address Space R0 $0000

    R1 $0001

    R2 $0002

    ….

    R29 $001D

    R30 $001E

    R31 $001F

    I/O Registers $00 $0020

    $01 $0021

    $02 $0022

    ….

    $3D $005D

    $3E $005E

    $3F $005F

    Internal SRAM $0060

    $0061

    $045E

    $045F

    FIGURA 1.5 MEMORIA DE DATOS SRAM

  • 26

    La figura 1.5 muestra como está organizada la memoria SRAM. “Las 1120

    posiciones de memoria más bajas contienen los registros de propósito general,

    los registros de entrada/salida, y los datos internos SRAM. Las primeras 96

    localizaciones contienen los registros de propósito general y los registros de

    entrada/salida, y las 1024 localizaciones siguientes contienen los datos internos

    SRAM”.9

    Los cinco diferentes modos de direccionamiento de memoria son: Directo,

    Indirecto con desplazamiento, Indirecto, Indirecto con pre-decremento, e Indirecto

    con post-incremento.

    El direccionamiento directo alcanza todo el espacio de datos. El modo indirecto

    con desplazamiento alcanza 63 direcciones de localidad, de la base de

    direcciones dadas por el registro Y o Z. Cuando se usa el modo de

    direccionamiento indirecto con pre-decremento y post incremento automático, las

    direcciones de los registros X, Y y Z son decrementadas e incrementadas. Los 32

    registros de trabajo, los 23 registros I/O y el 1 Kbyte de datos internos de SRAM

    en el Atmega 8 son todos accesibles mediante estos modos de direccionamiento

    1.8 MEMORIA DE DATOS EEPROM

    El Atmega 8 contiene 512 bytes de memoria de datos EEPROM. La misma es

    organizada como espacios de datos separados. La EEPROM tiene una duración

    de aproximadamente 100.000 ciclos de lectura/escritura.

    1.9 REGISTRO DE ESTADO

    El registro de estado contiene la información sobre el resultado de la última

    instrucción aritmética ejecutada. Esta información se puede utilizar para alterar el

    normal desarrollo del programa para realizar operaciones condicionales. El

    registro de estado es actualizado después de todas las operaciones de la ALU,

    según lo especificado en el set de instrucciones, dando por resultado un código

    9 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 15.

  • 27

    más rápido y más compacto. El registro de estado no se almacena al incorporar

    una rutina de la interrupción y no se restaura automáticamente al volver de una

    interrupción. Esto se debe dirigir por software.

    El registro de estado se denomina SREG y se encuentra en la dirección $3F. La

    descripción de los bits es la siguiente.

    Bit 7 6 5 4 3 2 1 0

    I T H S V N Z C SREG

    Read/Write R/W R/W R/W R/W R/W R/W R/W R/W

    Initial Value 0 0 0 0 0 0 0 0 FIGURA 1.6 REGISTRO DE ESTADO

    Todos los bits de este registro son de escritura o lectura. El valor inicial de este

    registro es 0x00. La descripción de los bits es la siguiente:

    Bit 7-I: Global Interrupt Enable:

    Este bit es el que permite habilitar las interrupciones cuando está a 1. El control

    individual de las interrupciones es configurado en los registros GIMSK y TIMSK.

    Si este bit está a 0 todas las interrupciones están deshabilitadas

    independientemente del estado de los registros GIMSK y TIMSK. Este bit es

    puesto a 0 por hardware en el momento en el que se produce la interrupción y es

    puesto de nuevo a uno tras la instrucción RETI que sirve para producir el retorno

    de interrupción.

    Bit 6-T: Bit Copy Storage:

    Las instrucciones para copiar bits BLD (Bit LoaD) y BST (Bit STore) utilizan el bit

    T como fuente o como destino para un bit. Un bit de un registro del archivo de

    registros puede ser guardado en el bit T mediante la instrucción BST, y un bit en T

    puede ser copiado en un bit de un registro del archivo de registros mediante la

    instrucción BLD.

    Bit 5-H: Half Carry Flag:

    Este bit indica que se ha producido un half carry en algunas operaciones

    aritméticas.

  • 28

    Bit 4-S: Sign Bit, S = S (+) V:

    El bit-S realiza una operación or exclusiva entre los bits N y el bit V del registro de

    estado.

    Bit 3-V: Two´s Complement Overflow Flag:

    Esta bandera V, soporta aritmética en complemento de 2

    Bit 2-N: Negative Flag:

    La bandera negativa N indica un resultado negativo tras realizar una operación

    aritmética o una lógica.

    Bit 1-Z: Zero Flag:

    Esta bandera indica un resultado de cero tras realizar una operación aritmética o

    una lógica.

    Bit 0-C: Carry Flag:

    Esta bandera indica un carry tras realizar una operación aritmética o una lógica.

    1.10 STACK POINTER (SP)

    “El stack pointer se utiliza principalmente para almacenar datos temporales, para

    almacenar variables locales y para guardar la dirección de retorno después de las

    interrupciones y las llamadas a las subrutinas”.10

    Bit 15 14 13 12 11 10 9 8

    SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH

    SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL

    7 6 5 4 3 2 1 0

    Read/Write R/W R/W R/W R/W R/W R/W R/W R/W

    R/W R/W R/W R/W R/W R/W R/W R/W

    Initial Value 0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    FIGURA 1.7 STACK POINTER

    10 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 10.

  • 29

    Todos los bits son de lectura y escritura y en estado inicial los 16 bits están a

    cero.

    Cuando las subrutinas y las interrupciones se producen, el Stack Pointer coloca

    los datos en una zona de la memoria SRAM. Este espacio para los datos en la

    memoria SRAM tiene que ser definido por el programa antes de que cualquier

    llamada a una subrutina o cualquier interrupción sea ejecutada. El Stack Pointer

    es decrementado en una unidad cuando un dato es colocado en el Stack

    mediante la instrucción PUSH y es decrementado en dos unidades cuando un

    dato es puesto en el Stack mediante una llamada a subrutina (CALL) o se

    produce una interrupción. El Stack Pointer es incrementado en una unidad cuando

    un dato es recuperado del Stack mediante la instrucción POP, y es incrementado

    en dos unidades cuando un dato es devuelto del Stack mediante un retorno de

    subrutina con la instrucción RET o por un retorno de una interrupción RETI.

    1.11 MANEJO DEL RESET Y DE LAS INTERRUPCIONES. El microcontrolador ATMEGA 8 posee 19 fuentes de interrupción.

    Todas las interrupciones tienen un vector de reset propio en el espacio de

    memoria del programa. Todas las interrupciones tienen asignados unos bits que

    deben ser puestos a uno conjuntamente con el bit I del registro de estado para

    que las interrupciones puedan producirse.

    Las direcciones más bajas del espacio de memoria de programa son

    automáticamente definidas para el vector de Reset y para los vectores de

    interrupción. La lista completa de vectores se muestra en la siguiente tabla. Esta

    lista también determina los niveles de prioridad de las diferentes interrupciones.

    La mayor prioridad tiene el vector de RESET y a continuación el vector INT0 y así

    sucesivamente.

  • 30

    Vector Nº

    Dirección

    Fuente

    Definición de la Interrupción

    1 0x000 RESET Cuatro fuentes de RESET(*)

    2 0x001 INT0 Interrupción Externa Requerida 0

    3 0x002 INT1 Interrupción Externa Requerida 1

    4 0x003 TIMER2 COMP Temporizador/Contador 2 Compare Match

    5 0x004 TIMER2 OVF Temporizador/Contador 2 Sobreflujo

    6 0x005 TIMER1 CAPT Temporizador/Contador 1 Evento de captura

    7 0x006 TIMER1 COMPA Temporizador/Contador 1 Compare Match A

    8 0x007 TIMER1 COMPB Temporizador/Contador 1 Compare Match B

    9 0x008 TIMER1 OVF Temporizador/Contador 1 Sobreflujo

    10 0x009 TIMER0 OVF Temporizador/Contador 0 Sobreflujo

    11 0x00A SPI, STC Transferencia Serial Completa

    12 0x00B USART, RXC Recepción Completa USART

    13 0x00C USART, UDRE Registro de datos vacío USART

    14 0x00D USART, TXC Transmisión Completa USART

    15 0x00E ADC Conversión Completa ADC

    16 0x00F EE_RDY Memoria EEPROM lista

    17 0x010 ANA_COMP Comparador Análogo

    18 0x011 TW1 Interfaz serial 2-wire

    19 0x012 SPM_RDY Almacene Memoria de Programa Lista

    CUADRO 1.4 FUENTES DE INTERRUPCIÓN DEL ATMEGA 8 (*) Reset al encendido, Reset externo, Reset por Watchdog, Reset por Brown-out

    Fuentes de reset

    Existen cuatro posibilidades para que se produzca un Reset:

    • Reset al encendido.- El microcontrolador se resetea cuando el voltaje de la

    fuente de alimentación está por debajo del nivel requerido para el

    funcionamiento.

    • Reset externo.- Cuando un nivel bajo es ingresado en el pin RESET durante

    más de dos ciclos de XTAL.

  • 31

    • Reset por Watchdog.- Si el watchdog está habilitado y su tiempo de

    temporización expira antes de producirse la instrucción WDR el

    microcontrolador se reseteará.

    • Reset por Brown-out.- El microcontrolador se resetea cuando la fuente de

    voltaje Vcc está bajo el nivel de Brown-out Reset (VBOT) y el Brown-out

    Detector está habilitado.

    Una vez producido un RESET, todos los registros del microcontrolador son

    puestos con sus valores iniciales y el programa empieza su ejecución en la

    dirección $000. En esta dirección debe colocarse una instrucción de salto RJMP

    para ejecutar la rutina de comienzo de programa. A continuación de la dirección

    $000 y hasta la dirección $00d, se encuentran los vectores para las diferentes

    interrupciones; pero si estos vectores de interrupción no son utilizados puede

    colocarse código de programa en ellos.

  • 32

    CAPÍTULO 2

    COMUNICACIÓN SERIAL DEL ATMEGA 8

    2.1 INTRODUCCIÓN

    El puerto serial de las computadoras es conocido como puerto RS-232, la ventaja

    de este puerto es que todas las computadoras traen al menos un puerto serial,

    este permite la comunicación entre otros dispositivos tales como otra

    computadora, el mouse, impresora y para nuestro caso con los

    microcontroladores.

    Existen dos formas de intercambiar información binaria: paralela y serial.

    La comunicación paralela transmite todos los bits de un dato de manera

    simultánea, por lo tanto la velocidad de transferencia es rápida, sin embargo tiene

    la desventaja de utilizar una gran cantidad de líneas, por lo tanto se vuelve más

    costoso y tiene las desventaja de atenuarse a grandes distancias, por la

    capacitancia entre conductores así como sus parámetros distribuidos.

    2.2 TIPOS DE COMUNICACIONES SERIALES:

    Existen dos tipos de comunicaciones seriales: sincrónica y asincrónica.

    En la comunicación serial sincrónica además de una línea sobre la cual se

    transmitirán los datos, se necesita de una línea la cual contendrá los pulsos de

    reloj que indicarán cuando un dato es válido.

    Ejemplos de este tipo de comunicación son:

    • I2C

    • ONE WIRE

    • SPI

  • 33

    En la comunicación serial asincrónica, no son necesarios los pulsos de reloj.

    La duración de cada bit está determinada por la velocidad con la cual se realiza la

    transferencia de datos.

    La siguiente figura muestra la estructura de una carácter que se trasmite en forma

    serial asincrónica.

    FIG. 2.1 TRANSMISIÓN SERIAL ASINCRÓNICA

    Normalmente cuando no se realiza ninguna transferencia de datos la línea del

    transmisor se encuentra en estado IDLE, esto quiere decir en estado alto.

    Para iniciar la transmisión de datos, el transmisor coloca esta línea en bajo

    durante determinado tiempo, lo cual se le conoce como bit de arranque (start bit) y

    a continuación empieza a transmitir con un intervalo de tiempo los bits

    correspondientes al dato, iniciando siempre por el bit menos significativo (LSB), y

    terminando con el bit más significativo (MSB).

    Si el receptor no está sincronizado con el transmisor, éste desconoce cuando se

    van a recibir los datos.

    Por lo tanto el transmisor y el receptor deberán tener los mismos parámetros de

    velocidad, paridad, número de bits del dato transmitido y de bit de parada.

  • 34

    En los circuitos digitales, cuyas distancias son relativamente cortas, se pueden

    manejar transmisiones en niveles lógicos TTL (0-5V), pero cuando las distancias

    aumentan estas señales tienden a distorsionarse debido al efecto capacitivo de

    los conductores y su resistencia eléctrica. El efecto se incrementa a medida que

    se incrementa la velocidad de la transmisión. Esto origina que los datos recibidos

    no sean iguales a los datos transmitidos, originándose un error en la transferencia

    de datos.

    Una de las soluciones más lógica es aumentar los márgenes de voltaje con que

    se transmiten los datos, de tal manera que las perturbaciones a causa de la línea

    se pueden corregir.

    2.2.1 LA COMUNICACIÓN SERIAL RS-232

    Ante la gran variedad de equipos, sistemas y protocolos que existen surgió la

    necesidad de un acuerdo que permitiera a los equipos de varios fabricantes

    comunicarse entre sí.

    La EIA (Electronics Industry Association) elaboró la norma RS-232, la cual

    define la interfaz mecánica, los pines, las señales y los protocolos que debe

    cumplir la comunicación serial

    Todas las normas RS-232 cumplen con los siguientes niveles de voltaje:

    • Un “1” lógico es un voltaje comprendido entre –5v y –15v en el transmisor y

    entre -3v y –25v en el receptor.

    • Un “0” lógico es un voltaje comprendido entre +5v y +15 v en el trasmisor y

    entre +3v y +25 v en el receptor.

    El envío de niveles lógicos (bits) a través de cables o líneas de transmisión

    necesita la conversión a voltajes apropiados. En los microcontroladores para

    representar un cero (0) lógico se trabaja con voltajes inferiores a 0.8v, y para un

    uno (1) lógico con voltajes mayores a 2.0V. En general cuando se trabaja con

  • 35

    familias TTL y CMOS se asume que un “cero” lógico es igual a cero voltios y un

    “uno” lógico es igual a cinco voltios.

    La importancia de conocer esta norma, radica en los niveles de voltaje que

    maneja el puerto serial del computador, ya que son diferentes a los que utilizan

    los microcontroladores y los demás circuitos integrados. Por lo tanto se necesita

    de una interfaz que haga posible la conversión de los niveles de voltaje a los

    estándares manejados por los CI TTL.

    2.2.1.1 El Circuito MAX-232

    Este circuito soluciona los problemas de niveles de voltaje cuando se requiere

    enviar unas señales digitales sobre una línea RS-232.

    FIG. 2.2 CIRCUITO MAX-232

    El chip Max-232, que se indica en la figura 2.2, se utiliza en aquellas aplicaciones

    donde no se dispone de fuentes dobles de +12 y –12 voltios. El MAX 232 necesita

    solamente una fuente de +5V para su operación, internamente tiene un elevador

    de voltaje que convierte el voltaje de +5V al de doble polaridad de +12V y –12V.

    Cabe mencionar que existen una gran variedad de CI que cumplen con la norma

    RS-232 como lo son: MAX220, DS14C232, MAX233, LT1180A.

  • 36

    2.2.2 El BUS I2C (Inter IC) “Philips Semiconductors inventó el bus de dos alambres I2C para comunicación

    entre ICs en 1980 y desde entonces se ha convertido en el bus serial estándar,

    implementado en un gran número de circuitos integrados y con licencias

    otorgadas a mas de 50 compañías con un total de 1000 dispositivos compatibles

    I2C”.

    “Originalmente especificado para 100 Kbits/s e intencionalmente para control

    simple y señales de estado; el bajo costo, la versatilidad técnica y la simplicidad

    del bus I2C aseguraron su popularidad”.

    El bus serial I2C ha sido extendido para soportar velocidades de hasta 3.4

    Mbits/s. Combinado con una función de desplazamiento del nivel de voltaje, en

    modo High-speed (Hs-mode) ofrece una solución ideal para los sistemas de

    tecnología mezclada, donde las altas velocidades y la variedad de voltajes (5V,

    3V o menor) son comúnmente usados.

    El modo Hs es compatible con todos los sistemas existentes del bus I2C,

    incluyendo el estándar original (S-mode) y el modo Fast (F-mode), actualización

    introducida en 1992, proveyendo 400Kbits/s en transferencia. Sistemas de

    diferente velocidad pueden ser mezclados fácilmente, con un dispositivo maestro

    en modo Hs especialmente desarrollado, la conexión en paralelo es usada para

    conectar las partes mas lentas del sistema. La comunicación entre dispositivos se

    puede realizar en el modo estándar y en el modo rápido si los dispositivos están

    unidos al mismo bus. El reloj determinará la velocidad de los datos. La interfaz

    I2C emplea un protocolo amplio para asegurar una transmisión y recepción de

    datos fiable.

    El bus I2C es usado en una gran variedad de microcontroladores y aplicaciones

    de telecomunicaciones como en control, diagnóstico y administración de potencia.

    La especificación mejorada (modo rápido) esta también implementada en los pics.

  • 37

    2.2.2.1 Concepto del Bus I2C El bus I2C soporta cualquier tipo de componente (NMOS, CMOS, Bipolar, etc).

    Dos hilos físicos uno de datos (SDA) y otro de reloj (SCL) transportan la

    información entre los diversos dispositivos conectados al bus.

    Los dispositivos conectados al bus deben ser de COLECTOR ABIERTO o

    DRENAJE ABIERTO (“en paralelo”), así los estados de salida de las líneas SDA y

    SCL desempeñan la función de “cable en AND” del bus.

    Cada dispositivo es reconocido por una única dirección (si es un microcontrolador,

    LCD, memoria o teclado) y puede operar cualquiera como transmisor o emisor de

    datos, dependiendo de la función del dispositivo. Un display es solo un receptor

    de datos mientras que una memoria recibe y transmite datos. En función de que

    envía o reciba datos se debe considerar los dispositivos como Maestros (Master)

    o esclavos (Slaves).

    FIG. 2.3 CONECCION DE DISPOSITIVOS EN EL BUS I2C

    La única limitación en la conexión de dispositivos al bus depende de la capacidad

    máxima que no puede superar los 400 pF. Los tipos de transferencia de datos en

    el bus son:

    Modo Estándar aproximadamente a 100 KBits/s

    Modo Rápido aproximadamente a 400 KBits/s

    Modo Alta velocidad más de 3.4 Mbits/s.

    MICRO

    LCD ADC MICRO

    Resistencias de PULL-UP

  • 38

    La interfaz I2C emplea un protocolo amplio para asegurar una transmisión y

    recepción de datos fiables.

    Tanto la línea de DATOS como la señal de Reloj SCL son bidireccionales

    conectadas a una fuente de tensión positiva vía suministro común o resistencias

    de carga “pull-up”.

    FIG. 2.4 CONECCION DE LA LINEA DE DATOS Y RELOJ DEL BUS I2C

    2.2.2.2 Transferencia de bit: Un pulso de reloj se genera por cada bit de datos transferidos. Los bits de datos

    transferidos en la línea SDA deben ser estables cuando la línea SCL está a nivel

    “1”. El estado de la línea SDA en “1” ó “0” solo puede cambiar cuando en la línea

    SCL la señal es “0”.

    Dentro del proceso de transferencia de Datos, hay dos situaciones básicas que son:

  • 39

    INICIO (START): Una transición de “1” a “0” (caída) en la línea de datos SDA

    mientras la línea de reloj SCL está a “1”. Sucede cuando un dispositivo maestro

    hace ocupación del bus, generando esta condición.

    PARADA (STOP): Una transición de “0” a “1” (ascenso) en la línea de datos SDA

    mientras la línea de reloj SCL esta a “1”. Un dispositivo maestro puede generar

    esta condición dejando libre el bus.

    Las condiciones de INICIO y STOP son siempre generadas por el master.

    El bus I2C se considera ocupado después de la condición de inicio. El bus se

    considera libre de nuevo después de un cierto tiempo tras la condición de Stop.

    Es decir, al pulso “1” de la línea SCL le puede corresponder un pulso “0” ó “1” de

    la línea SDA en función de la información que se envíe, recordemos que a cada

    bit de SDA le corresponde un bit de SCL, pero nunca, salvo en la condición de

    Inicio a un bit de SCL le corresponde una situación de “1” a “0” o sea pasa por dos

    estados la línea SDA, al revés ocurre en la condición de Stop que el master envía

    un bit a la línea SCL mientras cambia en la SDA de “0” a “1” durante el tiempo

    que esta enviando la señal de “1” a SCL.

    2.2.2.3 Transferencia de Datos:

    FIG. 2.5 TRANSFERENCIA DE DATOS

  • 40

    El número de bytes que se envíen a la línea SDA no tiene restricción. Cada byte

    debe ir seguido por un bit de reconocimiento ACK, el cual es generado por el

    master y es obligatorio en la transferencia de datos. El byte de datos se transfiere

    empezando por el bit de más peso precedido por el bit de reconocimiento (ACK).

    El transmisor desbloquea la línea SDA “1” durante el pulso de reconocimiento. El

    receptor debe poner a “0” la línea SDA durante el pulso ACK de modo que siga

    siendo “0” durante el tiempo que el master genera el pulso “1” de ACK.

    Un receptor cuando ha sido direccionado está obligado a generar un ACK

    después de que cada byte ha sido recibido. Cuando un dispositivo esclavo no

    genera el bit ACK, debe mantener la línea SDA a nivel “1” durante el bit ACK.

    entonces el master genera una condición de STOP abortando la transferencia de

    datos ó repetir la condición de INICIO.

    Si un esclavo receptor que está direccionado no desea recibir más bytes (el

    esclavo no genera el bit ACK en el primer byte que sigue), el master debe

    detectar la situación y no enviar más bytes. El esclavo pone la línea SDA a “1” lo

    que es detectado por el master el cual genera la condición de STOP ó de INICIO.

    Si un dispositivo esclavo no puede recibir o transmitir un byte de datos completo

    hasta que haya acabado uno de los trabajos que realiza, puede mantener la línea

    SCL a “0” lo que fuerza al Master a permanecer en un estado de espera. Los

    datos continúan transfiriéndose cuando el dispositivo esclavo está listo para otro

    byte de datos y desbloquea la línea de reloj SCL.

    Si un master receptor está recibiendo datos de un esclavo transmisor debe

    generar un bit ACK tras cada byte recibido del transmisor. Para finalizar la

    transferencia de datos no debe generar el último byte enviado por el esclavo. El

    esclavo transmisor debe permitir desbloquear la línea SDA generando el master la

    condición de STOP ó de INICIO.

  • 41

    Sin embargo, si un master todavía desea comunicarse con el bus, puede generar

    repetidamente condiciones de Start y direccionar a otro esclavo sin generar

    primero la condición de Stop.

    Todos los Master generan su propia señal de reloj sobre la línea SCL al transferir

    datos sobre el Bus I2C. Los bits de datos son solo válidos durante los períodos “1”

    del reloj.

    2.2.2.4 Definiciones básicas del Bus I2C:

    Maestro (Master): El dispositivo que inicia una transferencia, genera las señales

    de reloj y termina un envío de datos. Las señales de reloj de un master solo

    pueden ser alteradas cuando la línea de reloj sufre una caída por un dispositivo

    esclavo o por el dominio del control del bus por el arbitraje de otro

    microcontrolador.

    Cuando se conectan varios dispositivos maestros a un mismo bus la configuración

    obtenida se denomina "multi-maestro".

    Los master son generalmente microcontroladores, éstos pueden ser unas veces

    master y otros esclavos. Si uno o más microcontroladores se conectan al bus

    pueden iniciar el envío de datos al mismo tiempo produciendo un caos, para

    prevenir esto se ha desarrollado un sistema de arbitraje.

    Un master puede iniciar una transmisión solo si el bus está libre. Dos o más

    master pueden generar una condición de Inicio en el bus, lo que da como

    resultado una condición de inicio general. Cada master debe comprobar si el bit

    de datos que transmite junto a su pulso de reloj, coincide con el nivel lógico en la

    línea de datos SDA.

    Esclavo (Slave): Cualquier dispositivo conectado al bus incapaz de generar

    pulsos de reloj. Reciben señales de comando y de reloj provenientes del

    dispositivo maestro.

  • 42

    Sincronización: Procedimiento para sincronizar las señales del reloj de dos o

    más dispositivos.

    La sincronización del reloj se realiza mediante una conexión AND de todos los

    dispositivos del Bus a la línea SCL. Esto significa que una transición de un Master

    de “1” a “0” en la línea SCL hace que la línea pase a “0”, esto mantiene la línea

    SCL en ese estado. Sin embargo, la transición de “0” a “1” no cambia el estado de

    la línea SCL si otro reloj está todavía en su periodo de “0”.

    Por lo tanto la línea SCL permanecerá a “0” tanto como el período más largo de

    cualquier dispositivo cuyo nivel sea “0”. Los dispositivos que tienen un período

    más corto de reloj “0” entran en un período de espera.

    Cuando todos los dispositivos conectados al bus han terminado con su período

    “0”, la línea del reloj se desbloquea y pasa a nivel “1”. Por lo que hay que

    diferenciar entre los estados de reloj de los dispositivos y los estados de la línea

    SCL, y todos los dispositivos empiezan a nivel “1”. El primer dispositivo que

    completa su nivel “1” pone nuevamente la línea SCL a “0”.

    Resumiendo, la sincronización de la línea SCL se genera a través de la señal a

    “0” por el dispositivo con el más largo período de nivel a “0” y la señal a “1”por el

    dispositivo con el más corto periodo de nivel a “1”

    Arbitraje: Procedimiento que asegura que si uno o más master simultáneamente

    deciden controlar el Bus solo uno es permitido a controlarlo y el mensaje saliente

    no es deteriorado.

    El sistema de arbitraje actúa sobre la línea de datos SDA, mientras la línea SCL

    está a nivel “1”, de una manera tal que el master que transmite un nivel “1”, pierde

    el arbitraje sobre otro master que envía un nivel “0” a la línea de datos SDA. Esta

    situación continúa hasta que se detecte la condición de Stop generada por el

    master que se hizo cargo del bus.

  • 43

    Tras el arbitraje los master perdedores se deben poner inmediatamente en modo

    Master-Receptor y esclavo pues los datos que envíe el Master dominante pueden

    ser para uno de ellos. Un master que pierde el arbitraje puede generar pulsos de

    reloj hasta el fin de byte en el cual él pierde el arbitraje.

    En el momento que un master toma el control, es el único que toma las decisiones

    y genera los códigos de dirección, no existen master centrales, ni existen órdenes

    prioritarias en el bus.

    Si en una transferencia de datos, el procedimiento de arbitraje está todavía en

    proceso justo cuando se envía al bus una condición de Stop, el master afectado

    debe mandar códigos de Inicio o Stop.

    Bus Desocupado (Bus Free): Estado en el cual ambas líneas (SDA y SCL)

    están inactivas, presentando un estado lógico alto. Únicamente en este momento

    es cuando un dispositivo maestro puede comenzar a hacer uso del bus.

    Formato de Datos (Data Format): Después de la condición de Start un código de

    dirección es enviado, ésta dirección tiene 7 bits seguidos por un octavo, éste

    código corresponde a una dirección R/W (0- indica transmisión/1- indica solicitud

    de datos).

    Una transferencia de datos siempre acaba con una condición de Stop generado

    por el master, sin embargo si un master todavía desea comunicarse con el bus,

    puede generar repetidamente condiciones de Start y direccionar a otro esclavo sin

    generar primero la condición de Stop.

    Varias combinaciones de lectura y escritura son posibles dentro de una misma

    transferencia de datos.

  • 44

    Los datos transferidos tienen la forma de la figura 2.6.

    FIG. 2.6 TRANSFERENCIA DE DATOS

    Los posibles formatos de transferencia son:

    1. Master transmite al esclavo- receptor. No cambia el bit de dirección.

    2. Master lee a un esclavo inmediatamente después del primer byte.

    En el momento del primer reconocimiento el master-transmisor se convierte en un

    master-receptor y el esclavo-receptor en un esclavo-transmisor. El primer

    reconocimiento es aún generado por el esclavo. La condición de Stop es

    generada por el master, el cual ha enviado previamente un no- reconocimiento.

    3. Formato combinado: Durante un cambio de dirección dentro de una

    transferencia, la condición de Start y la dirección del esclavo son ambos

    repetidos, pero con el bit R/W invertido. Si un Master-receptor envía una

    condición repetida de Start, el esclavo previamente ha enviado un no-

    reconocimiento.

    Dirección (Address): El procedimiento de dirección para el Bus I2C es tal que, el

    primer byte después de la condición de Start usualmente determina qué esclavo

    ha sido seleccionado por el Master. La excepción se da en la “llamada general”

    (0000 0000) con la que se direcciona a todos los dispositivos, cuando esta

    dirección es usada todos los dispositivos en teoría deben responder con un

    reconocimiento (A), sin embargo algunos dispositivos pueden estar condicionados

  • 45

    a ignorar esta dirección. El segundo byte de la “llamada general” define entonces

    la acción a tomar.

    2.2.2.5 Formatos de dirección:

    Hay dos formatos de dirección:

    El más simple es el formato de 7-bit con un bit R/W que permite direccionar hasta

    128 dispositivos, que en la práctica se reduce a 112 debido a que las restantes

    direcciones son de uso reservado.

    El más complejo es el de 10-bit con un bit R/W, para éste formato dos bytes

    deben ser transmitidos con los primeros cinco bits que especifiquen una dirección

    de 10-bit.

    El direccionamiento de 10-bit, permite usar hasta 1024 direcciones adicionales

    para prevenir problemas con la localización de direcciones esclavas cuando el

    número de dispositivos I2C se expande rápidamente. Esto no cambia el formato

    de direcciones definido en la especificación del bus I2C, usando direcciones

    reservadas en la especificación existente.

    El direccionamiento de 10-bit no afecta el direccionamiento existente de 7-bit,

    permitiendo a los dispositivos con direcciones de 7-bit ó 10-bit ser conectados al

    mismo bus I2C, y ambos tipos de dispositivos pueden ser usados en sistemas con

    modos Standard, Fast ó High-Speed.

    Los 7 primeros bits del primer byte marcan la dirección del esclavo y el octavo bit

    determina la dirección del mensaje. Un 0 en el octavo bit significa que el master

    escribirá información en el esclavo seleccionado y un 1 en el octavo bit significa

    que el Master leerá información del esclavo.

    Cuando un Master envía una dirección después de la condición de Inicio cada

    dispositivo comprueba los siete primeros bits de la dirección con la suya propia. El

  • 46

    que coincida se considera el dispositivo direccionado por el Master siendo un

    esclavo-receptor ó esclavo-emisor dependiendo del bit R/W.

    Una dirección puede tener una parte fija y otra programable. Con lo que se

    pueden conectar dispositivos idénticos al sistema siendo activados por la parte fija

    y controlados por la parte programable.

    Existen una serie de direcciones reservadas en los Bus I2C que no se deben

    utilizar dado que son direcciones determinadas por Philips para usos generales.

    Lectura/Escritura (Bit R/W): Cada dispositivo dispone de una dirección de 7 bits.

    El octavo bit (el menos significativo ó LSB) enviado durante la operación de

    direccionamiento corresponde al bit que indica el tipo de operación a realizar. Si

    este bit es alto el dispositivo maestro lee información proveniente de un

    dispositivo esclavo. En cambio, si este bit fuese bajo el dispositivo maestro

    escribe información en un dispositivo esclavo.

    2.2.3 INTERFAZ PERIFÉRICA SERIAL (SPI)

    2.2.3.1 Introducción

    La Interfaz Periférica Serial (SPI), un subsistema serial independiente de

    comunicaciones, permite a la MCU comunicarse sincrónicamente con dispositivos

    periféricos, tales como:

    - Sintetizadores de frecuencia

    - Drivers de display de cristal líquido (LCD)

    - Subsistemas convertidores de analógico a digital(A/D)

    - Otros microprocesadores

    - Reloj en tiempo real

    La Interfaz Periférica Serial es también capaz de establecer comunicaciones entre

    procesadores en un sistema con múltiples maestros. El sistema SPI puede ser

    configurado como un dispositivo maestro o como uno esclavo. Cuando la

    configuración es como maestro, la transferencia de datos puede ser tan alta como

  • 47

    una proporción de un medio de los ciclos del reloj (1.5Mbps a 3MHz de la

    frecuencia del bus) Cuando la configuración es como esclavo puede ser tan

    rápida como la razón del reloj (3Mbps para una frecuencia de bus de 3MHz).

    2.2.3.2 Descripción funcional

    La Comunicación SPI usa un modelo Maestro / Esclavo y típicamente tiene tres

    líneas: línea de entrada de datos, línea de salida de datos y la línea de reloj. Las

    señales elegidas del chip se utilizan para direccionar los distintos esclavos del bus

    Figura 2.7.

    FIG. 2.7 CONFIGURACION DEL SISTEMA MAESTRO - ESCLAV O

    Los bits de datos están cambiando entrada / salida MSB primero. A menudo los

    datos están cambiando simultáneamente fuera del pin de salida y dentro del pin

    de entrada. La interfaz SPI define solamente las líneas de comunicación y el reloj,

    otros parámetros varían para diferentes dispositivos. Las frecuencias de reloj

    puede ser cualquiera a partir de 100 KHz a algunos MHz y la longitud de la

    palabra puede ser de 8 a 16 bits.

    2.2.3.3 Formatos de transferencia del SPI

    Durante una transferencia del SPI, los datos son transmitidos y recibidos

    simultáneamente. Una línea de reloj serial sincroniza el muestreo y el corrimiento

    de la información en dos líneas seriales de datos.

    Una línea de selección de esclavo permite una selección individual de un

    dispositivo esclavo del SPI; los dispositivos esclavos que no están seleccionados

    no hacen interferencia con el SPI y sus funciones. Sobre un dispositivo maestro

  • 48

    del SPI, la línea seleccionadora puede opcionalmente ser usada para indicar un

    conflicto de buses de múltiples maestros.

    2.2.3.4 Controles de fase de reloj y de polaridad

    El software puede seleccionar 1 de 4 combinaciones de fase serial de reloj y fase

    usando dos bits en el registro de control (SPCR). La polaridad de reloj está

    especificada por el bit de control CPOL, con el cual selecciona un reloj activo alto

    o uno activo bajo, y no tiene efecto significativo en el formato de transferencia. El

    bit de control de la fase de reloj (CPHA) selecciona 1 de 2 formatos de

    transferencia.

    La fase de reloj y la polaridad deben ser idénticas para el dispositivo maestro del

    SPI y para el dispositivo esclavo con el que está comunicándose. En algunos

    casos, la fase y la polaridad son cambiadas entre transferencias para permitirle a

    un maestro comunicarse con un esclavo que tiene diferentes requerimientos.

    Cuando CPHA es igual a 0, la línea SS- puede ser negada y reactivada entre

    cada byte serial sucesivo, también si el esclavo escribe datos al registro de datos

    del SPI (SPDR) cuando SS es bajo, resulta una colisión de error de escritura.

    Cuando CPHA igual a 1, la línea SS- puede permanecer baja entre las sucesivas

    transferencias.

    2.2.3.5 Señales del sistema SPI

    1. Entrada del Maestro/ Salida del Esclavo (MISO)

    2. Salida del Maestro/ Entrada del Esclavo (MOSI)

    3. Reloj Serial (SCK)

    4. Seleccionar Esclavo (SS-)

    Cualquier línea de salida del SPI debe tener su bit correspondiente en 1 en el

    registro de dirección de datos DDRD. Si el bit del DDRD está en 0, esa línea está

    desconectada de la lógica del SPI y se convierte en una entrada de intención

  • 49

    general. Todas las líneas de entrada están forzadas a actuar como entradas sin

    importar el estado de los bits DDR en el registro DDRD.

    Entrada del maestro / salida del esclavo (MISO)

    Es una entrada a un dispositivo maestro y es una salida de un dispositivo esclavo.

    La línea MISO de un dispositivo esclavo es puesta en un estado alto de

    impedancia si el dispositivo esclavo no está seleccionado.

    Salida del maestro /entrada del esclavo (MOSI)

    Esta es una salida del maestro y es una entrada del esclavo. El dispositivo

    maestro pone datos sobre la línea MOSI medio ciclo antes del final del flanco de

    reloj que usa el dispositivo esclavo para tomar el dato.

    Las líneas MISO y MOSI son señales unidireccionales seriales de datos.

    Reloj serial (SCK)

    SCK es una entrada al dispositivo esclavo, es generada por el maestro y

    sincroniza el movimiento de datos dentro y fuera de las líneas MISO y MOSI. Los

    dispositivos maestro y esclavo son capaces de cambiar un byte de información

    durante una secuencia de 8 ciclos de reloj.

    Cuatro posibles relaciones pueden ser elegidas usando los bits de control CPOL y

    CHPA en el registro de control periférico serial (SPCR). Ambos, el maestro y el

    esclavo deben operar con la misma tasa de bits. Los bits de selección de la tasa

    del reloj del SPI, SPR [1:0], en el SPCR del maestro, seleccionan la frecuencia de

    reloj, SPR [1:0] no afectan sobre la operación del SPI.

    Selección esclavo (SS-)

    La entrada de selección esclavo (SS-) de un esclavo debe ser externamente

    activada antes de que un maestro pueda intercambiar datos con el esclavo. SS-

    debe ser baja permitiendo transacciones de datos y debe permanecer baja por la

    duración de la transacción.

  • 50

    La línea SS- de un maestro debe ser alta. Si ésta fuera a bajo, una bandera de

    error de modo de falla (MODF) es puesta a 1 en el registro de estado periférico

    serial (SPSR).

    Para deshabilitar el modo de fallas del circuito, escribir 1 en el bit 5 del registro de

    dirección de los datos del puerto D. Esto hará que la terminal SS- actúe como una

    salida de intención general y no como la entrada dedicada a seleccionar el circuito

    del esclavo, esto inhibe a la bandera del modo de falla. Las otras tres líneas

    estarán dedicadas al SPI siempre que la interfaz serial esté funcionando.

    El estado de los bits CPHA del maestro y del esclavo afectan la operación de SS-.

    Los bits CHPA deben de estar colocados idénticamente para el maestro y para el

    esclavo. Cuando CPHA = 0, el reloj de corrimiento es el OR del SS con el SCK.

    En este modo de reloj de fase, SS- debe ir a alto entre caracteres sucesivos en un

    mensaje del SPI Cuando CPHA = 1, SS- puede dejarse en bajo entre caracteres

    sucesivos del SPI. En casos donde hay una sola MCU esclava, su línea SS-

    puede ser enlazada a Vss siempre que CPHA = 1 sea el modo usado de reloj.

    2.2.3.6 Errores del sistema SPI

    Dos errores de sistema pueden ser detectados por el sistema del SPI.

    - El primer tipo de error surge en un múltiple sistema maestro donde más de un

    dispositivo del SPI trata de ser el maestro. Este error es llamado modo de falla.

    - El segundo tipo de error, colisión de escritura. Indica que un intento fue hecho al

    escribir datos al SPDR con una transferencia.

    Cuando el sistema SPI está configurado como un maestro y la entrada SS- va a

    un estado activo bajo, una falla de modo ha ocurrido, usualmente porque dos

    dispositivos han intentado actuar como maestro al mismo tiempo. En estos casos

    existe la posibilidad de contención entre dos terminales. Para drivers push-pull

    CMOS, esta contención puede causar daño permanente. El mecanismo de falla

    de modo intenta proteger el equipo mediante la deshabilitación de los drivers.

  • 51

    El bit de control MSTR y los cuatro bits de control del registro DDRD asociados al

    SPI son puestos a 0 y una interrupción es generada sujeta a ser enmascarada por

    el bit de control SPIE y el bit I del CCR.

    Otras precauciones necesitan ser tomadas para prevenir el daño de los drivers. Si

    dos dispositivos están hechos maestros al mismo tiempo, el modo de falla no

    ayuda a la protección de ellos, a menos que uno de ellos seleccione al otro a ser

    esclavo. La cantidad de daño posible depende de la longitud del tiempo que

    ambos dispositivos intenten actuar como maestros.

    Una colisión de escritura ocurre si el SPDR es escrito cuando una transferencia

    está en progreso. Porque la SPDR no está doblemente almacenada en la

    dirección de transmisión, una escritura a SPDR causa que los datos sean escritos

    directamente dentro del registro de corrimiento del SPI.

    La configuración SPI determina las características de una transferencia en

    progreso. Para un maestro, una transferencia comienza cuando los datos son

    escritos al SPDR y finaliza cuando SPIF se hace 1.

    Para un esclavo con CPHA = 0, una transferencia comienza cuando SS- va a bajo

    y finaliza cuando SS- regresa a ALTO. En este caso, SPIF se hace 1 en medio del

    octavo ciclo de reloj cuando los datos están transfiriéndose desde el registro de

    corrimiento al registro de datos paralelo, pero la transferencia esta aún activa

    hasta que SS va a alto.

    Para un esclavo con CHPA = 1, la transferencia inicia cuando la línea SCK va a

    su nivel activo, el cual es el flanco al comienzo del primer ciclo del SCK. La

    transferencia termina en el esclavo con CPHA = 1 cuando SPIF se hace 1.

    2.2.3.7 Registros del Sistema SPI

    Los tres registros del SPI son:

    � Registro de control periférico serial (SPCR)

    � Registro de estado periférico serial (SPSR)

    � Registro de datos periférico serial (SPDR)

  • 52

    Estos registros dan control, estado y funciones de almacenaje de datos

    Registro de control periférico serial (SPCR)

    Bit 7 6 5 4 3 2 1 Bit 0

    Lectura:

    Escritura:

    SPIE

    SPE

    DWOM

    MSTR

    CPOL

    CPHA

    SPR1

    SPR0

    Reset 0 0 0 0 0 1 U U

    U = no afectado

    FIG. 2.8 REGISTRO DE CONTROL PERIFÉRICO SERIAL

    SPIE: Bit para habilitar las Interrupciones por el SPI.

    Poner el bit SPIE a 1 para pedir una secuencia de interrupción de hardware cada

    vez que la bandera SPIF o la MODF se haga 1.Las interrupciones del SPI están

    inhabilitadas si este bit es puesto a 0 o si el bit I del registro CCR es 1

    0 = Sistema de interrupción del SPI deshabilitado

    1 = Sistema de interrupciones del SPI habilitado

    SPE: Bit para Habilitar la Interfaz Serial Periférica

    Cuando el bit SPE está en 1, las terminales 2, 3, 4 y 5 del puerto D están

    dedicados a la función SPI. Si la SPI está en el modo maestro y el bit 5 del DDRD

    es 1, entonces el bit 5 del puerto D es una salida en vez de una entrada del SS.

    0 = Deshabilitar la Interfaz Serial Periférica SPI

    1 = Habilitar la Interfaz Serial Periférica SPI

    DWOM: Bit para modo del Puerto D como OR alambrada

    Este afecta todos los pines del puerto D. Es habitual tener un resistor externo

    sobre las líneas que están manejando por drenaje abierto.

    0 = Salidas normales CMOS

    1 = Salidas de drenaje abierto

    MSTR: Bit de selección del modo Maestro

    0 = Modo Esclavo

    1 = Modo Maestro

  • 53

    CPOL: Bit de Polaridad del Reloj

    Cuando la polaridad de reloj es 0 y los datos no han sido transferidos, el SCK del

    maestro tiene un estado útil de valor bajo. Cuando CPOL es 1, SCK es alto.

    CPHA: Bit de Fase del Reloj

    La fase de reloj en conjunción con la CPOL, controla el reloj de datos

    relacionados entre el maestro y el esclavo. El CPHA selecciona uno de dos

    diferentes protocolos de reloj.

    SPR [1:0]: Bits para elegir la tasa del Reloj del SPI

    Estos dos bits seleccionan la tasa de reloj del SPI cuando el dispositivo está

    configurado como maestro. Cuando el dispositivo está configurado como esclavo,

    estos bits no tienen efecto.

    I

    Registro de estado periférico serial (SPSR)

    Bit 7 6 5 4 3 2 1 Bit 0

    Lectura:

    Escritura:

    SPIF

    WCOL

    MODF

    Reset 0 0 0 0 0 0 0 0

    = no implementado

    FIG. 2.9 REGISTRO DE ESTADO PERIFÉRICO SERIAL

    SPIF: Bandera de Interrupción del SPI por transferencia Completa

    SPIF se hace 1 al término de la transferencia de datos entre el procesador y el

    dispositivo externo. Si SPIF va a alto, y si SPIE está en 1, la interfaz periférica

    serial genera una interrupción. Para limpiar el bit SPIF, leer el SPSR con el SPIF

    en 1, entonces accesar al SPDR. A menos que el SPSR sea leído primero (con

    SPIF en 1), todo intento de escribir a SPDR queda inhabilitado.

    WCOL: Bit de Colisión de Escritura

    La limpieza del bit WCOL se lleva a cabo por una lectura del SPSR (con WCOL

    en 1) seguido por una acceso de SPDR.

    0 = No hubo colisión de escritura

    1 = Hubo colisión de escritura

  • 54

    Bit 5 y Bits [3:0]: No implementados

    Siempre se leerán como 0.

    MODF: Bit de indicación de Falla de Modo

    Para limpiar el bit MODF, leer el SPSR (con MODF en 1), entonces escribir al

    SPCR.

    0 = No hubo falla de modo

    1 = Si hubo falla de Modo

    Registro de datos periférico serial (SPDR)

    Bit 7 6 5 4 3 2 1 Bit 0

    Lectura:

    Escritura:

    Bit 7

    Bit 6

    Bit 5

    Bit 4

    Bit 3

    Bit 2

    Bit 1

    Bit 0

    Reset INDETERMINADO TRAS EL RESET

    FIG. 2.10 REGISTRO DE DATOS PERIFÉRICO SERIAL

    El SPDR es usado cuando transmitimos o recibimos datos en el bus serial.

    Solamente con escribir a este registro iniciamos la transmisión o la recepción de

    byte, y esto sólo ocurre en el dispositivo maestro. Al completar la transferencia de

    un byte de datos, el bit de estatus SPIF se hace 1 en ambos, el maestro y en el

    esclavo.

    Una lectura del SPDR es realmente la lectura de un buffer. Para prevenir un error

    de pérdida y la pérdida del byte que causó la pérdida, primero SPIF debe ser

    limpiado antes que una segunda transferencia de datos desde el registro de

    corrimiento al buffer de lectura sea iniciada.

  • 55

    CAPÍTULO 3

    MÓDULO DE PRÁCTICAS Y FUNDAMENTOS BÁSICOS

    DEL SOFTWARE

    3.1 MÓDULO DE PRÁCTICAS

    Para el diseño del Módulo se tomó en consideración que éste debe servir como

    una herramienta de desarrollo para el aprendizaje de los microcontroladores AVR,

    en forma práctica, para lo cual el Módulo consta de diversos dispositivos que en

    combinación con el Ambiente de Desarrollo del software BASCOM y con la gran

    potencialidad del microcontrolador ATMEGA 8 se podrá desarrollar proyectos que

    van desde los más simples hasta proyectos más complejos.

    Los diversos dispositivos del Módulo como son LCD, Teclado, etc., están

    conectados a los diferentes buses de E/S del ATMEGA 8 de tal suerte que no

    intervengan con el resto de dispositivos que contiene la placa y de ser así existen

    puentes (JP) que colocados en posiciones indicadas evitan conflictos. Estos

    puentes serán descritos más adelante para ser identificados.

    3.2 CARACTERÍSTICAS DEL MÓDULO

    • Fuente de 5V.

    • LCD alfanumérico estándar de2 x 16 caracteres.

    • Teclado matricial de 4 x 4 teclas.

    • Conector serie RS232.

    • Reloj en tiempo real

    • Comunicación I2C

    • Comunicación SPI

    3.2.1 PROGRAMADOR ISP (In System Program)

    BASCOM soporta el programador ISP, STK200 / STK300, STK500, entre otros,

    en este proyecto se utilizó el programador AVR ISP este es un programador para

    puerto paralelo muy confiable. Los otros programadores se encuentran en las

    opciones de programadores del BASCOM AVR.

  • 56

    El programador paralelo AVR consta de un buffer 74HC244 que sirve de interfaz

    de comunicación entre el Atmega 8 y el puerto paralelo de un PC. Este buffer es

    muy importante ya que protege el puerto paralelo de la computadora. Las señales

    necesarias para el AVR ISP (programador) son MOSI, RESET, SCK Y MISO.

    El módulo consta de un conector DB9 hembra como entrada de programación,

    por lo tanto el cable de programación tiene en el un extremo un conector DB9

    macho y en el otro extremo un conector DB25 macho, además el Programador

    consta de un led indicador de transición de datos y un pulsador de Reset con lo

    que está listo para programar un microcontrolador, el diagrama esquemático del

    programador STK 200 / STK 300 se puede ver en la figura 3.1

    FIG. 3.1 PROGRAMADOR ISP

    3.2.2 FUENTE DE ALIMENTACIÓN

    Está formado por dos secciones. La primera parte tiene la entrada de un

    phonejack que recibe un voltaje DC, este voltaje debe ser 12 Vdc, y la segunda

    conformada por el puente de diodos y el regulador LM78L05 que proporciona 5

    Vdc al módulo.

    La fuente tiene un led el cual indica si la fuente está funcionando, la figura

    muestra la fuente de alimentación del Módulo.

  • 57

    FIG. 3.2 FUENTE DE ALIMENTACIÓN

    3.2.3 LCD ALFANUMÉRICO ESTÁNDAR DE 2 x 16 CARACTERES

    LCD (Liquid Cristal Display) es un dispositivo microcontrolado de visualización

    gráfica para la presentación de caracteres, símbolos o incluso dibujos (en algunos

    modelos), en este caso dispone de 2 filas de 16 caracteres cada una y cada

    carácter dispone de una matriz de 5 x 7 puntos (pixels), aunque los hay de otro

    número de filas y caracteres.

    En la tabla se indica la configuración de los pines del LCD

    PIN Nº SÍMBOLO DESCRIPCIÓN

    1 Vss Tierra (GND)

    2 Vdd Alimentación de +5Vcc

    3 Vo Contraste del cristal líquido. (0 a +5V.)

    4 RS Selección del registro de control/registro de datos:

    RS=0 Selección registro de control

    RS=1 Selección registro de datos

    5 R/W Señal de lectura/escritura:

    R/W=0 Escritura (Read)

    R/W=1 Lectura (Write)

    6 E Habilitación del módulo

    E=0 Módulo desconectado

    E=1 Módulo conectado

    7-14 D4 – D7 Bus de datos bidireccional

    1 3

    2

    V V

    GNDIN OUT

    78L05U2

    +1000uFC5 +

    10ufC6

    JACK

    JACK1 IN+

    IN-

    VCC

    AC

    1

    +

    AC

    2

    -

    BRIDGE1

    D12

    330R3

    LEDD1

    VDD

  • 58

    Mediante un potenciómetro de contraste se aplica al LCD una tensión variable de

    entre 0 y +5 Vcc. Con dicha tensión se consigue ajustar el contraste de los

    caracteres de la pantalla, según las necesidades del usuario.

    EL display LCD 16*2 está conectado al microcontrolador por el bus del Puerto D.

    El comando Config Lcd = 16*2 del lenguaje BASCOM configura los pines del LCD.

    El Bus de datos del LCD está configurado para trabajar con 4 Bits (C2-C5) y 2

    señales de control (RS – E) como se indica en la figura.

    FIG. 3.3 CONEXIÓN DEL LCD

    3.2.4 TECLADO MATRICIAL DE 4 x 4

    Este dispositivo de entrada de datos consta de 16 teclas o pulsadores, dispuestos

    e interconectados en filas y columnas. Dispone de un conector SIL (Single In Line)

    macho de 8 pines que se corresponden con las 4 filas y las 4 columnas de las que

    dispone. Este teclado matricial está conectado por el bus del Puerto B (B0 – B7)

    como se indica en la figura. El comando CONFIG KBD del lenguaje BASCOM

    configura los pines.

    ATMEGA 8

    D4 - - PUERTO D - D7 E RS

    DATOS

    CONTROL

    ATMEGA 8

    B0 - - PUERTO B - - - - B7

    DATOS

    1 2 3 A

    4

    5 6 B

    7 8 9 C

    * 0 # D

    FIG. 3.4 CONEXIÓN DEL

    TECLADO

  • 59

    3.2.5 RESET

    Se trata de un pulsador (SW-PB), que se conecta en el pin 1 del Atmega 8,

    permite reiniciar el sistema si en alguna ocasión se bloquea o simplemente para

    reiniciar un programa

    FIG. 3.5 CONEXIÓN DEL RESET

    3.2.6 RELOJ CALENDARIO EN TIEMPO REAL

    Está basado en un integrado DS1307, diseñado para conectar al Bus I2C,

    dispone de un reloj en tiempo real que cuenta con segundos, minutos, horas,

    fecha del mes, mes, día de la semana y año, el cual está programado hasta el

    año 2100, adicionalmente tiene 56 bytes de RAM no volátil. El DS1307 es

    alimentado por una batería de 3V de litio.

    PC6(RESET)1

    PD0(RXD)2

    PD1(TXD)3

    PD2(INT0)4

    PD3(INT1)5

    PD4(XCK/T0)6

    VCC7

    GND8

    PB6(XTAL1/TOSC1)9

    PB7(XTAL2/TOSC2)10

    PD5(T1)11

    PD6(AIN0)12

    PD7(AIN1)13

    PB0(ICP1) 14

    PC5(ADC5/SCL) 28

    PC4(ADC4/SDA)27

    PC3(ADC3)26

    PC2(ADC2)25

    PC1(ADC1) 24

    PC0(ADC0)23

    PB1(OC1A) 15

    PB2(SS/OC1B)16

    PB3(MOSI/OC2)17

    PB4(MISO)18

    PB5(SCK) 19

    AVCC20

    AREF21

    GND22

    ATMEGA8

    A1

    RXDTXD

    MISOMOSI

    SCK

    4.7kR6

    VCC

    RESET

    ADC0ADC1

    CSDI

    O1O2

    SW-PBS1

  • 60

    SCL

    SDA

    X11

    X22

    SDA 5SCL 6

    SQW/OUT 7

    VCC8

    GND4Vbat 3

    DS1307

    U9

    32KHZ

    XTAL1

    3vBT1

    VCC

    LEDD11

    330

    R19

    VCC

    330

    R18

    330

    R17

    10kR20

    10kR21

    VCC VCC

    FIG. 3.6 CONEXIÓN DEL REAL TIME

    3.3 FUNDAMENTOS BÁSICOS DEL SOFTWARE BASCOM

    El primer punto importante para destacar de este programa, el Bascom AVR, es

    que está desarrollado en lenguaje Basic, y es importante porque este lenguaje de

    programación es uno de los más fáciles que se ha diseñado; el nombre BASIC es

    una abreviatura para: Begginers All-purpose Symbolic Instruction Code, indicando

    simplemente que es un “Lenguaje de programación para principiantes”. Esta

    cualidad “para principiantes” ha identificado al Basic por largo tiempo, así que

    muchos programadores con experiencia han evitado erróneamente usar de él.

    Sin embargo, a pesar del tiempo y todos los nuevos lenguajes de programación,

    Basic tiene un lugar envidiable con su muy extendido uso, razón por la cual el

    lenguaje de programación Basic se convierte en una herramienta de

    programación moderna, de gran alcance, y extensamente aceptada.

    Es por esto que se menciona como una cualidad importante el uso del lenguaje

    de programación Basic en este programa.

    Otra de las características del programa Bascom AVR es que ahora no es

    necesario contar con un ensamblador para escribir el código fuente y otro

    paquete de software para comprobar y simular un programa, todo esto se lo

    realiza con Basic; además con todo el avance de la tecnología, se han construido

    microprocesadores con memorias tipo flash, con capacidad de programación ISP

  • 61

    (In System Programming), y otras herramientas, cualidades que la empresa

    holandesa MCS Electronics ha sabido aprovechar, y ha cubierto los siguientes

    componentes de software, con el paquete BASCOM AVR:

    • Redactor

    • Basic recopilador

    • Ensamblador

    • Simulador

    • Terminal Emulador

    • Lcd designer

    • LIB manager

    • Programador

    Pero el programa Bascom no es solamente un compilador en lenguaje Basic, sino

    que nos ofrece un único Ambiente de Desarrollo Integrado (IDE). Inicializando el

    programa nos encontramos en un ambiente de desarrollo donde realizaremos

    todo nuestro trabajo, y el primer