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