1
ESCUELA POLITÉCNICA
NACIONAL
ESCUELA DE FORMACIÓN TECNOLÓGICA
MÓDULO DIDÁCTICO PARA EL MICROCONTROLADOR
ATMEGA 8
PROYECTO PREVIO A LA OBTENCIÓN DEL TÍTULO DE TECNÓL OGO
EN ELECTRÓNICA Y TELECOMUNICACIONES
GORDÓN MOSQUERA CHRISTIAN ROBERTO
NAGUA SANDOVAL FANNY MARGARITA
DIRECTOR: Ing. ALCIVAR COSTALES
Quito, Mayo 2006
2
DECLARACIÓN Nosotros, Gordón Mosquera Christian Roberto y Nagua Sandoval Fanny Margarita,
declaramos que el trabajo aquí descrito es de nuestra autoría; que no ha sido previamente
presentada para ningún grado o calificación profesional; y, que hemos consultado las
referencias bibliográficas que se incluyen en este documento.
La Escuela Politécnica Nacional, puede hacer uso de los derechos correspondientes a este
trabajo, según lo establecido por la Ley de Propiedad Intelectual, por su Reglamento y por
la normatividad institucional vigente.
CHRISTIAN GORDON MARGARITA NAGUA
3
CERTIFICACIÓN Certifico que los señores Christian Roberto Gordón Mosquera y Fanny Margarita Nagua
Sandoval, han culminado con su Proyecto de Titulación.
Ing. Alcívar Costales
DIRECTOR DE PROYECTO
4
AGRADECIMIENTO
Al culminar el presente trabajo, quiero
expresar mi agradecimiento sincero a mis
padres por darme la vida y la posibilidad de
adquirir una Carrera, gracias por su
abnegada labor.
Y otro agradecimiento a mis maestros que me
impartieron sus conocimientos a lo largo de
toda mi vida estudiantil y de manera especial
al Ing. Alcívar Costales por sus sabios
consejos para guiar el presente trabajo.
CHRISTIAN
5
DEDICATORIA
El presente trabajo se lo dedico con mucho
cariño a mi Madre y de manera muy especial
a mi amado hijo JAVIER, porque ustedes son
las estrellas que guían mi camino.
Que dios les bendiga y les tenga muchos años
a mí lado.
CHRISTIAN
6
AGRADECIMIENTO Al Ing. Alcívar Costales, por apoyarnos constantemente en la realización de éste proyecto, ya que es un tema importante para el aprendizaje de los estudiantes de años inferiores. A mis amigos más cercanos, por su apoyo incondicional durante estos años de estudio.
MARGARITA
7
DEDICATORIA A mi hijo por ser el ser mas especial en mi vida, por todo éste tiempo que ha estado a mi lado dándome su cariño y amor. A mi madre y hermanos por su apoyo, esfuerzo y comprensión en los momentos difíciles de mi vida. A mis abuelitos por su cariño y amor.
MARGARITA
8
CONTENIDO
INTRODUCCIÓN 11
CAPÍTULO 1.- EL MICROCONTROLADOR ATMEGA 8
1.1 CARACTERÍSTICAS DEL ATMEGA 8 13
1.2 DESCRIPCIÓN DE PINES 15
1.3 ARQUITECTURA DEL ATMEGA 8 20
1.4 REGISTROS DE PROPÓSITO GENERAL 23
1.5 UNIDAD ARITMÉTICA LÓGICA 24
1.6 FLASH PROGRAMABLE 25
1.7 MEMORIA DE DATOS SRAM 25
1.8 MEMORIA DE DATOS EEPROM 26
1.9 REGISTRO DE ESTADO 26
1.10 STACK POINTER 28
1.11 MANEJO DEL RESET Y DE LAS INSTRUCCIONES 29
CAPÍTULO 2.- COMUNICACIÓN SERIAL DEL ATMEGA 8
2.1 INTRODUCCIÓN 32
2.2 TIPOS DE COMUNICACIONES SERIALES 32
2.2.1 COMUNICACIÓN SERIAL RS-232 34
2.2.1.1 EL CIRCUITO MAX 232 35
2.2.2 EL BUS I2C 36
2.2.2.1 CONCEPTO DEL BUS I2C 37
2.2.2.2 TRANSFERENCIA DE BIT 37
2.2.2.3 TRANSFERENCIA DE DATOS 39
2.2.2.4 DEFINICIONES BÁSICAS DEL BUS I2C 41
2.2.2.5 FORMATOS DE DIRECCIÓN 45
2.2.3 INTERFAZ PERIFÉRICA SERIAL (SPI) 46
2.2.3.1 INTRODUCCIÓN 46
2.2.3.2 DESCRIPCIÓN FUNCIONAL 47
9
2.2.3.3 FORMATO DE TRANSFERENCIA DEL SPI 47
2.2.3.4 CONTROLES DE FASE DE RELOJ Y POLARIDAD 48
2.2.3.5 SEÑALES DEL SISTEMA SPI 48
2.2.3.6 ERRORES DEL SISTEMA SPI 50
2.2.3.7 REGISTRO DEL SISTEMA SPI 51
CAPÍTULO 3.- MÓDULO DE PRÁCTICAS Y FUNDAMENTOS BÁSI COS DEL SOFTWARE 3.1 MÓDULO DE PRÁCTICAS 55
3.2 CARACTERÍSTICAS DEL MÓDULO 55
3.2.1 PROGRAMADOR ISP 55
3.2.2 FUENTE DE ALIMENTACIÓN 56
3.2.3 LCD ALFANUMÉRICO ESTÁNDAR 57
3.2.4 TECLADO MATRICIAL DE 4*4 58
3.2.5 RESET 59
3.2.6 REAL TIME 59
3.3 FUNDAMENTOS BÁSICOS DEL SOFTWARE BASCOM 60
3.3.1 REVISIÓN DE LA SINTAXIS 62
3.3.2 REVISIÓN DEL PROGRAMA 63
3.3.3 INFORME DE RESULTADOS 64
3.3.4 SIMULADOR 65
3.3.5 PROGRAMADOR 67
3.3.6 EMULADOR DEL TERMINAL RS-232 68
CAPÍTULO 4.- PRUEBAS Y RESULTADOS 4.1 PRÁCTICA 1: ENCENDIDO SECUENCIAL DE LOS LEDS EN UN PUERTO
DEL MICROCONTROLADOR
4.1.1 OBJETIVO 70
4.1.2 DESARROLLO 70
4.2 PRÁCTICA 2: MANEJO DE TEMPORIZADORES 72
4.2.1 OBJETIVO 72
4.2.2 DESARROLLO 72
10
4.3 PRÁCTICA 3: MANEJO DEL LCD 73
4.3.1 OBJETIVO 73
4.3.2 DESARROLLO 73
4.4 PRÁCTICA 4: ADQUISICIÓN DE DATOS 74
4.4.1 OBJETIVO 74
4.4.2 DESARROLLO 74
4.5 PRÁCTICA 5: COMUNICACIÓN SERIAL RS-232 75
4.5.1 OBJETIVO 75
4.5.2 DESARROLLO 75
4.6 PRÁCTICA 6: COMUNICACIÓN I2C 76
4.6.1 OBJETIVO 76
4.6.2 DESARROLLO 76
4.7 PRACTICA 7: COMUNICACIÓN SPI 77
4.7.1 OBJETIVO 77
4.7.2 DESARROLLO 77
CONCLUSIONES Y RECOMENDACIONES 78
REFERENCIAS BIBLIOGRÁFICAS 79
ANEXOS 80
11
INTRODUCCIÓN
El aprendizaje de los microcontroladores se ha basado en el conocimiento y
estudio del 8031 y el 8051. Estos dispositivos son una herramienta importante
para que el estudiante comience a conocer las posibilidades que ofrecen para
desarrollar diferentes proyectos, pero se debe tomar en cuenta que los
microcontroladores, que son tema de estudio a lo largo de la carrera, no
presentan las facilidades y ventajas que hoy en día se puede encontrar en el
mercado.
El desarrollo tecnológico del presente siglo permite tener acceso a nuevas
tecnologías, como es el caso de los microcontroladores de tipo RISC,
especialmente los de la casa Atmel, que permiten tener múltiples opciones de
trabajo al tener incorporados dentro de los mismos, diversos periféricos como
conversores analógico-digitales, sistemas PWM (Modulación por ancho de pulso),
comunicaciones I2C, SPI, RXTX ( transmisión serial).
A esta familia pertenece el microcontrolador ATMEGA 8, con el que se desarrolla
el proyecto de diseñar y construir un Módulo Didáctico para verificar el correcto
funcionamiento del microcontrolador, a la vez que se diseñará un conjunto de
prácticas para que el estudiante se familiarice y aprenda a usar estos
microcontroladores AVR e implementar los distintos programas aplicables al
Módulo Didáctico utilizando el software BASCOM.
El uso del software BASCOM permite diseñar con mayor facilidad la aplicación
directa sobre periféricos, lo cual transforma a este módulo en un sistema tipo
microcomputadora, el lenguaje similar al BASIC permite que el estudiante
aprenda a manejar tanto el microcontrolador ATMEGA como los periféricos
externos en forma rápida, amena y completa.
Este Módulo no sustituirá una clase normal con un instructor, sino que este servirá
como apoyo práctico a la teoría dictada en clases; se debe aclarar que este
12
sistema, luego de una introducción teórica en clase, podría ser utilizado como
módulo de desarrollo de proyectos, en el que el alumno desarrolla aplicaciones.
El sistema constará de un módulo en el que se tendrán los dispositivos
electrónicos necesarios (Lcd, teclado, leds, potenciómetros, interfaz serial, interfaz
paralela, pulsadores, etc.) para la realización de las prácticas, así como también
el grabador del microcontrolador con su respectiva interfaz; con lo cual se facilita
al alumno el desarrollo y ejecución de proyectos.
Para la programación del microcontrolador se utilizará el software BASCOM AVR,
éste permite una programación en lenguaje simple para el alumno. Además este
software presenta varias ventanas para simulación, con lo cual el alumno puede
efectuar una revisión del programa previo a la grabación del mismo en el
microcontrolador.
En las prácticas desarrolladas en este proyecto, se pondrá especial énfasis en el
perfeccionamiento del manejo del software por parte del alumno; para que el
mismo se encuentre en la capacidad de desarrollar proyectos, con la explotación
al máximo de las herramientas y ejemplos que presenta el software.
13
CAPÍTULO 1
EL MICROCONTROLADOR ATMEGA 8
1.1 CARACTERÍSTICAS DEL ATMEGA 8
El Atmega 8 es un microcontrolador de la familia Atmel, contiene una arquitectura
tipo RISC, sus instrucciones se ejecutan en solo un ciclo de máquina, su
estructura elimina la necesidad de usar componentes externos ya que
internamente tiene: osciladores, USART, SPI, resistencias pull-up, modulación por
anchura de pulso (PWM), convertidor ADC, comparador analógico y cronómetros,
éstas son solo algunas de las características que se encuentran en este
dispositivo. Su programación es posible realizarla en Lenguaje C, assembly o
Basic. Todo su sistema está depositado en una sola pastilla.
“El Atmega 8 tiene las siguientes características:
• Utiliza arquitectura RISC
• 130 instrucciones, las más simples se ejecutan en un solo ciclo de reloj
• 8 Kbytes de Memoria Flash
- ISP: Programable en sistema.
- Capacidad Read-While-Write, (Lee mientras escribe). Duración: 1.000
ciclos de escritura/borrado.
• 512 bytes de memoria EEPROM.
- Duración: 100.000 ciclos de escritura/lectura
• 1 Kbyte de memoria SRAM
• Seguro programable para la seguridad del software
• 32 x 8 registros de trabajo de propósito general
• 23 líneas de entrada/salida de propósito general.
• USART (Universal Synchronous Asynchronous Receiver Transmitter)
programable.
• Reloj en tiempo real
• Interfaz serial SPI
• Vcc: 4.5 – 5.5 V
• Frecuencia de funcionamiento 0 – 16 MHz.
14
• 3 timer/counter.
• Interrupciones internas y externas.
• Interfaz serial 2-wire.
• 6 canales ADC, donde 4 tienen 10 bits de exactitud, y 2 tienen 8 bits de
exactitud.
• 1 Timer Watchdog programable con oscilador interno.
• 5 modos de ahorro de energía, seleccionado por software”.1
- “El modo Idle (ocioso) detiene la CPU, mientras permite que la memoria
SRAM, los timer/counters, el puerto SPI, e interrupciones del sistema
continúen funcionando.
- Modo Power-down (baja energía), guarda el contenido del registro, pero
congela el oscilador, inhabilitando el resto de funciones del chip hasta la
siguiente interrupción o hasta que se realice un reset del hardware.
- En el Power save (modo economizador), el contador de tiempo asincrónico
continúa funcionando, permitiendo al usuario mantener una base de
tiempo, mientras el resto de dispositivos continúa en reposo.
- En el modo de reducción del nivel de ruidos ADC, detiene la CPU y todos
los módulos de entrada y salida excepto el contador asincrónico y el
Conversor Análogo-Digital (ADC), para reducir al mínimo el ruido de
conmutación durante la conversión ADC.
- En standby (modo de espera) el oscilador cristal/resonator sigue
funcionando, mientras el resto de dispositivos sigue en reposo. Esto
permite el reinicio muy rápido combinado con el consumo bajo de
energía.”2
El microcontrolador AVR tiene y combina un amplio sistema de instrucciones, con
32 registros de propósito general. Las operaciones de la ALU entre registros son
ejecutadas en el archivo de registro. Las operaciones son divididas en tres
categorías: aritméticas, lógicas y funciones de bit. La arquitectura que resulta es
1 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 1 2 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 30-31
15
más eficiente, y alcanza rendimientos de procesamiento de hasta diez veces más
rápido que los microcontroladores con tecnología CISC.
La Memoria Flash ISP (Programable en sistema) permite que la memoria de
programa del chip sea reprogramada en el propio sistema a través de la interfaz
SPI o mediante un programador de memoria convencional. Combinando una
tecnología RISC de 8 bits con un CPU con memoria Flash, el Atmega 8 resulta un
poderoso microcontrolador que proporciona una alta flexibilidad en los diseños, a
bajo costo aportando una solución muy efectiva para la mayoría de las
aplicaciones de control.
El Atmega 8 está apoyado por un completo juego de programas y sistemas de
desarrollo, incluyendo: compiladores, ensambladores, simuladores, emuladores
en circuito, y kits de evaluación.
1.2 DESCRIPCIÓN DE PINES
(RESET) PC6 1 28 PC5 (ADC5/SCL)
(RXD) PD0 2 27 PC4 (ADC4/SDA) (TXD) PD1 3 26 PC3 (ADC3) (INT0) PD2 4 25 PC2 (ADC2) (INT1) PD3 5 24 PC1 (ADC1) (XCK/T0) PD4 6 23 PC0 (ADC0) VCC 7 22 AGND GND 8 21 AREF (XTAL1/TOSC1) PB6 9 20 AVCC (XTAL2/TOSC2) PB7 10 19 PB5 (SCK) (T1) PD5 11 18 PB4 (MISO) (AIN0) PD6 12 17 PB3 (MOSI/OC2) (AIN1) PD7 13 16 PB2 (SS/OC1B) (ICP) PB0 14 15 PB1 (OC1A)
FIGURA 1.1 ESQUEMA DE PINES DEL ATMEGA 8
“Vcc
Fuente de voltaje digital
GND
Tierra de la fuente de voltaje digital
16
RESET
Entrada de RESET. Se genera un reset aplicando un nivel bajo de voltaje en este
pin por un periodo de tiempo más largo que un ciclo de máquina, incluso si el reloj
no está funcionando. Pulsos más cortos no generan un estado de reset.
XTAL 1
Entrada al amplificador inversor del oscilador y entrada al circuito de operación
interno del reloj.
XTAL2
Salida del amplificador inversor del oscilador
AVCC
Este es un pin de fuente de voltaje para el Puerto A y sus ADCs (Conversores
Analógico-Digitales). Si sus ADCs no son utilizados, este pin debe ser conectado
a Vcc. Si sus ADCs sí son utilizados, este pin debe ser conectado a Vcc pero
mediante un filtro pasa-bajos.
AGND
Tierra analógica. Si el tablero presenta diferentes tierras, se debe conectarlas a
este pin. En otro caso se conecta a GND
AREF
Este es el pin de referencia analógica para los ADC”.3
Puerto B / XTAL 1 / XTAL 2 / TOSC 1 / TOSC 2
“El puerto B es un puerto de entrada/salida bi-direccional de 8 bits, con
resistencias internas de pull-up. Como salidas, los pines del puerto B tienen
limitada la corriente de salida, si las resistencias pull-up están activadas. Los
pines del puerto B tienen tres estados cuando la condición de reset llega a
activarse, incluso si el reloj no está funcionando”.4
3 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 4-5 4 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 4.
17
Dependiendo de la configuración de las opciones de reloj, el pin PB6 puede ser
usado como entrada al amplificador inversor del oscilador y entrada al circuito de
operación interno del reloj.
Dependiendo de la configuración de las opciones de reloj, el pin PB7 puede ser
usado como salida del amplificador inversor del oscilador
Los pines del puerto B tienen también algunas funciones especiales, que se las
resume en el siguiente cuadro.
PIN DEL PUERTO B
FUNCIÓN ALTERNA
PB7
XTAL2 (Chip Clock Oscillator pin 2)
TOSC2 (Timer Oscillator pin 2)
PB6
XTAL1 (Chip Clock Oscillator pin 1 or External clock input)
TOSC1 (Timer Oscillator pin 1)
PB5
SCK (SPI Bus Master clock Input)
PB4
MISO (SPI Bus Master Input/Slave Output)
PB3
MOSI (SPI Bus Master Output/Slave Input)
OC2 (Timer/Counter2 Output Compare Match Output)
PB2
SS (SPI Bus Master Slave select)
OC1B (Timer/Counter1 Output Compare Match B Output)
PB1
OC1A (Timer/Counter1 Output Compare Match A Output)
PB0
ICP (Timer/Counter1 Input Capture Input)
CUADRO 1.1 DESCRIPCIÓN DE PINES DEL PUERTO B
Pórtico C / RESET
“El puerto C es un puerto de entrada/salida bi-direccional de 8 bits, con
resistencias internas de pull-up. Como salidas, los pines del puerto C tienen
limitada la corriente de salida, si las resistencias pull-up están activadas.
18
Los pines del puerto C tienen tres estados cuando la condición de reset llega a
activarse, incluso si el reloj no está funcionando”.5
PC6 es usado como entrada de Reset. Un nivel bajo de voltaje en este pin por un
periodo de tiempo aproximado de 1.5 µs generará un reset, incluso si el reloj no
está funcionando. Pulsos más cortos no generan un estado de reset.
Los pines del puerto C tienen también algunas funciones especiales, que se las
resume en el siguiente cuadro.
PIN DEL PUERTO C
FUNCIÓN ALTERNA
PC6
RESET (Reset pin)
PC5
ADC5 (ADC Input Channel 5)
SCL (2-wire Serial Bus Clock Line)
PC4
ADC4 (ADC Input Channel 4)
SDA (2-wire Serial Bus Data Input/Output Line)
PC3
ADC3 (ADC Input Channel 3)
PC2
ADC2 (ADC Input Channel 2)
PC1
ADC1 (ADC Input Channel 1)
PC0
ADC0 (ADC Input Channel 0)
CUADRO 1.2 DESCRIPCIÓN DE PINES DEL PUERTO C
Puerto D
“El puerto D es un puerto de entrada/salida bi-direccional de 8 bits, con
resistencias internas de pull-up. Como salidas, los pines del puerto D tienen
limitada la corriente de salida, si las resistencias pull-up están activadas. Los
pines del puerto D tienen tres estados cuando la condición de reset llega a
activarse, incluso si el reloj no está funcionando”.6
5 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 5. 6 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 5.
19
Los pines del puerto D tienen también algunas funciones especiales, que se los
resume en el siguiente cuadro.
PIN DEL PUERTO D
FUNCIÓN ALTERNA
PD7
AIN1 (Analog Comparator Negative Input)
PD6
AINO (Analog Comparator Positive Input)
PD5
T1 (Timer/Counter 1 External Counter Input)
PD4
XCK (USART External Clock Input/Output)
T0 (Timer/Counter 0 External Counter Input
PD3
INT1 (External Interrupt 1 Input)
PD2
INT0 (External Interrupt 0 Input)
PD1
TXD (USART Output Pin)
PD0
RXD (USART Input Pin)
CUADRO 1.3 DESCRIPCIÓN DE PINES DEL PUERTO D
20
1.3 ARQUITECTURA DEL ATMEGA 8
FIGURA 1.2 ARQUITECTURA DEL ATMEGA 8
El rápido acceso a los registros, se basa en el concepto de que los 32 registros de
8 bits, son accesados en un solo ciclo de reloj. Lo cual significa que, durante un
ciclo de reloj es ejecutada una operación en la Unidad Aritmética Lógica (ALU).
Dos operandos son tomados del archivo de registros, las operaciones son
ejecutadas y el resultado es colocado en el mismo archivo, todo en un ciclo de
reloj.
Flash Program Memory
Instruction Register
Program Counter
32 x 8 General Purpose
Registrers
Data SRAM
Status and Control
Interrupt Unit
SPI Unit
Watchdog Timer
Analog Comparator
i/O Module 1
i/O Module 2
i/O Module n
EEPROM
I/O Lines
Instruction Decoder
21
“Seis de los 32 registros de trabajo pueden usarse como 3 registros de 16 bits que
sirven como punteros de direccionamiento indirecto para direccionar el espacio de
datos, lo cual permite un eficiente cálculo de direcciones. Estos registros con
funciones especiales son el registro X, el Y y el Z, todos de 16 bits y ocupan las
direcciones de memoria: 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F respectivamente”.7
La ALU soporta operaciones aritméticas y lógicas entre registros o entre un
registro y una constante. Las operaciones simples con registros son también
ejecutadas por la ALU. Después de una operación aritmética el registro de estado
se carga con la información del resultado de la operación.
Los registros de trabajo están colocados en las 32 primeras posiciones de la
memoria de datos ($00 - $1F), permitiendo que su acceso sea como si fueran
lugares de memoria convencionales.
El espacio de memoria contiene 64 direcciones para las funciones propias de la
CPU como son los registros de Control, SPI, los Contadores/Timer, conversores
A/D, y otras funciones. Estos registros están colocados a continuación de los de
trabajo, de la dirección 0x20 a la 0x5F.
Para maximizar el funcionamiento, el AVR utiliza la arquitectura Harvard con
memorias y buses separados para el programa y para los datos. Mientras que se
está ejecutando una instrucción, la siguiente instrucción es buscada por la
memoria del programa. Este concepto permite que las instrucciones sean
ejecutadas en cada ciclo de reloj. La memoria del programa es una memoria
flash re-programable en sistema (ISP).
Con las instrucciones de salto incondicional y con la de llamada, se puede
acceder directamente a toda la memoria. La mayoría de las instrucciones AVR
tienen una longitud de 16 bits. Cada dirección de la memoria de programa
contiene una instrucción de 16 ó de 32 bits.
7 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 7.
22
Durante las interrupciones y las llamadas a subrutinas, el contador de programa
(PC) guarda las direcciones anteriores en el stack. El stack se encuentra alojado
en los datos generales de la SRAM, y consecuentemente, el tamaño del mismo es
únicamente limitado por el tamaño total de la SRAM y de su uso. Todos los
programas del usuario deben inicializar el SP (Stack Pointer) en la rutina de reset
(antes de ejecutar subrutinas o interrupciones). El stack pointer (SP) de 10 bits es
seleccionado para lectura/escritura en el espacio de entrada/salida.
El 1 Kbyte de datos de SRAM pueden ser fácilmente accesados mediante los
cinco modos diferentes de direccionamiento que soporta la arquitectura AVR. Los
espacios de memoria, en la arquitectura del AVR, son todos lineales y regulares.
Un módulo flexible de interrupción, tiene sus registros de control en el espacio de
entrada/salida con un bit de habilitación de interrupción global en el registro de
estado. Todas las diferentes interrupciones tienen un vector separado de
interrupción en la tabla de vectores de interrupción al inicio de la memoria de
programa. Las diferentes interrupciones tienen prioridad en concordancia con la
posición del vector de interrupción. El vector de dirección más bajo es el que tiene
la más alta prioridad.
23
1.4 REGISTROS DE PROPÓSITO GENERAL
La figura 1.3 muestra la estructura de los 32 registros de trabajo de propósito
general presentes en el Atmega 8.
7 0 Dirección R0 0x00 R1 0x01 R2 0x02 … R13 0x0D R14 0x0E
REGISTROS R15 0x0F DE R16 0x10
PROPOSITO R17 0x11 GENERAL …
R26 0x1A Registro X byte bajo R27 0x1B Registro X byte alto R28 0x1C Registro Y byte bajo R29 0x1D Registro Y byte alto R30 0x1E Registro Z byte bajo R31 0x1F Registro Z byte alto
FIGURA 1.3 ESTRUCTURA DE LOS REGISTROS DE PROPÓSITO GENERAL
La mayoría de las instrucciones que funcionan en el archivo de registros tienen
acceso directo a todos los registros, y la mayoría de ellos son instrucciones de un
solo ciclo de máquina ciclo.
Cada registro es asignado a una dirección de memoria de datos, dirigiéndolos
directamente dentro de las 32 primeras localidades del espacio de Datos del
usuario, aunque no sea físicamente implementada como localidad SRAM, esta
organización de memoria permite gran flexibilidad en el acceso a los registros,
puesto que los registros X, Y y Z pueden ser seteados para indexar cualquier
registro del archivo.
24
Registro X, registro Y y registro Z.- Los registros R26….R31 poseen algunas
funciones adicionales. Estos registros son punteros de dirección para el
direccionamiento indirecto del Espacio de Datos. Estos registros se encuentran
definidos como se muestra en la figura 1.4
15 XH XL 0
Registro X 7 0 7 0 R27 (0x1B) R26 (0x1A) 15 YH YL 0
Registro Y 7 0 7 0 R29 (0x1D) R28 (0x1C) 15 ZH ZL 0
Registro Z 7 0 7 0 R31 (0x1F) R30 (0x1E)
FIGURA 1.4 REGISTROS X, Y y Z
En los diferentes modos de direccionamiento, estos registros de dirección tienen
funciones como realizar los desplazamientos, incrementos automáticos y
decrementos automáticos.
1.5 UNIDAD ARITMÉTICA-LÓGICA (ALU)
“La ALU de alto rendimiento trabaja en conexión directa con todos los 32
registros de trabajo de propósito general. Las operaciones aritméticas entre los
registros de propósito general o entre un registro y un dato inmediato se ejecutan
dentro de un solo ciclo de reloj. Las operaciones de la ALU se dividen en tres
categorías principales - aritmética, lógico, y bit-funciones. Algunas
implementaciones de la arquitectura también proporcionan un poderoso
multiplicador que soporta multiplicaciones con signo, sin signo y formato
fraccionario”. 8
8 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 7.
25
1.6 FLASH PROGRAMABLE
El Atmega 8 contiene 8 Kbytes de memoria. Como todas las instrucciones son de
16 o 32 bit, la memoria flash está organizada como 4 x 16. La memoria flash tiene
una durabilidad de 1000 ciclos de escritura/borrado. El contador de programa
(PC) es de 12 bits, con lo que tenemos 4096 direcciones de la memoria de
programa.
1.7 MEMORIA DE DATOS SRAM
Registers File Data Address Space R0 $0000
R1 $0001
R2 $0002
….
R29 $001D
R30 $001E
R31 $001F
I/O Registers $00 $0020
$01 $0021
$02 $0022
….
$3D $005D
$3E $005E
$3F $005F
Internal SRAM $0060
$0061
…
$045E
$045F
FIGURA 1.5 MEMORIA DE DATOS SRAM
26
La figura 1.5 muestra como está organizada la memoria SRAM. “Las 1120
posiciones de memoria más bajas contienen los registros de propósito general,
los registros de entrada/salida, y los datos internos SRAM. Las primeras 96
localizaciones contienen los registros de propósito general y los registros de
entrada/salida, y las 1024 localizaciones siguientes contienen los datos internos
SRAM”.9
Los cinco diferentes modos de direccionamiento de memoria son: Directo,
Indirecto con desplazamiento, Indirecto, Indirecto con pre-decremento, e Indirecto
con post-incremento.
El direccionamiento directo alcanza todo el espacio de datos. El modo indirecto
con desplazamiento alcanza 63 direcciones de localidad, de la base de
direcciones dadas por el registro Y o Z. Cuando se usa el modo de
direccionamiento indirecto con pre-decremento y post incremento automático, las
direcciones de los registros X, Y y Z son decrementadas e incrementadas. Los 32
registros de trabajo, los 23 registros I/O y el 1 Kbyte de datos internos de SRAM
en el Atmega 8 son todos accesibles mediante estos modos de direccionamiento
1.8 MEMORIA DE DATOS EEPROM
El Atmega 8 contiene 512 bytes de memoria de datos EEPROM. La misma es
organizada como espacios de datos separados. La EEPROM tiene una duración
de aproximadamente 100.000 ciclos de lectura/escritura.
1.9 REGISTRO DE ESTADO
El registro de estado contiene la información sobre el resultado de la última
instrucción aritmética ejecutada. Esta información se puede utilizar para alterar el
normal desarrollo del programa para realizar operaciones condicionales. El
registro de estado es actualizado después de todas las operaciones de la ALU,
según lo especificado en el set de instrucciones, dando por resultado un código
9 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 15.
27
más rápido y más compacto. El registro de estado no se almacena al incorporar
una rutina de la interrupción y no se restaura automáticamente al volver de una
interrupción. Esto se debe dirigir por software.
El registro de estado se denomina SREG y se encuentra en la dirección $3F. La
descripción de los bits es la siguiente.
Bit 7 6 5 4 3 2 1 0
I T H S V N Z C SREG
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0 FIGURA 1.6 REGISTRO DE ESTADO
Todos los bits de este registro son de escritura o lectura. El valor inicial de este
registro es 0x00. La descripción de los bits es la siguiente:
Bit 7-I: Global Interrupt Enable:
Este bit es el que permite habilitar las interrupciones cuando está a 1. El control
individual de las interrupciones es configurado en los registros GIMSK y TIMSK.
Si este bit está a 0 todas las interrupciones están deshabilitadas
independientemente del estado de los registros GIMSK y TIMSK. Este bit es
puesto a 0 por hardware en el momento en el que se produce la interrupción y es
puesto de nuevo a uno tras la instrucción RETI que sirve para producir el retorno
de interrupción.
Bit 6-T: Bit Copy Storage:
Las instrucciones para copiar bits BLD (Bit LoaD) y BST (Bit STore) utilizan el bit
T como fuente o como destino para un bit. Un bit de un registro del archivo de
registros puede ser guardado en el bit T mediante la instrucción BST, y un bit en T
puede ser copiado en un bit de un registro del archivo de registros mediante la
instrucción BLD.
Bit 5-H: Half Carry Flag:
Este bit indica que se ha producido un half carry en algunas operaciones
aritméticas.
28
Bit 4-S: Sign Bit, S = S (+) V:
El bit-S realiza una operación or exclusiva entre los bits N y el bit V del registro de
estado.
Bit 3-V: Two´s Complement Overflow Flag:
Esta bandera V, soporta aritmética en complemento de 2
Bit 2-N: Negative Flag:
La bandera negativa N indica un resultado negativo tras realizar una operación
aritmética o una lógica.
Bit 1-Z: Zero Flag:
Esta bandera indica un resultado de cero tras realizar una operación aritmética o
una lógica.
Bit 0-C: Carry Flag:
Esta bandera indica un carry tras realizar una operación aritmética o una lógica.
1.10 STACK POINTER (SP)
“El stack pointer se utiliza principalmente para almacenar datos temporales, para
almacenar variables locales y para guardar la dirección de retorno después de las
interrupciones y las llamadas a las subrutinas”.10
Bit 15 14 13 12 11 10 9 8
SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
7 6 5 4 3 2 1 0
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
R/W R/W R/W R/W R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
FIGURA 1.7 STACK POINTER
10 Microcontroller with 8 Kbytes In-System Programmable Flash, Advance Information, Atmel Corporation, 2001, 10.
29
Todos los bits son de lectura y escritura y en estado inicial los 16 bits están a
cero.
Cuando las subrutinas y las interrupciones se producen, el Stack Pointer coloca
los datos en una zona de la memoria SRAM. Este espacio para los datos en la
memoria SRAM tiene que ser definido por el programa antes de que cualquier
llamada a una subrutina o cualquier interrupción sea ejecutada. El Stack Pointer
es decrementado en una unidad cuando un dato es colocado en el Stack
mediante la instrucción PUSH y es decrementado en dos unidades cuando un
dato es puesto en el Stack mediante una llamada a subrutina (CALL) o se
produce una interrupción. El Stack Pointer es incrementado en una unidad cuando
un dato es recuperado del Stack mediante la instrucción POP, y es incrementado
en dos unidades cuando un dato es devuelto del Stack mediante un retorno de
subrutina con la instrucción RET o por un retorno de una interrupción RETI.
1.11 MANEJO DEL RESET Y DE LAS INTERRUPCIONES. El microcontrolador ATMEGA 8 posee 19 fuentes de interrupción.
Todas las interrupciones tienen un vector de reset propio en el espacio de
memoria del programa. Todas las interrupciones tienen asignados unos bits que
deben ser puestos a uno conjuntamente con el bit I del registro de estado para
que las interrupciones puedan producirse.
Las direcciones más bajas del espacio de memoria de programa son
automáticamente definidas para el vector de Reset y para los vectores de
interrupción. La lista completa de vectores se muestra en la siguiente tabla. Esta
lista también determina los niveles de prioridad de las diferentes interrupciones.
La mayor prioridad tiene el vector de RESET y a continuación el vector INT0 y así
sucesivamente.
30
Vector Nº
Dirección
Fuente
Definición de la Interrupción
1 0x000 RESET Cuatro fuentes de RESET(*)
2 0x001 INT0 Interrupción Externa Requerida 0
3 0x002 INT1 Interrupción Externa Requerida 1
4 0x003 TIMER2 COMP Temporizador/Contador 2 Compare Match
5 0x004 TIMER2 OVF Temporizador/Contador 2 Sobreflujo
6 0x005 TIMER1 CAPT Temporizador/Contador 1 Evento de captura
7 0x006 TIMER1 COMPA Temporizador/Contador 1 Compare Match A
8 0x007 TIMER1 COMPB Temporizador/Contador 1 Compare Match B
9 0x008 TIMER1 OVF Temporizador/Contador 1 Sobreflujo
10 0x009 TIMER0 OVF Temporizador/Contador 0 Sobreflujo
11 0x00A SPI, STC Transferencia Serial Completa
12 0x00B USART, RXC Recepción Completa USART
13 0x00C USART, UDRE Registro de datos vacío USART
14 0x00D USART, TXC Transmisión Completa USART
15 0x00E ADC Conversión Completa ADC
16 0x00F EE_RDY Memoria EEPROM lista
17 0x010 ANA_COMP Comparador Análogo
18 0x011 TW1 Interfaz serial 2-wire
19 0x012 SPM_RDY Almacene Memoria de Programa Lista
CUADRO 1.4 FUENTES DE INTERRUPCIÓN DEL ATMEGA 8 (*) Reset al encendido, Reset externo, Reset por Watchdog, Reset por Brown-out
Fuentes de reset
Existen cuatro posibilidades para que se produzca un Reset:
• Reset al encendido.- El microcontrolador se resetea cuando el voltaje de la
fuente de alimentación está por debajo del nivel requerido para el
funcionamiento.
• Reset externo.- Cuando un nivel bajo es ingresado en el pin RESET durante
más de dos ciclos de XTAL.
31
• Reset por Watchdog.- Si el watchdog está habilitado y su tiempo de
temporización expira antes de producirse la instrucción WDR el
microcontrolador se reseteará.
• Reset por Brown-out.- El microcontrolador se resetea cuando la fuente de
voltaje Vcc está bajo el nivel de Brown-out Reset (VBOT) y el Brown-out
Detector está habilitado.
Una vez producido un RESET, todos los registros del microcontrolador son
puestos con sus valores iniciales y el programa empieza su ejecución en la
dirección $000. En esta dirección debe colocarse una instrucción de salto RJMP
para ejecutar la rutina de comienzo de programa. A continuación de la dirección
$000 y hasta la dirección $00d, se encuentran los vectores para las diferentes
interrupciones; pero si estos vectores de interrupción no son utilizados puede
colocarse código de programa en ellos.
32
CAPÍTULO 2
COMUNICACIÓN SERIAL DEL ATMEGA 8
2.1 INTRODUCCIÓN
El puerto serial de las computadoras es conocido como puerto RS-232, la ventaja
de este puerto es que todas las computadoras traen al menos un puerto serial,
este permite la comunicación entre otros dispositivos tales como otra
computadora, el mouse, impresora y para nuestro caso con los
microcontroladores.
Existen dos formas de intercambiar información binaria: paralela y serial.
La comunicación paralela transmite todos los bits de un dato de manera
simultánea, por lo tanto la velocidad de transferencia es rápida, sin embargo tiene
la desventaja de utilizar una gran cantidad de líneas, por lo tanto se vuelve más
costoso y tiene las desventaja de atenuarse a grandes distancias, por la
capacitancia entre conductores así como sus parámetros distribuidos.
2.2 TIPOS DE COMUNICACIONES SERIALES:
Existen dos tipos de comunicaciones seriales: sincrónica y asincrónica.
En la comunicación serial sincrónica además de una línea sobre la cual se
transmitirán los datos, se necesita de una línea la cual contendrá los pulsos de
reloj que indicarán cuando un dato es válido.
Ejemplos de este tipo de comunicación son:
• I2C
• ONE WIRE
• SPI
33
En la comunicación serial asincrónica, no son necesarios los pulsos de reloj.
La duración de cada bit está determinada por la velocidad con la cual se realiza la
transferencia de datos.
La siguiente figura muestra la estructura de una carácter que se trasmite en forma
serial asincrónica.
FIG. 2.1 TRANSMISIÓN SERIAL ASINCRÓNICA
Normalmente cuando no se realiza ninguna transferencia de datos la línea del
transmisor se encuentra en estado IDLE, esto quiere decir en estado alto.
Para iniciar la transmisión de datos, el transmisor coloca esta línea en bajo
durante determinado tiempo, lo cual se le conoce como bit de arranque (start bit) y
a continuación empieza a transmitir con un intervalo de tiempo los bits
correspondientes al dato, iniciando siempre por el bit menos significativo (LSB), y
terminando con el bit más significativo (MSB).
Si el receptor no está sincronizado con el transmisor, éste desconoce cuando se
van a recibir los datos.
Por lo tanto el transmisor y el receptor deberán tener los mismos parámetros de
velocidad, paridad, número de bits del dato transmitido y de bit de parada.
34
En los circuitos digitales, cuyas distancias son relativamente cortas, se pueden
manejar transmisiones en niveles lógicos TTL (0-5V), pero cuando las distancias
aumentan estas señales tienden a distorsionarse debido al efecto capacitivo de
los conductores y su resistencia eléctrica. El efecto se incrementa a medida que
se incrementa la velocidad de la transmisión. Esto origina que los datos recibidos
no sean iguales a los datos transmitidos, originándose un error en la transferencia
de datos.
Una de las soluciones más lógica es aumentar los márgenes de voltaje con que
se transmiten los datos, de tal manera que las perturbaciones a causa de la línea
se pueden corregir.
2.2.1 LA COMUNICACIÓN SERIAL RS-232
Ante la gran variedad de equipos, sistemas y protocolos que existen surgió la
necesidad de un acuerdo que permitiera a los equipos de varios fabricantes
comunicarse entre sí.
La EIA (Electronics Industry Association) elaboró la norma RS-232, la cual
define la interfaz mecánica, los pines, las señales y los protocolos que debe
cumplir la comunicación serial
Todas las normas RS-232 cumplen con los siguientes niveles de voltaje:
• Un “1” lógico es un voltaje comprendido entre –5v y –15v en el transmisor y
entre -3v y –25v en el receptor.
• Un “0” lógico es un voltaje comprendido entre +5v y +15 v en el trasmisor y
entre +3v y +25 v en el receptor.
El envío de niveles lógicos (bits) a través de cables o líneas de transmisión
necesita la conversión a voltajes apropiados. En los microcontroladores para
representar un cero (0) lógico se trabaja con voltajes inferiores a 0.8v, y para un
uno (1) lógico con voltajes mayores a 2.0V. En general cuando se trabaja con
35
familias TTL y CMOS se asume que un “cero” lógico es igual a cero voltios y un
“uno” lógico es igual a cinco voltios.
La importancia de conocer esta norma, radica en los niveles de voltaje que
maneja el puerto serial del computador, ya que son diferentes a los que utilizan
los microcontroladores y los demás circuitos integrados. Por lo tanto se necesita
de una interfaz que haga posible la conversión de los niveles de voltaje a los
estándares manejados por los CI TTL.
2.2.1.1 El Circuito MAX-232
Este circuito soluciona los problemas de niveles de voltaje cuando se requiere
enviar unas señales digitales sobre una línea RS-232.
FIG. 2.2 CIRCUITO MAX-232
El chip Max-232, que se indica en la figura 2.2, se utiliza en aquellas aplicaciones
donde no se dispone de fuentes dobles de +12 y –12 voltios. El MAX 232 necesita
solamente una fuente de +5V para su operación, internamente tiene un elevador
de voltaje que convierte el voltaje de +5V al de doble polaridad de +12V y –12V.
Cabe mencionar que existen una gran variedad de CI que cumplen con la norma
RS-232 como lo son: MAX220, DS14C232, MAX233, LT1180A.
36
2.2.2 El BUS I2C (Inter IC) “Philips Semiconductors inventó el bus de dos alambres I2C para comunicación
entre ICs en 1980 y desde entonces se ha convertido en el bus serial estándar,
implementado en un gran número de circuitos integrados y con licencias
otorgadas a mas de 50 compañías con un total de 1000 dispositivos compatibles
I2C”.
“Originalmente especificado para 100 Kbits/s e intencionalmente para control
simple y señales de estado; el bajo costo, la versatilidad técnica y la simplicidad
del bus I2C aseguraron su popularidad”.
El bus serial I2C ha sido extendido para soportar velocidades de hasta 3.4
Mbits/s. Combinado con una función de desplazamiento del nivel de voltaje, en
modo High-speed (Hs-mode) ofrece una solución ideal para los sistemas de
tecnología mezclada, donde las altas velocidades y la variedad de voltajes (5V,
3V o menor) son comúnmente usados.
El modo Hs es compatible con todos los sistemas existentes del bus I2C,
incluyendo el estándar original (S-mode) y el modo Fast (F-mode), actualización
introducida en 1992, proveyendo 400Kbits/s en transferencia. Sistemas de
diferente velocidad pueden ser mezclados fácilmente, con un dispositivo maestro
en modo Hs especialmente desarrollado, la conexión en paralelo es usada para
conectar las partes mas lentas del sistema. La comunicación entre dispositivos se
puede realizar en el modo estándar y en el modo rápido si los dispositivos están
unidos al mismo bus. El reloj determinará la velocidad de los datos. La interfaz
I2C emplea un protocolo amplio para asegurar una transmisión y recepción de
datos fiable.
El bus I2C es usado en una gran variedad de microcontroladores y aplicaciones
de telecomunicaciones como en control, diagnóstico y administración de potencia.
La especificación mejorada (modo rápido) esta también implementada en los pics.
37
2.2.2.1 Concepto del Bus I2C El bus I2C soporta cualquier tipo de componente (NMOS, CMOS, Bipolar, etc).
Dos hilos físicos uno de datos (SDA) y otro de reloj (SCL) transportan la
información entre los diversos dispositivos conectados al bus.
Los dispositivos conectados al bus deben ser de COLECTOR ABIERTO o
DRENAJE ABIERTO (“en paralelo”), así los estados de salida de las líneas SDA y
SCL desempeñan la función de “cable en AND” del bus.
Cada dispositivo es reconocido por una única dirección (si es un microcontrolador,
LCD, memoria o teclado) y puede operar cualquiera como transmisor o emisor de
datos, dependiendo de la función del dispositivo. Un display es solo un receptor
de datos mientras que una memoria recibe y transmite datos. En función de que
envía o reciba datos se debe considerar los dispositivos como Maestros (Master)
o esclavos (Slaves).
FIG. 2.3 CONECCION DE DISPOSITIVOS EN EL BUS I2C
La única limitación en la conexión de dispositivos al bus depende de la capacidad
máxima que no puede superar los 400 pF. Los tipos de transferencia de datos en
el bus son:
Modo Estándar aproximadamente a 100 KBits/s
Modo Rápido aproximadamente a 400 KBits/s
Modo Alta velocidad más de 3.4 Mbits/s.
MICRO
LCD ADC MICRO
Resistencias de PULL-UP
38
La interfaz I2C emplea un protocolo amplio para asegurar una transmisión y
recepción de datos fiables.
Tanto la línea de DATOS como la señal de Reloj SCL son bidireccionales
conectadas a una fuente de tensión positiva vía suministro común o resistencias
de carga “pull-up”.
FIG. 2.4 CONECCION DE LA LINEA DE DATOS Y RELOJ DEL BUS I2C
2.2.2.2 Transferencia de bit: Un pulso de reloj se genera por cada bit de datos transferidos. Los bits de datos
transferidos en la línea SDA deben ser estables cuando la línea SCL está a nivel
“1”. El estado de la línea SDA en “1” ó “0” solo puede cambiar cuando en la línea
SCL la señal es “0”.
Dentro del proceso de transferencia de Datos, hay dos situaciones básicas que son:
39
INICIO (START): Una transición de “1” a “0” (caída) en la línea de datos SDA
mientras la línea de reloj SCL está a “1”. Sucede cuando un dispositivo maestro
hace ocupación del bus, generando esta condición.
PARADA (STOP): Una transición de “0” a “1” (ascenso) en la línea de datos SDA
mientras la línea de reloj SCL esta a “1”. Un dispositivo maestro puede generar
esta condición dejando libre el bus.
Las condiciones de INICIO y STOP son siempre generadas por el master.
El bus I2C se considera ocupado después de la condición de inicio. El bus se
considera libre de nuevo después de un cierto tiempo tras la condición de Stop.
Es decir, al pulso “1” de la línea SCL le puede corresponder un pulso “0” ó “1” de
la línea SDA en función de la información que se envíe, recordemos que a cada
bit de SDA le corresponde un bit de SCL, pero nunca, salvo en la condición de
Inicio a un bit de SCL le corresponde una situación de “1” a “0” o sea pasa por dos
estados la línea SDA, al revés ocurre en la condición de Stop que el master envía
un bit a la línea SCL mientras cambia en la SDA de “0” a “1” durante el tiempo
que esta enviando la señal de “1” a SCL.
2.2.2.3 Transferencia de Datos:
FIG. 2.5 TRANSFERENCIA DE DATOS
40
El número de bytes que se envíen a la línea SDA no tiene restricción. Cada byte
debe ir seguido por un bit de reconocimiento ACK, el cual es generado por el
master y es obligatorio en la transferencia de datos. El byte de datos se transfiere
empezando por el bit de más peso precedido por el bit de reconocimiento (ACK).
El transmisor desbloquea la línea SDA “1” durante el pulso de reconocimiento. El
receptor debe poner a “0” la línea SDA durante el pulso ACK de modo que siga
siendo “0” durante el tiempo que el master genera el pulso “1” de ACK.
Un receptor cuando ha sido direccionado está obligado a generar un ACK
después de que cada byte ha sido recibido. Cuando un dispositivo esclavo no
genera el bit ACK, debe mantener la línea SDA a nivel “1” durante el bit ACK.
entonces el master genera una condición de STOP abortando la transferencia de
datos ó repetir la condición de INICIO.
Si un esclavo receptor que está direccionado no desea recibir más bytes (el
esclavo no genera el bit ACK en el primer byte que sigue), el master debe
detectar la situación y no enviar más bytes. El esclavo pone la línea SDA a “1” lo
que es detectado por el master el cual genera la condición de STOP ó de INICIO.
Si un dispositivo esclavo no puede recibir o transmitir un byte de datos completo
hasta que haya acabado uno de los trabajos que realiza, puede mantener la línea
SCL a “0” lo que fuerza al Master a permanecer en un estado de espera. Los
datos continúan transfiriéndose cuando el dispositivo esclavo está listo para otro
byte de datos y desbloquea la línea de reloj SCL.
Si un master receptor está recibiendo datos de un esclavo transmisor debe
generar un bit ACK tras cada byte recibido del transmisor. Para finalizar la
transferencia de datos no debe generar el último byte enviado por el esclavo. El
esclavo transmisor debe permitir desbloquear la línea SDA generando el master la
condición de STOP ó de INICIO.
41
Sin embargo, si un master todavía desea comunicarse con el bus, puede generar
repetidamente condiciones de Start y direccionar a otro esclavo sin generar
primero la condición de Stop.
Todos los Master generan su propia señal de reloj sobre la línea SCL al transferir
datos sobre el Bus I2C. Los bits de datos son solo válidos durante los períodos “1”
del reloj.
2.2.2.4 Definiciones básicas del Bus I2C:
Maestro (Master): El dispositivo que inicia una transferencia, genera las señales
de reloj y termina un envío de datos. Las señales de reloj de un master solo
pueden ser alteradas cuando la línea de reloj sufre una caída por un dispositivo
esclavo o por el dominio del control del bus por el arbitraje de otro
microcontrolador.
Cuando se conectan varios dispositivos maestros a un mismo bus la configuración
obtenida se denomina "multi-maestro".
Los master son generalmente microcontroladores, éstos pueden ser unas veces
master y otros esclavos. Si uno o más microcontroladores se conectan al bus
pueden iniciar el envío de datos al mismo tiempo produciendo un caos, para
prevenir esto se ha desarrollado un sistema de arbitraje.
Un master puede iniciar una transmisión solo si el bus está libre. Dos o más
master pueden generar una condición de Inicio en el bus, lo que da como
resultado una condición de inicio general. Cada master debe comprobar si el bit
de datos que transmite junto a su pulso de reloj, coincide con el nivel lógico en la
línea de datos SDA.
Esclavo (Slave): Cualquier dispositivo conectado al bus incapaz de generar
pulsos de reloj. Reciben señales de comando y de reloj provenientes del
dispositivo maestro.
42
Sincronización: Procedimiento para sincronizar las señales del reloj de dos o
más dispositivos.
La sincronización del reloj se realiza mediante una conexión AND de todos los
dispositivos del Bus a la línea SCL. Esto significa que una transición de un Master
de “1” a “0” en la línea SCL hace que la línea pase a “0”, esto mantiene la línea
SCL en ese estado. Sin embargo, la transición de “0” a “1” no cambia el estado de
la línea SCL si otro reloj está todavía en su periodo de “0”.
Por lo tanto la línea SCL permanecerá a “0” tanto como el período más largo de
cualquier dispositivo cuyo nivel sea “0”. Los dispositivos que tienen un período
más corto de reloj “0” entran en un período de espera.
Cuando todos los dispositivos conectados al bus han terminado con su período
“0”, la línea del reloj se desbloquea y pasa a nivel “1”. Por lo que hay que
diferenciar entre los estados de reloj de los dispositivos y los estados de la línea
SCL, y todos los dispositivos empiezan a nivel “1”. El primer dispositivo que
completa su nivel “1” pone nuevamente la línea SCL a “0”.
Resumiendo, la sincronización de la línea SCL se genera a través de la señal a
“0” por el dispositivo con el más largo período de nivel a “0” y la señal a “1”por el
dispositivo con el más corto periodo de nivel a “1”
Arbitraje: Procedimiento que asegura que si uno o más master simultáneamente
deciden controlar el Bus solo uno es permitido a controlarlo y el mensaje saliente
no es deteriorado.
El sistema de arbitraje actúa sobre la línea de datos SDA, mientras la línea SCL
está a nivel “1”, de una manera tal que el master que transmite un nivel “1”, pierde
el arbitraje sobre otro master que envía un nivel “0” a la línea de datos SDA. Esta
situación continúa hasta que se detecte la condición de Stop generada por el
master que se hizo cargo del bus.
43
Tras el arbitraje los master perdedores se deben poner inmediatamente en modo
Master-Receptor y esclavo pues los datos que envíe el Master dominante pueden
ser para uno de ellos. Un master que pierde el arbitraje puede generar pulsos de
reloj hasta el fin de byte en el cual él pierde el arbitraje.
En el momento que un master toma el control, es el único que toma las decisiones
y genera los códigos de dirección, no existen master centrales, ni existen órdenes
prioritarias en el bus.
Si en una transferencia de datos, el procedimiento de arbitraje está todavía en
proceso justo cuando se envía al bus una condición de Stop, el master afectado
debe mandar códigos de Inicio o Stop.
Bus Desocupado (Bus Free): Estado en el cual ambas líneas (SDA y SCL)
están inactivas, presentando un estado lógico alto. Únicamente en este momento
es cuando un dispositivo maestro puede comenzar a hacer uso del bus.
Formato de Datos (Data Format): Después de la condición de Start un código de
dirección es enviado, ésta dirección tiene 7 bits seguidos por un octavo, éste
código corresponde a una dirección R/W (0- indica transmisión/1- indica solicitud
de datos).
Una transferencia de datos siempre acaba con una condición de Stop generado
por el master, sin embargo si un master todavía desea comunicarse con el bus,
puede generar repetidamente condiciones de Start y direccionar a otro esclavo sin
generar primero la condición de Stop.
Varias combinaciones de lectura y escritura son posibles dentro de una misma
transferencia de datos.
44
Los datos transferidos tienen la forma de la figura 2.6.
FIG. 2.6 TRANSFERENCIA DE DATOS
Los posibles formatos de transferencia son:
1. Master transmite al esclavo- receptor. No cambia el bit de dirección.
2. Master lee a un esclavo inmediatamente después del primer byte.
En el momento del primer reconocimiento el master-transmisor se convierte en un
master-receptor y el esclavo-receptor en un esclavo-transmisor. El primer
reconocimiento es aún generado por el esclavo. La condición de Stop es
generada por el master, el cual ha enviado previamente un no- reconocimiento.
3. Formato combinado: Durante un cambio de dirección dentro de una
transferencia, la condición de Start y la dirección del esclavo son ambos
repetidos, pero con el bit R/W invertido. Si un Master-receptor envía una
condición repetida de Start, el esclavo previamente ha enviado un no-
reconocimiento.
Dirección (Address): El procedimiento de dirección para el Bus I2C es tal que, el
primer byte después de la condición de Start usualmente determina qué esclavo
ha sido seleccionado por el Master. La excepción se da en la “llamada general”
(0000 0000) con la que se direcciona a todos los dispositivos, cuando esta
dirección es usada todos los dispositivos en teoría deben responder con un
reconocimiento (A), sin embargo algunos dispositivos pueden estar condicionados
45
a ignorar esta dirección. El segundo byte de la “llamada general” define entonces
la acción a tomar.
2.2.2.5 Formatos de dirección:
Hay dos formatos de dirección:
El más simple es el formato de 7-bit con un bit R/W que permite direccionar hasta
128 dispositivos, que en la práctica se reduce a 112 debido a que las restantes
direcciones son de uso reservado.
El más complejo es el de 10-bit con un bit R/W, para éste formato dos bytes
deben ser transmitidos con los primeros cinco bits que especifiquen una dirección
de 10-bit.
El direccionamiento de 10-bit, permite usar hasta 1024 direcciones adicionales
para prevenir problemas con la localización de direcciones esclavas cuando el
número de dispositivos I2C se expande rápidamente. Esto no cambia el formato
de direcciones definido en la especificación del bus I2C, usando direcciones
reservadas en la especificación existente.
El direccionamiento de 10-bit no afecta el direccionamiento existente de 7-bit,
permitiendo a los dispositivos con direcciones de 7-bit ó 10-bit ser conectados al
mismo bus I2C, y ambos tipos de dispositivos pueden ser usados en sistemas con
modos Standard, Fast ó High-Speed.
Los 7 primeros bits del primer byte marcan la dirección del esclavo y el octavo bit
determina la dirección del mensaje. Un 0 en el octavo bit significa que el master
escribirá información en el esclavo seleccionado y un 1 en el octavo bit significa
que el Master leerá información del esclavo.
Cuando un Master envía una dirección después de la condición de Inicio cada
dispositivo comprueba los siete primeros bits de la dirección con la suya propia. El
46
que coincida se considera el dispositivo direccionado por el Master siendo un
esclavo-receptor ó esclavo-emisor dependiendo del bit R/W.
Una dirección puede tener una parte fija y otra programable. Con lo que se
pueden conectar dispositivos idénticos al sistema siendo activados por la parte fija
y controlados por la parte programable.
Existen una serie de direcciones reservadas en los Bus I2C que no se deben
utilizar dado que son direcciones determinadas por Philips para usos generales.
Lectura/Escritura (Bit R/W): Cada dispositivo dispone de una dirección de 7 bits.
El octavo bit (el menos significativo ó LSB) enviado durante la operación de
direccionamiento corresponde al bit que indica el tipo de operación a realizar. Si
este bit es alto el dispositivo maestro lee información proveniente de un
dispositivo esclavo. En cambio, si este bit fuese bajo el dispositivo maestro
escribe información en un dispositivo esclavo.
2.2.3 INTERFAZ PERIFÉRICA SERIAL (SPI)
2.2.3.1 Introducción
La Interfaz Periférica Serial (SPI), un subsistema serial independiente de
comunicaciones, permite a la MCU comunicarse sincrónicamente con dispositivos
periféricos, tales como:
- Sintetizadores de frecuencia
- Drivers de display de cristal líquido (LCD)
- Subsistemas convertidores de analógico a digital(A/D)
- Otros microprocesadores
- Reloj en tiempo real
La Interfaz Periférica Serial es también capaz de establecer comunicaciones entre
procesadores en un sistema con múltiples maestros. El sistema SPI puede ser
configurado como un dispositivo maestro o como uno esclavo. Cuando la
configuración es como maestro, la transferencia de datos puede ser tan alta como
47
una proporción de un medio de los ciclos del reloj (1.5Mbps a 3MHz de la
frecuencia del bus) Cuando la configuración es como esclavo puede ser tan
rápida como la razón del reloj (3Mbps para una frecuencia de bus de 3MHz).
2.2.3.2 Descripción funcional
La Comunicación SPI usa un modelo Maestro / Esclavo y típicamente tiene tres
líneas: línea de entrada de datos, línea de salida de datos y la línea de reloj. Las
señales elegidas del chip se utilizan para direccionar los distintos esclavos del bus
Figura 2.7.
FIG. 2.7 CONFIGURACION DEL SISTEMA MAESTRO - ESCLAV O
Los bits de datos están cambiando entrada / salida MSB primero. A menudo los
datos están cambiando simultáneamente fuera del pin de salida y dentro del pin
de entrada. La interfaz SPI define solamente las líneas de comunicación y el reloj,
otros parámetros varían para diferentes dispositivos. Las frecuencias de reloj
puede ser cualquiera a partir de 100 KHz a algunos MHz y la longitud de la
palabra puede ser de 8 a 16 bits.
2.2.3.3 Formatos de transferencia del SPI
Durante una transferencia del SPI, los datos son transmitidos y recibidos
simultáneamente. Una línea de reloj serial sincroniza el muestreo y el corrimiento
de la información en dos líneas seriales de datos.
Una línea de selección de esclavo permite una selección individual de un
dispositivo esclavo del SPI; los dispositivos esclavos que no están seleccionados
no hacen interferencia con el SPI y sus funciones. Sobre un dispositivo maestro
48
del SPI, la línea seleccionadora puede opcionalmente ser usada para indicar un
conflicto de buses de múltiples maestros.
2.2.3.4 Controles de fase de reloj y de polaridad
El software puede seleccionar 1 de 4 combinaciones de fase serial de reloj y fase
usando dos bits en el registro de control (SPCR). La polaridad de reloj está
especificada por el bit de control CPOL, con el cual selecciona un reloj activo alto
o uno activo bajo, y no tiene efecto significativo en el formato de transferencia. El
bit de control de la fase de reloj (CPHA) selecciona 1 de 2 formatos de
transferencia.
La fase de reloj y la polaridad deben ser idénticas para el dispositivo maestro del
SPI y para el dispositivo esclavo con el que está comunicándose. En algunos
casos, la fase y la polaridad son cambiadas entre transferencias para permitirle a
un maestro comunicarse con un esclavo que tiene diferentes requerimientos.
Cuando CPHA es igual a 0, la línea SS- puede ser negada y reactivada entre
cada byte serial sucesivo, también si el esclavo escribe datos al registro de datos
del SPI (SPDR) cuando SS es bajo, resulta una colisión de error de escritura.
Cuando CPHA igual a 1, la línea SS- puede permanecer baja entre las sucesivas
transferencias.
2.2.3.5 Señales del sistema SPI
1. Entrada del Maestro/ Salida del Esclavo (MISO)
2. Salida del Maestro/ Entrada del Esclavo (MOSI)
3. Reloj Serial (SCK)
4. Seleccionar Esclavo (SS-)
Cualquier línea de salida del SPI debe tener su bit correspondiente en 1 en el
registro de dirección de datos DDRD. Si el bit del DDRD está en 0, esa línea está
desconectada de la lógica del SPI y se convierte en una entrada de intención
49
general. Todas las líneas de entrada están forzadas a actuar como entradas sin
importar el estado de los bits DDR en el registro DDRD.
Entrada del maestro / salida del esclavo (MISO)
Es una entrada a un dispositivo maestro y es una salida de un dispositivo esclavo.
La línea MISO de un dispositivo esclavo es puesta en un estado alto de
impedancia si el dispositivo esclavo no está seleccionado.
Salida del maestro /entrada del esclavo (MOSI)
Esta es una salida del maestro y es una entrada del esclavo. El dispositivo
maestro pone datos sobre la línea MOSI medio ciclo antes del final del flanco de
reloj que usa el dispositivo esclavo para tomar el dato.
Las líneas MISO y MOSI son señales unidireccionales seriales de datos.
Reloj serial (SCK)
SCK es una entrada al dispositivo esclavo, es generada por el maestro y
sincroniza el movimiento de datos dentro y fuera de las líneas MISO y MOSI. Los
dispositivos maestro y esclavo son capaces de cambiar un byte de información
durante una secuencia de 8 ciclos de reloj.
Cuatro posibles relaciones pueden ser elegidas usando los bits de control CPOL y
CHPA en el registro de control periférico serial (SPCR). Ambos, el maestro y el
esclavo deben operar con la misma tasa de bits. Los bits de selección de la tasa
del reloj del SPI, SPR [1:0], en el SPCR del maestro, seleccionan la frecuencia de
reloj, SPR [1:0] no afectan sobre la operación del SPI.
Selección esclavo (SS-)
La entrada de selección esclavo (SS-) de un esclavo debe ser externamente
activada antes de que un maestro pueda intercambiar datos con el esclavo. SS-
debe ser baja permitiendo transacciones de datos y debe permanecer baja por la
duración de la transacción.
50
La línea SS- de un maestro debe ser alta. Si ésta fuera a bajo, una bandera de
error de modo de falla (MODF) es puesta a 1 en el registro de estado periférico
serial (SPSR).
Para deshabilitar el modo de fallas del circuito, escribir 1 en el bit 5 del registro de
dirección de los datos del puerto D. Esto hará que la terminal SS- actúe como una
salida de intención general y no como la entrada dedicada a seleccionar el circuito
del esclavo, esto inhibe a la bandera del modo de falla. Las otras tres líneas
estarán dedicadas al SPI siempre que la interfaz serial esté funcionando.
El estado de los bits CPHA del maestro y del esclavo afectan la operación de SS-.
Los bits CHPA deben de estar colocados idénticamente para el maestro y para el
esclavo. Cuando CPHA = 0, el reloj de corrimiento es el OR del SS con el SCK.
En este modo de reloj de fase, SS- debe ir a alto entre caracteres sucesivos en un
mensaje del SPI Cuando CPHA = 1, SS- puede dejarse en bajo entre caracteres
sucesivos del SPI. En casos donde hay una sola MCU esclava, su línea SS-
puede ser enlazada a Vss siempre que CPHA = 1 sea el modo usado de reloj.
2.2.3.6 Errores del sistema SPI
Dos errores de sistema pueden ser detectados por el sistema del SPI.
- El primer tipo de error surge en un múltiple sistema maestro donde más de un
dispositivo del SPI trata de ser el maestro. Este error es llamado modo de falla.
- El segundo tipo de error, colisión de escritura. Indica que un intento fue hecho al
escribir datos al SPDR con una transferencia.
Cuando el sistema SPI está configurado como un maestro y la entrada SS- va a
un estado activo bajo, una falla de modo ha ocurrido, usualmente porque dos
dispositivos han intentado actuar como maestro al mismo tiempo. En estos casos
existe la posibilidad de contención entre dos terminales. Para drivers push-pull
CMOS, esta contención puede causar daño permanente. El mecanismo de falla
de modo intenta proteger el equipo mediante la deshabilitación de los drivers.
51
El bit de control MSTR y los cuatro bits de control del registro DDRD asociados al
SPI son puestos a 0 y una interrupción es generada sujeta a ser enmascarada por
el bit de control SPIE y el bit I del CCR.
Otras precauciones necesitan ser tomadas para prevenir el daño de los drivers. Si
dos dispositivos están hechos maestros al mismo tiempo, el modo de falla no
ayuda a la protección de ellos, a menos que uno de ellos seleccione al otro a ser
esclavo. La cantidad de daño posible depende de la longitud del tiempo que
ambos dispositivos intenten actuar como maestros.
Una colisión de escritura ocurre si el SPDR es escrito cuando una transferencia
está en progreso. Porque la SPDR no está doblemente almacenada en la
dirección de transmisión, una escritura a SPDR causa que los datos sean escritos
directamente dentro del registro de corrimiento del SPI.
La configuración SPI determina las características de una transferencia en
progreso. Para un maestro, una transferencia comienza cuando los datos son
escritos al SPDR y finaliza cuando SPIF se hace 1.
Para un esclavo con CPHA = 0, una transferencia comienza cuando SS- va a bajo
y finaliza cuando SS- regresa a ALTO. En este caso, SPIF se hace 1 en medio del
octavo ciclo de reloj cuando los datos están transfiriéndose desde el registro de
corrimiento al registro de datos paralelo, pero la transferencia esta aún activa
hasta que SS va a alto.
Para un esclavo con CHPA = 1, la transferencia inicia cuando la línea SCK va a
su nivel activo, el cual es el flanco al comienzo del primer ciclo del SCK. La
transferencia termina en el esclavo con CPHA = 1 cuando SPIF se hace 1.
2.2.3.7 Registros del Sistema SPI
Los tres registros del SPI son:
� Registro de control periférico serial (SPCR)
� Registro de estado periférico serial (SPSR)
� Registro de datos periférico serial (SPDR)
52
Estos registros dan control, estado y funciones de almacenaje de datos
Registro de control periférico serial (SPCR)
Bit 7 6 5 4 3 2 1 Bit 0
Lectura:
Escritura:
SPIE
SPE
DWOM
MSTR
CPOL
CPHA
SPR1
SPR0
Reset 0 0 0 0 0 1 U U
U = no afectado
FIG. 2.8 REGISTRO DE CONTROL PERIFÉRICO SERIAL
SPIE: Bit para habilitar las Interrupciones por el SPI.
Poner el bit SPIE a 1 para pedir una secuencia de interrupción de hardware cada
vez que la bandera SPIF o la MODF se haga 1.Las interrupciones del SPI están
inhabilitadas si este bit es puesto a 0 o si el bit I del registro CCR es 1
0 = Sistema de interrupción del SPI deshabilitado
1 = Sistema de interrupciones del SPI habilitado
SPE: Bit para Habilitar la Interfaz Serial Periférica
Cuando el bit SPE está en 1, las terminales 2, 3, 4 y 5 del puerto D están
dedicados a la función SPI. Si la SPI está en el modo maestro y el bit 5 del DDRD
es 1, entonces el bit 5 del puerto D es una salida en vez de una entrada del SS.
0 = Deshabilitar la Interfaz Serial Periférica SPI
1 = Habilitar la Interfaz Serial Periférica SPI
DWOM: Bit para modo del Puerto D como OR alambrada
Este afecta todos los pines del puerto D. Es habitual tener un resistor externo
sobre las líneas que están manejando por drenaje abierto.
0 = Salidas normales CMOS
1 = Salidas de drenaje abierto
MSTR: Bit de selección del modo Maestro
0 = Modo Esclavo
1 = Modo Maestro
53
CPOL: Bit de Polaridad del Reloj
Cuando la polaridad de reloj es 0 y los datos no han sido transferidos, el SCK del
maestro tiene un estado útil de valor bajo. Cuando CPOL es 1, SCK es alto.
CPHA: Bit de Fase del Reloj
La fase de reloj en conjunción con la CPOL, controla el reloj de datos
relacionados entre el maestro y el esclavo. El CPHA selecciona uno de dos
diferentes protocolos de reloj.
SPR [1:0]: Bits para elegir la tasa del Reloj del SPI
Estos dos bits seleccionan la tasa de reloj del SPI cuando el dispositivo está
configurado como maestro. Cuando el dispositivo está configurado como esclavo,
estos bits no tienen efecto.
I
Registro de estado periférico serial (SPSR)
Bit 7 6 5 4 3 2 1 Bit 0
Lectura:
Escritura:
SPIF
WCOL
MODF
Reset 0 0 0 0 0 0 0 0
= no implementado
FIG. 2.9 REGISTRO DE ESTADO PERIFÉRICO SERIAL
SPIF: Bandera de Interrupción del SPI por transferencia Completa
SPIF se hace 1 al término de la transferencia de datos entre el procesador y el
dispositivo externo. Si SPIF va a alto, y si SPIE está en 1, la interfaz periférica
serial genera una interrupción. Para limpiar el bit SPIF, leer el SPSR con el SPIF
en 1, entonces accesar al SPDR. A menos que el SPSR sea leído primero (con
SPIF en 1), todo intento de escribir a SPDR queda inhabilitado.
WCOL: Bit de Colisión de Escritura
La limpieza del bit WCOL se lleva a cabo por una lectura del SPSR (con WCOL
en 1) seguido por una acceso de SPDR.
0 = No hubo colisión de escritura
1 = Hubo colisión de escritura
54
Bit 5 y Bits [3:0]: No implementados
Siempre se leerán como 0.
MODF: Bit de indicación de Falla de Modo
Para limpiar el bit MODF, leer el SPSR (con MODF en 1), entonces escribir al
SPCR.
0 = No hubo falla de modo
1 = Si hubo falla de Modo
Registro de datos periférico serial (SPDR)
Bit 7 6 5 4 3 2 1 Bit 0
Lectura:
Escritura:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Reset INDETERMINADO TRAS EL RESET
FIG. 2.10 REGISTRO DE DATOS PERIFÉRICO SERIAL
El SPDR es usado cuando transmitimos o recibimos datos en el bus serial.
Solamente con escribir a este registro iniciamos la transmisión o la recepción de
byte, y esto sólo ocurre en el dispositivo maestro. Al completar la transferencia de
un byte de datos, el bit de estatus SPIF se hace 1 en ambos, el maestro y en el
esclavo.
Una lectura del SPDR es realmente la lectura de un buffer. Para prevenir un error
de pérdida y la pérdida del byte que causó la pérdida, primero SPIF debe ser
limpiado antes que una segunda transferencia de datos desde el registro de
corrimiento al buffer de lectura sea iniciada.
55
CAPÍTULO 3
MÓDULO DE PRÁCTICAS Y FUNDAMENTOS BÁSICOS
DEL SOFTWARE
3.1 MÓDULO DE PRÁCTICAS
Para el diseño del Módulo se tomó en consideración que éste debe servir como
una herramienta de desarrollo para el aprendizaje de los microcontroladores AVR,
en forma práctica, para lo cual el Módulo consta de diversos dispositivos que en
combinación con el Ambiente de Desarrollo del software BASCOM y con la gran
potencialidad del microcontrolador ATMEGA 8 se podrá desarrollar proyectos que
van desde los más simples hasta proyectos más complejos.
Los diversos dispositivos del Módulo como son LCD, Teclado, etc., están
conectados a los diferentes buses de E/S del ATMEGA 8 de tal suerte que no
intervengan con el resto de dispositivos que contiene la placa y de ser así existen
puentes (JP) que colocados en posiciones indicadas evitan conflictos. Estos
puentes serán descritos más adelante para ser identificados.
3.2 CARACTERÍSTICAS DEL MÓDULO
• Fuente de 5V.
• LCD alfanumérico estándar de2 x 16 caracteres.
• Teclado matricial de 4 x 4 teclas.
• Conector serie RS232.
• Reloj en tiempo real
• Comunicación I2C
• Comunicación SPI
3.2.1 PROGRAMADOR ISP (In System Program)
BASCOM soporta el programador ISP, STK200 / STK300, STK500, entre otros,
en este proyecto se utilizó el programador AVR ISP este es un programador para
puerto paralelo muy confiable. Los otros programadores se encuentran en las
opciones de programadores del BASCOM AVR.
56
El programador paralelo AVR consta de un buffer 74HC244 que sirve de interfaz
de comunicación entre el Atmega 8 y el puerto paralelo de un PC. Este buffer es
muy importante ya que protege el puerto paralelo de la computadora. Las señales
necesarias para el AVR ISP (programador) son MOSI, RESET, SCK Y MISO.
El módulo consta de un conector DB9 hembra como entrada de programación,
por lo tanto el cable de programación tiene en el un extremo un conector DB9
macho y en el otro extremo un conector DB25 macho, además el Programador
consta de un led indicador de transición de datos y un pulsador de Reset con lo
que está listo para programar un microcontrolador, el diagrama esquemático del
programador STK 200 / STK 300 se puede ver en la figura 3.1
FIG. 3.1 PROGRAMADOR ISP
3.2.2 FUENTE DE ALIMENTACIÓN
Está formado por dos secciones. La primera parte tiene la entrada de un
phonejack que recibe un voltaje DC, este voltaje debe ser 12 Vdc, y la segunda
conformada por el puente de diodos y el regulador LM78L05 que proporciona 5
Vdc al módulo.
La fuente tiene un led el cual indica si la fuente está funcionando, la figura
muestra la fuente de alimentación del Módulo.
57
FIG. 3.2 FUENTE DE ALIMENTACIÓN
3.2.3 LCD ALFANUMÉRICO ESTÁNDAR DE 2 x 16 CARACTERES
LCD (Liquid Cristal Display) es un dispositivo microcontrolado de visualización
gráfica para la presentación de caracteres, símbolos o incluso dibujos (en algunos
modelos), en este caso dispone de 2 filas de 16 caracteres cada una y cada
carácter dispone de una matriz de 5 x 7 puntos (pixels), aunque los hay de otro
número de filas y caracteres.
En la tabla se indica la configuración de los pines del LCD
PIN Nº SÍMBOLO DESCRIPCIÓN
1 Vss Tierra (GND)
2 Vdd Alimentación de +5Vcc
3 Vo Contraste del cristal líquido. (0 a +5V.)
4 RS Selección del registro de control/registro de datos:
RS=0 Selección registro de control
RS=1 Selección registro de datos
5 R/W Señal de lectura/escritura:
R/W=0 Escritura (Read)
R/W=1 Lectura (Write)
6 E Habilitación del módulo
E=0 Módulo desconectado
E=1 Módulo conectado
7-14 D4 – D7 Bus de datos bidireccional
1 3
2
V V
GNDIN OUT
78L05U2
+1000uFC5 +
10ufC6
JACK
JACK1 IN+
IN-
VCC
AC
1
+
AC
2
-
BRIDGE1
D12
330R3
LEDD1
VDD
58
Mediante un potenciómetro de contraste se aplica al LCD una tensión variable de
entre 0 y +5 Vcc. Con dicha tensión se consigue ajustar el contraste de los
caracteres de la pantalla, según las necesidades del usuario.
EL display LCD 16*2 está conectado al microcontrolador por el bus del Puerto D.
El comando Config Lcd = 16*2 del lenguaje BASCOM configura los pines del LCD.
El Bus de datos del LCD está configurado para trabajar con 4 Bits (C2-C5) y 2
señales de control (RS – E) como se indica en la figura.
FIG. 3.3 CONEXIÓN DEL LCD
3.2.4 TECLADO MATRICIAL DE 4 x 4
Este dispositivo de entrada de datos consta de 16 teclas o pulsadores, dispuestos
e interconectados en filas y columnas. Dispone de un conector SIL (Single In Line)
macho de 8 pines que se corresponden con las 4 filas y las 4 columnas de las que
dispone. Este teclado matricial está conectado por el bus del Puerto B (B0 – B7)
como se indica en la figura. El comando CONFIG KBD del lenguaje BASCOM
configura los pines.
ATMEGA 8
D4 - - PUERTO D - D7 E RS
DATOS
CONTROL
ATMEGA 8
B0 - - PUERTO B - - - - B7
DATOS
1 2 3 A
4
5 6 B
7 8 9 C
* 0 # D
FIG. 3.4 CONEXIÓN DEL
TECLADO
59
3.2.5 RESET
Se trata de un pulsador (SW-PB), que se conecta en el pin 1 del Atmega 8,
permite reiniciar el sistema si en alguna ocasión se bloquea o simplemente para
reiniciar un programa
FIG. 3.5 CONEXIÓN DEL RESET
3.2.6 RELOJ CALENDARIO EN TIEMPO REAL
Está basado en un integrado DS1307, diseñado para conectar al Bus I2C,
dispone de un reloj en tiempo real que cuenta con segundos, minutos, horas,
fecha del mes, mes, día de la semana y año, el cual está programado hasta el
año 2100, adicionalmente tiene 56 bytes de RAM no volátil. El DS1307 es
alimentado por una batería de 3V de litio.
PC6(RESET)1
PD0(RXD)2
PD1(TXD)3
PD2(INT0)4
PD3(INT1)5
PD4(XCK/T0)6
VCC7
GND8
PB6(XTAL1/TOSC1)9
PB7(XTAL2/TOSC2)10
PD5(T1)11
PD6(AIN0)12
PD7(AIN1)13
PB0(ICP1) 14
PC5(ADC5/SCL) 28
PC4(ADC4/SDA)27
PC3(ADC3)26
PC2(ADC2)25
PC1(ADC1) 24
PC0(ADC0)23
PB1(OC1A) 15
PB2(SS/OC1B)16
PB3(MOSI/OC2)17
PB4(MISO)18
PB5(SCK) 19
AVCC20
AREF21
GND22
ATMEGA8
A1
RXDTXD
MISOMOSI
SCK
4.7kR6
VCC
RESET
ADC0ADC1
CSDI
O1O2
SW-PBS1
60
SCL
SDA
X11
X22
SDA 5SCL 6
SQW/OUT 7
VCC8
GND4Vbat 3
DS1307
U9
32KHZ
XTAL1
3vBT1
VCC
LEDD11
330
R19
VCC
330
R18
330
R17
10kR20
10kR21
VCC VCC
FIG. 3.6 CONEXIÓN DEL REAL TIME
3.3 FUNDAMENTOS BÁSICOS DEL SOFTWARE BASCOM
El primer punto importante para destacar de este programa, el Bascom AVR, es
que está desarrollado en lenguaje Basic, y es importante porque este lenguaje de
programación es uno de los más fáciles que se ha diseñado; el nombre BASIC es
una abreviatura para: Begginers All-purpose Symbolic Instruction Code, indicando
simplemente que es un “Lenguaje de programación para principiantes”. Esta
cualidad “para principiantes” ha identificado al Basic por largo tiempo, así que
muchos programadores con experiencia han evitado erróneamente usar de él.
Sin embargo, a pesar del tiempo y todos los nuevos lenguajes de programación,
Basic tiene un lugar envidiable con su muy extendido uso, razón por la cual el
lenguaje de programación Basic se convierte en una herramienta de
programación moderna, de gran alcance, y extensamente aceptada.
Es por esto que se menciona como una cualidad importante el uso del lenguaje
de programación Basic en este programa.
Otra de las características del programa Bascom AVR es que ahora no es
necesario contar con un ensamblador para escribir el código fuente y otro
paquete de software para comprobar y simular un programa, todo esto se lo
realiza con Basic; además con todo el avance de la tecnología, se han construido
microprocesadores con memorias tipo flash, con capacidad de programación ISP
61
(In System Programming), y otras herramientas, cualidades que la empresa
holandesa MCS Electronics ha sabido aprovechar, y ha cubierto los siguientes
componentes de software, con el paquete BASCOM AVR:
• Redactor
• Basic recopilador
• Ensamblador
• Simulador
• Terminal Emulador
• Lcd designer
• LIB manager
• Programador
Pero el programa Bascom no es solamente un compilador en lenguaje Basic, sino
que nos ofrece un único Ambiente de Desarrollo Integrado (IDE). Inicializando el
programa nos encontramos en un ambiente de desarrollo donde realizaremos
todo nuestro trabajo, y el primer