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 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 35 EL CIRCUITO MAX 232 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ÁSICOS 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 programable. • Reloj en tiempo real • Interfaz serial SPI • Vcc: 4.5 – 5.5 V • Frecuencia de funcionamiento 0 – 16 MHz. Receiver Transmitter) 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 2 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 1 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) 14 15 (ICP) PB0 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 4 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 4-5 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 XTAL2 (Chip Clock Oscillator pin 2) PB7 TOSC2 (Timer Oscillator pin 2) XTAL1 (Chip Clock Oscillator pin 1 or External clock input) PB6 TOSC1 (Timer Oscillator pin 1) PB5 SCK (SPI Bus Master clock Input) PB4 MISO (SPI Bus Master Input/Slave Output) MOSI (SPI Bus Master Output/Slave Input) PB3 OC2 (Timer/Counter2 Output Compare Match Output) SS (SPI Bus Master Slave select) PB2 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 PC6 FUNCIÓN ALTERNA RESET (Reset pin) ADC5 (ADC Input Channel 5) PC5 SCL (2-wire Serial Bus Clock Line) ADC4 (ADC Input Channel 4) PC4 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 6 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 5. 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) XCK (USART External Clock Input/Output) PD4 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 Flash Program Memory Instruction Register Program Counter Status and Control 32 x 8 General Purpose Registrers Interrupt Unit SPI Unit Watchdog Timer Instruction Decoder Analog Comparator i/O Module 1 Data SRAM i/O Module 2 i/O Module n EEPROM I/O Lines 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. 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 REGISTROS DE PROPOSITO GENERAL 0 R0 R1 R2 … R13 R14 R15 R16 R17 … R26 R27 R28 R29 R30 R31 Dirección 0x00 0x01 0x02 0x0D 0x0E 0x0F 0x10 0x11 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F Registro X byte bajo Registro X byte alto Registro Y byte bajo Registro Y byte alto Registro Z byte bajo 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 Registro X 15 7 XH R27 (0x1B) Registro Y 0 0 YL 0 0 ZL 0 0 R26 (0x1A) 15 7 YH 0 7 R29 (0x1D) Registro Z XL 0 7 R28 (0x1C) 15 7 ZH 0 7 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. categorías principales - Las operaciones de la ALU se dividen en tres 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 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 SREG 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 Read/Write Initial Value 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 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 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). Resistencias de PULL-UP MICRO LCD ADC MICRO 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. 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 noreconocimiento. 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 - ESCLAVO 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. SSdebe 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 SSpuede 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 SPIE SPE DWOM MSTR CPOL CPHA SPR1 SPR0 0 0 0 0 0 1 U U Lectura: Escritura: Reset 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 SPIF WCOL 0 0 5 4 3 2 1 Bit 0 0 0 0 0 Lectura: Escritura: Reset MODF 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 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Lectura: Bit 7 Escritura: 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. JACK1 AC1 57 IN+ D12 U2 78L05 JACK IN- + 1 V IN + C5 1000uF 3 VDD + C6 10uf VCC R3 330 AC2 2 BRIDGE1 V OUT GND D1 LED 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 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: DESCRIPCIÓN 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 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. ATMEGA 8 DATOS D4 - PUERTO D D7 CONTROL E RS 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 FIG. 3.4 CONEXIÓN DEL 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D TECLADO DATOS B0 - PUERTO B B7 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 VCC R6 4.7k A1 RXD TXD 2 3 4 5 6 11 12 13 7 8 20 21 22 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) VCC GND AVCC AREF GND 1 28 27 26 25 24 23 RESET S1 SW-PB ADC1 ADC0 O1 O2 DI CS 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 ATMEGA8 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. 60 VCC R19 330 D11 LED XTAL1 U9 1 2 32KHZ VCC 8 4 X1 X2 VCC GND SQW/OUT SCL SDA Vbat 7 6 5 R18 SCL 330 R17 SDA 3 330 DS1307 BT1 3v R20 10k VCC R21 10k 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 paso es comenzar a escribir el programa, para lo cual se cuenta con un muy buen editor, que conoce todas las opciones útiles que nos ofrece Windows. Por ejemplo presionando la tecla F1 el sistema abre la ayuda con toda la explicación del comando bajo el cursor. Junto a la explicación de la sintaxis para cada comando, se encuentra un breve ejemplo para el comando en particular. Podemos copiar este código (ejemplo) al redactor si lo queremos probar o utilizar. 62 FIG. 3.7 PANTALLA PRINCIPAL Dentro de esta primera pantalla encontramos una presentación típica bajo el entorno de Windows, el área de trabajo y la barra de herramienta, dentro de la cual se encuentran iconos conocidos como por ejemplo: Abrir, Nuevo, Guardar, Guardar como, Imprimir, Vista preliminar, etc. Pero es de nuestro interés conocer la ayuda que nos brindan los siguientes iconos: FIG. 3.8 ICONOS DEL BASCOM AVR 3.3.1 REVISIÓN DE LA SINTAXIS El primer icono con una marca de visto realiza una revisión de los errores de sintaxis del código o programa fuente escrito, cuando se realiza esta acción, ningún código adicional es generado en este tiempo, salvo que se encuentre algún error. 63 3.3.2 REVISIÓN DEL PROGRAMA El siguiente icono (Chip) da comienzo al compilador del programa, esta acción de compilar revisa errores de programación, como por ejemplo que alguna variable no esté definida, o esté mal definido, para realizar esta acción es necesario, que no existan errores de sintaxis en el programa fuente. Cuando se realiza esta acción se crea un archivo binario, archivo que es necesario para programar el microcontrolador, archivos adicionales son generados en este proceso aunque son opcionales (MENU – OPTIONS – COMPILER – OUTPUT) y son los siguientes: FIG. 3.9 OPCIONES DEL BASCOM AVR 64 ARCHIVO xxx.BIN DESCRIPCIÓN (Bynary file) Archivo binario necesario para programar el microcontrolador. xxx.DBG (Debug file) Archivo actualizado que se necesita para el simulador. xxx.OBJ (Object file) Archivo objeto, se usa cuando se simula con el AVR Studio. xxx.HEX (Hexadecimal file) Archivo en formato hexadecimal que se necesita para algunos programadores. xxx.ERR (Error file) Archivo de error. Solamente se crea si se encuentran errores en el programa. xxx.RPT (Report file) Archivo de reporte (informe). xxx.EEP (EEPROM image file). TABLA 3.1 TIPOS DE ARCHIVOS GENERADOS EN LA COMPILACIÓN Si ocurre un error, se recibirá un mensaje de error en una caja de diálogo y la compilación terminará. El resto de los errores serán exhibidos en el fondo sobre la barra de estado. Cuando se da un click en la línea con la información del error, se salta a la línea que contiene el error. El margen también exhibirá la muestra. En la compilación siguiente, la ventana del error desaparecerá. 3.3.3 INFORME DE RESULTADOS El siguiente icono (La mano de la escritura), nos permite ver los resultados de la compilación (archivo de informe). En este informe se indica a más de la información básica del sistema (versión del compilador, tipo de microcontrolador, fecha, etc.), una lista detallada de todos los recursos del microcontrolador que se encuentran disponibles, así como la lista de las variables que fueron utilizadas, su mecanografía y las direcciones en notaciones hexadecimal y decimal, y al final del informe también se presenta un inventario de las constantes usadas y sus valores. 65 3.3.4 SIMULADOR En el desarrollo del proyecto, a menudo es necesario revisar alguna parte del programa fuente o de alguna rutina, si no contamos con una herramienta de software adecuada, no tenemos más opción que volver a escribir el programa en varias ocasiones hasta tener éxito. Bascom nos brinda la posibilidad de reducir drásticamente el número de repeticiones, gracias al simulador que está disponible en este programa. El siguiente en la lista es el icono del chip (color rojo), dando un clic en este icono, se puede simular el programa, donde el programa fuente es cargado automáticamente del editor, pero para realizar este paso, es necesario compilar el programa primero, porque el simulador realiza su trabajo solamente si existe el archivo .DBG (debug) el cual está disponible solamente después de compilar el programa. Es importante tener esto presente, especialmente si a un archivo ya compilado se le realizó algún cambio, si no se le realiza nuevamente el proceso de compilar, el simulador se cargará nuevamente con el archivo antiguo. En Bascom –AVR se puede escoger el simulador interno o AVR Studio para la simulación. En el menú (OPTIONS – SIMULATOR) El AVR Studio puede ser cargado a Bascom-AVR. 66 FIG. 3.10 SIMULADOR DEL BASCOM AVR El simulador cuenta con las funciones de: PLAY – PAUSE Y STOP para iniciar, hacer una pausa o para parar la simulación, respectivamente, además se puede hacer la simulación paso a paso STEP a través del programa, o por las subrutinas (Subrutinas, GOSUB, CALL) STEP OVER-BUTTON. Además se puede realizar la simulación del programa solamente hasta cierta línea, seleccionándola previamente con el botón RUN TO CURRENT LINE. El simulador hará una pausa al llegar a este punto. En el simulador se puede realizar las siguientes acciones: - Se puede ver el valor de una variable, ubicando el cursor del mouse sobre el nombre de la variable seleccionada - Es posible agregar una nueva variable, tecleando la variable dentro de la ventana WATCH. 67 - Pulsando los botones INT0, INT1, TO, T1 y SER se puede simular una interrupción. Pueden desplegarse botones adicionales cuando el chip utilizado tiene interrupciones adicionales. - Con el botón ENABLE/DISABLE REAL HARDWARE SIMULATION se habilita o deshabilita la simulación real de hardware, pero para esto se necesita contar con el hardware adicional. El simulador de hardware simulará el puerto 1 y 3, de esta manera se puede probar el programa en el circuito sin programar el dispositivo. Pulsando el botón de simulación de hardware LED se visualiza la siguiente ventana, una característica destacada del simulador es el emulador de displays LCD, teclado y puertos como se observa en la fig. Permite incluso emular gráficos en el LCD realizados a medida. FIG. 3.11 PANTALLA DE SIMULACION 3.3.5 PROGRAMADOR El icono con la figura de un zócalo tipo ZIF, nos brinda la posibilidad de usar un programador, dependiendo de la configuración del programa Bascom; menú (OPTIONS – PROGRAMER) podemos seleccionar 9 diferentes tipos de programadores, más uno externo, claro está que a este último se lo debe diseñar y construir. En este caso usamos el programador STK200 / STK300. 68 3.3.6 EMULADOR DEL TERMINAL RS-232 El siguiente icono en la barra de herramientas, representa el emulador del terminal, se utiliza para la comunicación vía interfaz RS-232 con el microcontrolador. El Emulador se encuentra en la barra de herramientas ( TOOLS – TERMINAL EMULATOR) o presionando Ctrl + T. Los parámetros de la comunicación pueden ser seleccionados o cambiados en el menú (OPTIONS – COMMUNICATION) FIG. 3.12 PANTALLA DE COMUNICACIÓN RS-232 69 ÍTEM COM port DESCRIPCIÓN Puerto de comunicación que utiliza la PC para la comunicación con el terminal emulador. Baud rate Es la velocidad en baudios que se va a usar. Parity Paridad, por defecto es None Data bits Número de bits de datos. Por defecto 8 Stop bits Número de bits de parada. Por defecto 1 Handshake Handshake usado, por defecto es None Emulation Emulación usada, por defecto BBS ANSI Font Tipo de letra y coor usado por el emulador Back ground Color de fondo del emulador TABLA 3.2 OPCIONES DE LA COMUNICACIÓN RS-232 Se debe tener en cuenta que la velocidad en baudios del emulador y la velocidad en baudios del compilador debe ser la misma para que trabaje correctamente la comunicación entre la PC y el microcontrolador. 70 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 • Setear un puerto del microcontrolador como salidas • Desarrollar un programa en el software BASCOM para que encienda 8 leds secuencialmente con una pausa de 1 segundo. 4.1.2 Desarrollo El programa realiza el envío de un valor a un puerto en este caso el puerto B, primero realiza una secuencia de 10 veces luego visualiza el valor de una variable del tipo byte desde 0 hasta el número 255 que va incrementando después de 1 segundo. En el Módulo Didáctico se debe tener cuidado en colocar el Switch 2P (J3) en la posición correcta, para deshabilitar el teclado y habilitar los leds en el puerto B del microcontrolador. En la figura 4.1 se presenta el diagrama esquemático de esta práctica y el programa correspondiente se lo puede revisar en los anexos adjuntos. 71 VCC R6 4.7k TL1 TECLADO U6B A1 2 3 4 5 6 11 12 13 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) VCC 7 R4 100 8 VCC C8 0.1uF 20 21 22 C7 0.1uF VCC GND AVCC AREF GND PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) 1 28 27 26 25 24 23 RESET ADC1 ADC0 O1 O2 DI CS S1 SW-PB 1 2 3 4 5 6 7 8 9 0 A B 5 3 ATMEGA8 R16 330 4050 U6A C D E F F1 F2 F3 F4 C1 C2 C3 C4 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 D10 4 LED D9 R15 2 LED D8 4050 U5D 9 R14 10 LED D7 4050 U5C 7 11 LED D6 5 LED D5 3 LED D4 LED R9 15 4050 330 D3 U5F 14 330 R10 2 4050 330 R11 4 4050 U5A 330 R12 12 4050 U5B 330 R13 6 4050 U5E 330 LED 330 VCC 3 2 1 RXD TXD J3 SWITCH 2P FIG. 4.1 CONTROL DE PUERTOS 72 4.2 PRÁCTICA 2 MANEJO DE TEMPORIZADORES 4.2.1 Objetivo • Aprender a configurar un temporizador interno del Atmega 8. • Generar una onda cuadrada con un tiempo de 500 milisegundos t = 500ms t = 500ms 4.2.2 Desarrollo La siguiente práctica genera un onda cuadrada por medio del temporizador del ATMEGA8 tanto el tiempo en alto como en bajo máximo es de 0.5 segundos o 500msegundos este tiempo puede ser variable por medio del potenciómetro. Tiempo = K * R *Prescaler Donde: K = 1 / Frecuencia del cristal R = Resolución del bit TIMER 1 Tiempo= 1/1000000 * 65535(16bits) * 8 = 0.524 segundos Con esta formula se calcula el tiempo para el temporizador, en esta práctica trabajamos con el TIMER 1 que es de 16 bits por lo que su resolución es 65535, la frecuencia del cristal es de 1MHz y escogimos el valor de 8 en el prescaler. 73 4.3 PRÁCTICA 3 MANEJO DEL LCD 4.3.1 Objetivos • Familiarizarnos con el módulo didáctico y el software de programación BASCOM • Aprender a configurar el LCD. 4.3.2 Desarrollo Programa para realizar el manejo del LCD; Visualiza en la primera fila Esc Politécnica después de 1 segundo visualiza en la segunda fila Nacional y después de 1 segundo rota 16 caracteres a la izquierda todo el mensaje, después rota a la derecha 16 caracteres. El LCD está conectado en el Puerto D del microcontrolador como muestra la figura. Una vez cargado el programa en el microcontrolador el LCD empezará a desplegar el mensaje “ESC. POLITECNICA NACIONAL” LCD1 LCD Gnd Vcc Ctrs Rs R/w E Db0 Db1 Db2 Db3 Db4 Db5 Db6 Db7 A K DISPLAY DE CRISTAL LIQUIDO VCC GND GND VCC R6 4.7k A1 VCC RXD TXD R2 10K 2 3 4 5 6 11 12 13 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) VCC 7 R4 100 8 VCC C8 0.1uF 20 21 22 C7 0.1uF VCC GND AVCC AREF GND PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) ATMEGA8 FIG. 4.2 MANEJO DEL LCD 1 28 27 26 25 24 23 RESET ADC1 ADC0 O1 O2 DI CS 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 S1 SW-PB 74 4.4 PRÁCTICA 4 ADQUISICIÓN DE DATOS 4.4.1 Objetivos • Aprender a configurar el teclado. • Realizar la adquisición de datos utilizando el teclado y visualizando en el LCD. 4.4.2 Desarrollo Programa para ingreso de una clave de 5 dígitos desde el teclado matricial. Primero para ingresar la clave tenemos que presionar la letra D como nos indica el mensaje del LCD “Bienvenido presione D para ingreso” luego la clave que es 01234 si la clave es correcta nos da un mensaje de “Felicitaciones clave correcta” y si es incorrecta nos da el mensaje “error clave incorrecta” Tenemos que habilitar el teclado colocando el SWITCH 2P (J3) en la posición correcta para deshabilitar los diodos. Mediante el programa configuramos el teclado y el LCD. LCD1 LCD Gnd Vcc Ctrs Rs R/w E Db0 Db1 Db2 Db3 Db4 Db5 Db6 Db7 A K DISPLAY DE CRISTAL LIQUIDO VCC GND GND VCC R6 4.7k VCC TL1 TECLADO A1 RXD TXD R2 10K 2 3 4 5 6 11 12 13 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) VCC 7 R4 100 8 VCC C8 0.1uF 20 21 22 C7 0.1uF VCC GND AVCC AREF GND PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) 1 28 27 26 25 24 23 RESET ADC1 ADC0 O1 O2 DI CS 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 ATMEGA8 FIG. 4.3 ADQUISICIÓN DE DATOS S1 SW-PB 1 2 3 4 5 6 7 8 9 0 A B C D E F F1 F2 F3 F4 C1 C2 C3 C4 75 4.5 PRÁCTICA 5 COMUNICACIÓN SERIAL RS 232 4.5.1 Objetivos • Aprender a configurar los ADCS. • Usar el sensor de temperatura LM35 • Verificar la comunicación serial RS 232 entre el Módulo y la computadora 4.5.2 Desarrollo Para realizar la lectura de los ADCS y realizar la comunicación serial primero tomamos una muestra con el sensor de temperatura LM35 y este valor lo convertimos a grados centígrados usando uno de los ADCS, después usando el potenciómetro este valor lo convertimos en voltaje por ultimo enviamos estos datos al computador por medio del puerto serial RS-232. VCC R6 4.7k A1 RXD TXD 2 3 4 5 6 11 12 13 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) VCC 20 21 22 C7 0.1uF AVCC AREF GND VCC R1 ADC1 5K 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 VCC 1 VCC C8 0.1uF GND ADC1 ADC0 O1 O2 DI CS ATMEGA8 U1 Vs 8 S1 SW-PB VOUT GND R4 100 PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) VCC 28 27 26 25 24 23 RESET LM35 3 7 1 FIG. 4.4 COMUNICACIÓN SERIAL RS-232 2 ADC0 76 4.6 PRÁCTICA 6 COMUNICACIÓN I2C 4.6.1 Objetivos • Aprender a configurar el Real Time DS1307 • Verificar la comunicación serial I2C entre el microcontrolador Atmega 8 y el Real Time DS1307 4.6.2 Desarrollo Programa para realizar la comunicación I2C con el real time DS1307 primero igualamos el real time con la fecha 25 de Octubre de 2005 hora 12:00:00 y después realizamos la lectura de este visualizándolo en el LCD, realizando un reloj digital que mantiene la hora y fecha cuando se desconecta la energía. VCC R6 4.7k A1 RXD TXD 2 3 4 5 6 11 12 13 VCC 7 R4 100 8 VCC 20 21 22 C8 0.1uF C7 0.1uF 1 PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) VCC GND AVCC AREF GND RESET 28 27 26 25 24 23 S1 SW-PB ADC1 ADC0 O1 O2 DI CS 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) ATMEGA8 VCC R19 330 D11 LED XTAL1 U9 1 2 32KHZ VCC 8 4 X1 X2 SQW/OUT SCL SDA VCC GND DS1307 Vbat 7 6 5 R18 SCL 330 R17 SDA 3 330 BT1 3v R20 10k VCC FIG. 4.5 COMUNICACIÓN I2C R21 10k VCC 77 4.7 PRÁCTICA 7 COMUNICACIÓN SPI 4.7.1 Objetivos • Usar motores paso a paso • Verificar la comunicación serial SPI mediante el control de dos motores paso a paso 4.7.2 Desarrollo Programa para manejar un motor de pasos por medio de la comunicación SPI. El motor gira en sentido horario con un mensaje en el LCD que indica que presionando el número 4 del teclado matricial el motor gira indefinidamente a la izquierda, o si se presiona el número 6 el motor gira indefinidamente a la derecha o si se presiona el número 5 cuando el motor esté girando se para hasta darle una nueva orden. 78 CONCLUSIONES Y RECOMENDACIONES • El Módulo Didáctico basado en el microprocesador ATMEGA 8 es una herramienta de aprendizaje práctica, eficaz y muy confiable, que con el desarrollo de las prácticas va mostrando progresivamente las características básicas del microcontrolador así como también las facilidades que nos ofrece el software que se utiliza para la elaboración de proyectos. • El software de programación BASCOM, es una herramienta poderosa que permite depurar y simular un proyecto antes de ser probado con el hardware, con el consecuente ahorro de recursos como tiempo y dinero. • Los ejemplos que incluye el software Bascom AVR son de gran ayuda para incursionar en el mundo de los Microcontroladores AVR ATMEL. • Se realizó el diseño y la implementación de las comunicaciones seriales I2C y SPI y se comprobó el funcionamiento de los dos tipos de comunicaciones, con sendas prácticas de fácil entendimiento, quedando así demostrado el funcionamiento de este tipo de comunicaciones. • Con este Módulo Didáctico se mejora el equipamiento en el área de laboratorios de la ESFOT con un equipo de aprendizaje que brinda al estudiante acceso a tecnologías innovadoras y recientes para mejorar su capacitación. 79 REFERENCIAS BIBLIOGRÁFICAS • BASCOM Programming of Microcontrollers with Ease: An Introduction by Program Examples, Claus Kuhnel, USA/2001, Universal Publisher. • Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001. • Programming and Customizing the AVR Microcontroller, Grade Dhananjay, 2001, Mcgraw Hill. • EL BUS I2C, José Nail V. • http://www.comunidadelectronicos.com/articulos/i2c.htm • http://en.wikibooks.org/wiki/Atmel_AVR • http://dinastiasoft.com.ar/bascomavr.htm • http://www.digchip.com/datasheets/parts/datasheet/054/ATMEGA8.php • http://www.mcselec.com/bascom-avr.htm • http://www.atmel.com/products/avr • http://www.avr-forum.com/ 80 ANEXOS: • Glosario de términos • 7 Programas usados en las prácticas para probar el correcto funcionamiento del Módulo Didáctico para el Microcontrolador Atmega 8. • Diagrama esquemático del circuito del Módulo Didáctico para el Microcontrolador Atmega 8. • Manual del usuario 81 GLOSARIO DE TERMINOS ADC o A/D CONVERTER (Convertidor (Convertidor analógico/digital).analógico/digital Dispositivo o circuito electrónico que convierte una entrada analógica en una señal digital. ALU (Arithmetic Logic Unit).- Unidad Lógica Aritmética.- Bloque interno de la CPU de un sistema microprocesador, que tiene como objetivo realizar una serie de cálculos básicos con los datos aplicados a su entrada y presentar el resultado en su registro de salida. ARQUITECTURA HARVARD.- Arquitectura que dispone de dos memorias independientes, una que contiene solo instrucciones y otra solo datos, con sus respectivos sistemas de buses de acceso. ASSEMBLER.ASSEMBLER. Programa que convierte una lista de instrucciones (programa fuente) editadas en código ensamblado para un procesador concreto, en una lista de instrucciones de máquina directamente ejecutables por dicho procesador. ATMEL AVR.- El Atmel AVR es una familia de los microcontroladores del RISC de Atmel. La arquitectura del AVR fue concebida por dos estudiantes en el Instituto Noruego de la Tecnología (NTH). BASCOM-AVR.- Es un compilador de BASIC para la familia AVR de ATMEL, desarrollado por la empresa Holandesa MCS Electronic. BAUDIO.- Número de veces por segundo en que puede cambiar el nivel de una señal digital para enviar un pulso. En señales binarias, el número de baudios es igual al de bits por segundo. CISC (Complex Instruction Set Computer).- Computadores de Juego de Instrucciones Complejo. EEPROM (Electrically Erasable And Programmable Read-Only Memory).- Memoria Solo de Lectura Programable y Borrable Eléctricamente I2C (Inter-Integrated Circuit).- Tipo de comunicación serial, que usa dos alambres para la comunicación entre Circuitos Integrados. ISP (In-System Programmable).- Programable en Sistema LANGUAGE BASIC.- desarrollado como lenguaje para entrenamiento y representación de algoritmos. Es el lenguaje de alto nivel más extendido entre los ordenadores domésticos y personales por su facilidad de aprendizaje. 82 LCD (Liquid Crystal Display).- Visualizador de cristal líquido. PWM (Pulse Width Modulation).- Modulación por Amplitud de Impulsos RISC (Reduced Instruction Set Computer). - Computadores de Juego de Instrucciones Reducido RS-232 (Recommended Standard 232).- Estándar de comunicaciones desarrollado por la “Electronic Industries Association” (EIA). RX.- Receptor SPI (Serial Peripheral Interface).- La Interfaz Periférica Serial es un subsistema de comunicaciones serial independiente, que permite comunicación sincrónica de dispositivos periféricos con dispositivos maestros (CPU o MCU, etc.) SRAM (Random Access Memory STATIC).- Memoria de Acceso Aleatorio Estática TX.- Transmisor USART (Universal Synchronous/Asynchronous Receiver/Transmitter).Receiver/Transmitter) Transmisor/receptor sincrónico/asincrónico universal, utilizado frecuentemente para convertir los datos en paralelo de un procesador en datos serie para realizar una transmisión. 83 84 1 2 3 4 5 6 A A VCC R1 SDA O1 DO SCL O2 CLK LCD1 LCD ADC1 6 5 4 3 2 1 DISPLAY DE CRISTAL LIQUIDO Gnd Vcc Ctrs Rs R/w E Db0 Db1 Db2 Db3 Db4 Db5 Db6 Db7 A K 5K J4 SWITCH 2P 2C VCC VCC GND GND 1 VCC U1 R6 4.7k VCC Vs 10K 3 LM35 B PC6(RESET) PD0(RXD) PD1(TXD) PC5(ADC5/SCL) PD2(INT0) PC4(ADC4/SDA) PD3(INT1) PC3(ADC3) PD4(XCK/T0) PC2(ADC2) PD5(T1) PC1(ADC1) PD6(AIN0) PC0(ADC0) PD7(AIN1) 2 3 4 5 6 11 12 13 ADC0 GND 2 U6B A1 RXD TXD R2 VOUT TL1 TECLADO VCC 7 R4 100 VCC 8 VCC GND 20 21 22 C8 0.1uF C7 0.1uF AVCC AREF GND PB0(ICP1) PB1(OC1A) PB2(SS/OC1B) PB3(MOSI/OC2) PB4(MISO) PB5(SCK) PB6(XTAL1/TOSC1) PB7(XTAL2/TOSC2) 1 28 27 26 25 24 23 RESET S1 SW-PB ADC1 ADC0 O1 O2 DI CS 1 2 3 4 5 6 7 8 9 0 A B 5 4 3 C D E F F1 F2 F3 F4 C1 C2 C3 C4 LED D8 4050 U5D 9 14 15 16 17 MOSI 18 MISO 19 SCK 9 10 LED D7 7 LED D6 LED D5 VCC LED D4 LED 16 + 1uF C1 C16 V- C2+ 1uF C214 RS-OUT1 7 RS-OUT2 13 8 TTL-OUT1 RS-IN2 TTL-OUT2 MAX232 X1 X2 SQW/OUT SCL SDA VCC GND Vbat 7 6 5 R18 SCL 330 R17 SDA 3 330 BT1 3v DS1307 R20 10k R21 10k 330 VCC VCC 330 R9 LED 330 4 VCC 5 1uF J3 SWITCH 2P C 10 TTL-IN2 RS-IN1 1uF C3 8 4 11 TXD TTL-IN1 12 RXD 9 GND 1 2 J1 3 CON3 3 VCC J5 U7 VCC 15 C 1 VCC 3 2 1 C1+ + + V+ + VCC 2 15 4050 C4 330 D3 U5F 14 U3 U9 1 2 32KHZ R10 2 4050 D11 LED XTAL1 330 R11 4 4050 U5A B 330 R12 12 3 R19 330 R13 6 4050 U5E 11 VCC 330 R14 10 4050 U5C ATMEGA8 R15 2 5 VCC R16 D9 4050 U5B C2 D10 LED 330 4050 U6A 1 2 3 4 5 6 7 8 R8 330 C9 100nF D13 D2 LED VCC QB QC QD QE QF QG QH GND U8 VCC QA SER IN G RCLOCK SRCLK SRCLR SQH 16 15 14 DI 13 GND 12 CS 11 CLK 10 VCC DO 9 1 2 3 4 5 6 7 8 10 IN 1 IN 2 IN 3 IN 4 IN 5 IN 6 IN 7 IN 8 DIODE CLAMP 74HC595 VCC OUT 1 OUT 2 OUT 3 OUT 4 OUT 5 OUT 6 OUT 7 OUT 8 18 17 16 15 14 13 12 11 1 2 3 4 5 6 7 8 9 10 VCC ULN2803A(18) CON10 DIODE R7 100k U4 J2 1 2 3 4 5 6 7 8 AC1 JACK1 IN+ i Layout Directive D12 U2 78L05 JACK IN- + i Layout Directive D 1 V IN + C5 1000uF 3 VDD + C6 10uf VCC R3 330 CON8 AC2 19 11 13 15 17 1G A1 A2 A3 A4 2G B1 B2 B3 B4 1Y1 1Y2 1Y3 1Y4 2Y1 2Y2 2Y3 2Y4 18 16 14 12 MISO MOSI 9 7 5 3 SCK RESET D 74F244 2 BRIDGE1 V OUT GND 1 2 4 6 8 D1 LED Title Size Number Revision C Date: File: 1 2 3 4 5 26/07/2006 C:\CRISS\..\Modulo_Atmega8.Sch Sheet of Drawn By: 6 85 86 MANUAL DEL USUARIO INFORMACIÓN IMPORTANTE DE SEGURIDAD: Como cualquier producto electrónico estas precauciones tienen que ser observadas al usar este producto. - El rango de temperatura de operación del microcontrolador interno es de -55ºC a +125ºC, pero el circuito no se debe exponer a temperaturas que puedan dañar el material de la caja (acrílico) o a elementos delicados como el Lcd además es muy importante tener cuidado en la manipulación del módulo, para evitar golpes o rupturas del material. - No exponga al módulo al contacto con líquidos o a la humedad - Al circuito se lo alimenta con un adaptador que suministra un voltaje de 12 V, internamente el módulo cuenta con un circuito que evita una polarización inversa por error, y además reduce este voltaje a 5Vdc. Utilice adaptadores con las mismas características indicadas en este manual. - El circuito cuenta con un integrado DS1307 que es, alimentado por una batería de litio de 3 voltios, esta batería debe ser cambiada cada tres años. - Para el correcto funcionamiento del módulo, asegurese que todos los cables de comunicación estén correctamente conectados y en el lugar correcto. 87 DESCRIPCIÓN DEL MÓDULO Este manual describe las funciones básicas y el modo de funcionamiento del Módulo Didáctico para el Microcontrolador Atmega 8. 1. Módulo 88 A B 2 6 C 1 5 4 8 9 7 0 * 3 PANEL SUPERIOR 1. Led indicador de encendido.- Indica que el módulo esta en funcionamiento. 2. Led indicador de programación.- Se enciende en el momento en el que se esta realizando la grabación del programa en la memoria flash del microcontrolador. 3. Interruptor 1.- Con este interruptor se escoge el tipo de comunicación que se va a realizar, dependiendo de la práctica que se desee, puede ser comunicación SPI o I2C. 4. Potenciómetro 1.- Para realizar la conversión Analógica – Digital. 89 PANEL FRONTAL 1 2 4 5 6 B 7 8 9 C D D * A 5. LCD (Display de Cristal Líquido). 6. Teclado matricial 4 x 4. 7. Interruptor 2.- Este interruptor habilita o deshabilita al teclado o al juego de leds, para realizar la práctica. 8. Led indicador del reloj.- Indica la frecuencia a la que esta oscilando el reloj interno del Módulo. 9. Potenciómetro 2.- Este potenciómetro regula el contraste del LCD. 10. Sensor de temperatura LM35. 90 PANEL POSTERIOR 11. Conector para la comunicación serial SPI. 12. Conector para la comunicación serial RS-232. 13. Conector del cable programador. 14. Interruptor 3.- Interruptor de encendido. 15. Pulsador 1.- Se usa para resetear al circuito. 16. Conector de voltaje. 91 2. Un cable programador (DB9 – DB25) 3. Un cable para la comunicación RS-232 (DB9 – DB9) 4. Un motor Paso a paso con su conector 92 5. Un adaptador TECH, modelo AD-1200F Como un paso previo a utilizar el módulo, es necesario que el estudiante tenga editado y compilado en el programa BASCOM, el programa que desea probar. 1 93 USO DEL MODULO - Para comenzar a utilizar el módulo, conecte el plug del adaptador en el conector de voltaje (16) y encienda el módulo (14). - Conecte el cable programador (DB9 – DB25) entre el puerto paralelo de la computadora y el conector del cable programador (13). - Escoja el programador STK200/STK300 en las opciones del programa Bascom. - Cargue el programa que se va a probar en el microcontrolador con la opción RUN PROGRAMMER, en ese momento se encenderá el led indicador de programación, lo que asegura que el programa se ha cargado en la memoria flash exitosamente. - Compruebe el correcto funcionamiento del programa que desea probar usando los periféricos del módulo. Estos pasos son los mismos para cualquier programa que se desee probar, a continuación se explicara los pasos adicionales necesarios para cada una de las prácticas desarrolladas. PRÁCTICA NOMBRE PASO 1 PASO 2 1 Encendido secuencial de LEDS. Coloque el interruptor 2 en la posición LEDS. - 2 Manejo de temporizadores. - - 3 Manejo del LCD. Con el potenciómetro 2, regule el contraste del LCD. - 4 Adquisición de datos. Coloque el interruptor 2 en la posición TECLADO. Con el potenciómetro 2, regule el contraste del LCD. 5 Comunicación serial RS-232. Conecte el cable comunicación RS-232. Encere el potenciómetro 1. 6 Comunicación I2C. Coloque el interruptor 1 en la posición I2C. - 7 Comunicación SPI. Conectar el motor paso a paso en el conector de la comunicación serial SPI. Coloque el interruptor 1 en la posición SPI. de