Documentos de Académico
Documentos de Profesional
Documentos de Cultura
21-22 PI Prac1a Enunciado
21-22 PI Prac1a Enunciado
PERIFÉRICOS E INTERFACES
PRÁCTICAS DE LABORATORIO
Práctica 1a
40964-Periféricos e Interfaces 3
Práctica 1a Interfaces paralelos en el uC ATmega 2560
2 Documentación previa
La documentación básica a utilizar para la realización de esta práctica (además de los propios
relacionados con la teoría del módulo 1y 2) está disponible en el Campus Virtual de la ULPGC en
el curso que corresponde a Periféricos e Interfaces. La documentación mínima a manejar será la
siguiente:
- Documento 1: Enunciado de la práctica (este documento)
- Documento 2: Presentación de la práctica
- Transparencias del módulo 1 y 2
- Datasheet Atmel ATmega 2560 (435 páginas)
o http://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-
microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf
- Software: Entorno de programación de Arduino y simulador Proteus
https://www.arduino.cc/en/Main/Software
https://www.hubor-proteus.com/
- Internet: Búsqueda de cualquier otra información que se considere necesaria
40964-Periféricos e Interfaces 5
Practica 1a Interfaces paralelos en el uc ATmega 2560
En los siguientes apartados, realizaremos una breve descripción de la estructura de las tarjetas que
conforman nuestro hardware experimental y del entorno de programación Arduino. Una vez
estudiado los diferentes aspectos de hardware tendremos una visión general del sistema que nos va
a permitir afrontar con éxito el desarrollo de las primeras aplicaciones planteadas en el apartado de
"realización práctica".
40964-Periféricos e Interfaces 6
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 7
Practica 1a Interfaces paralelos en el uc ATmega 2560
Memoria
- Memoria Flash (256 KB), SRAM (8KB) y EEPROM (4 KB)
Entrada/salida
Los pines de entrada/salida del microncontrolador son multifuncionales, es decir, son compartidos
por los diferentes interfaces y pueden tener las siguientes capacidades:
- 86 líneas de entrada/ salida digital de propósito general agrupadas en puertos de 8 y 6 bits
- 6 Interrupciones externas
- USART programables (comunicación serie)
- SPI (Serial Peripheral Interface)
- TWI: two-wire interface (i2c)
- ADC: 16 canales, 10-bit resolución
- 15 salidas de timers
Otros
- 1 comparador analógico
- Timer Watchdog, programable y con oscilador interno
- JTAG
40964-Periféricos e Interfaces 8
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 9
Practica 1a Interfaces paralelos en el uc ATmega 2560
La figura 4 muestra el encapsulado y patillaje (pines) del microcontrolador así como otras
características en cuanto a consumos, temperatura de funcionamiento y versiones.
40964-Periféricos e Interfaces 10
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 11
Practica 1a Interfaces paralelos en el uc ATmega 2560
prevalecen las funciones de entrada/salida digital de propósito general sobre otras de carácter
alternativo que se activan cuando se realiza la programación adecuada de su interfaz.
Los interfaces son visibles al programador a través de un conjunto de registros que se mapean en el
espacio de direccionamiento de memoria del microcontrolador. Concretamente, el microcontrolador
ATmega 2560 mapea estos registros en el rango de direcciones 0x20-0x1FF (0x200-0x20 = 512-32
= 480 bytes) aunque muchas de estas direcciones están libres y reservadas para usos futuros del
microcontrolador. El acceso a los registros se realiza con instrucciones nativas del microcontrolador
del tipo IN/OUT o LD/ST (LOAD/STORE) según se acceda a ellos a través del espacio de
entrada/salida
1
(puertos) o del espacio de memoria, respectivamente.
Las instrucciones IN/OUT solo pueden acceder a un espacio de entrada/salida de tamaño 64 bytes
(0x00-0x3F) en la que se encuentran mapeados diferentes registros (port mapped I/O). Los registros
también se encuentran mapeados como memoria (memory mapped I/O) a los que se accede con
instrucciones del tipo LD/ST en el rango de direcciones 0x020-0x1FF (480 direcciones o registros)
espacio más que suficiente para mapear gran número de registros. Tenga en cuenta que parte de este
2
espacio no se llega a utilizar o está reservado para un uso futuro.
En la figura 6 se muestra los diferentes pines de los conectores de la tarjeta Arduino Mega 2560
especificándose las diferentes funcionalidades que pueden tener cada uno de ellos y los puertos del
microcontrolador a los que se conecta.
13
12
11
10
14
15
16
17
18
19
20
21
3
9
8
7
6
5
4
3
2
1
0
PH6/OC2B
PH4/OC4B
PG5/OC0B
TX0 PE1/TXD0/PDO
AREF
PH5/OC4C
PB7/OC0A/OC1C/PCINT7
PB5/OC1A/PCINT5
PB4/OC2A/PCINT4
PE3/OC3A/AIN1
RX0 PE0/RXD0/PCINT8
TX3 PJ1/TXD3/PCINT10
RX3 PJ0/RXD3/PCINT9
TX2 PH1/TXD2
RX2 PH0/RXD2
TX1 PD3/TXD1/INT3
RX1 PD2/RXD1/INT2
SDA PD1/SDA/INT1
SCL PD0/SCL/INT0
PH3/OC4A
PB6/OC1B/PCINT6
PE5/OC3C/INT5
PE4/OC3B/INT4
22
PA0/AD0
23
PA1/AD1
24
PA2/AD2
25
PA3/AD3
26
PA4/AD4
27
PA5/AD5
4 28
PA6/AD6
29
PA7/AD7
30
PWM COMUNICATION PC7/A15
31
PC6/A14
32
PC5/A13
33
DIGITAL
PC4/A12
34
PC3/A11
35
PC2/A10
36
PC1/A9
37
5 PC0/A8
ATMEGA2560 38
16AU 1126 PD7/T0
39
PG2/ALE
40
PG1/RD
41
PG0/WR
42
PL7
43
PL6
44
PL5/OC5C
45
PL4/OC5B
ANALOG IN PL3/OC5A
46
47
6 PL2/T5
48
PK2/ADC10/PCINT18
PK3/ADC11/PCINT19
PK4/ADC12/PCINT20
PK5/ADC13/PCINT21
PK6/ADC14/PCINT22
PK7/ADC15/PCINT23
PL1/ICP5
PK0/ADC8/PCINT16
PK1/ADC9/PCINT17
49
PL0/ICP4
50
PF5/ADC5/TMS
PF6/ADC6/TDO
PF4/ADC4/TCK
PB3/MISO/PCINT3
PF7/ADC7/TDI
51
PB2/MOSI/PCINT2
52
PF0/ADC0
PF1/ADC1
PF2/ADC2
PF3/ADC3
PB1/SCK/PCINT1
53
PB0/SS/PCINT0
RESET
7 ARDUINO MEGA2560 R3
A0
A1
A2
A3
A7
A6
A5
A4
A8
A9
A10
A11
A12
A13
A14
A15
40964-Periféricos e Interfaces 12
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 13
Practica 1a Interfaces paralelos en el uc ATmega 2560
Ejemplos:
// Programación de la dirección de los pines del PORTL
DDRL=B11110000; // PL[7:4]: pines de salida PL[3:0]: pines de entrada
// Escritura en el puerto PORTL
PORTL= B11110011; // PL[7:4]: Salidas a "1"; PL[3:2]: Res. pull-up desconectadas; PL[1:0]: Res.
pull-up conectadas
// Programar solo los pines 7 y 0 del puerto B de salida
DDRB = DDRB | B1000001;
40964-Periféricos e Interfaces 14
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 15
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 16
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 17
Practica 1a Interfaces paralelos en el uc ATmega 2560
Para más información y uso de las funciones consultar la página web de Arduino.
40964-Periféricos e Interfaces 18
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 19
Practica 1a Interfaces paralelos en el uc ATmega 2560
El uso de los timers es esencial en un uso avanzado del microcontrolador. Sin embargo, en esta
práctica no profundizaremos más en su interfaz queserá objeto de un estudio más detallado en
futuras prácticas por lo que ahora sólo comentaremos las funciones del entorno de programación
Arduino que manejan este tipo de señales.
40964-Periféricos e Interfaces 20
Practica 1a Interfaces paralelos en el uc ATmega 2560
La función analogRead(pin) lee el valor analógico del pin y lo convierte a un valor digital de 10
bits (0-1023 en decimal).
La función analogReference(type) fija un voltaje de referencia para el conversor analógico digital
según el valor máximo esperado para las señales a digitalizar y conectadas a las entradas analógicas.
Para ello, hay varias opciones que van desde los 5v internos (valor por defecto) hasta el valor de un
voltaje externo (entre 0 y 5v) aplicado al pin AREF. Cuando se cambia este valor de referencia, las
primeras lecturas que se hagan con analogRead() puede que no sean muy exactas.
La función pinMode(pin, INPUT_PULLUP) conecta una resistencia de pull-up en la entrada
analógica indicada por el parámetro "pin" para que la entrada no quede al aire cuando no hay nada
conectado.
Ejemplo:
analogReference(INTERNAL2V56); // se fija un voltaje de referencia interno de 2.56v
pinMode(A0,INPUT_PULLUP); // conecta resistencia de pull-up
int val = analogRead(A0); // val= 0-1023 (para entradas de 0 a 2.56 voltios)
40964-Periféricos e Interfaces 21
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 22
Practica 1a Interfaces paralelos en el uc ATmega 2560
......
Las interrupciones pueden ser externas o internas. Las interrupciones externas tienen su origen en el
exterior del microcontrolador y son producidas por dispositivos que cuando requieren atención del
procesador interrumpen para que se les atienda de forma inmediata. Las interrupciones internas
tienen su origen en los múltiples interfaces y dispositivos internos del microcontrolador y sus
requerimientos son similares a las de las interrupciones externas.
40964-Periféricos e Interfaces 23
Practica 1a Interfaces paralelos en el uc ATmega 2560
Para las interrupciones, solo nos interesa el bit 7 de este registro. Este bit afecta a todas las
interrupciones del microcontrolador, permitiéndolas o no. Para manipular este bit se dispone de las
instrucciones:
40964-Periféricos e Interfaces 24
Practica 1a Interfaces paralelos en el uc ATmega 2560
Las interrupciones INTn son de carácter individual y se programan de forma independiente a través
de los registros de su interfaz. Los dispositivos externos pueden hacer uso de estas interrupciones a
través de los pines mencionados en la tabla. Los registros a los que hay que acceder para configurar
y habilitar una interrupción externa, tipo INTn, son los siguientes:
40964-Periféricos e Interfaces 25
Practica 1a Interfaces paralelos en el uc ATmega 2560
Con los bits de este registro se puede habilitar o deshabilitar una interrupción externa de tipo INTn
de forma individual. A este registro se le conoce con el nombre de registro de máscaras y actúa de
la siguiente forma:
Bit=1: Habilita la interrupción y puede interrumpir (desenmascara)
Bit=0: Deshabilita la interrupción y no puede interrumpir (enmascara)
40964-Periféricos e Interfaces 26
Practica 1a Interfaces paralelos en el uc ATmega 2560
Este registro nos permite conocer las interrupciones que están pendientes de ser atendidas. Cuando
se ejecuta la rutina de servicio de una interrupción, el bit correspondiente se pone a 0. También se
puede resetear (poner a cero) si en él se escribe un "1".
Note que ciertas interrupciones del tipo PCINTn, marcadas con el carácter "-", no tienen salida a los
conectores de la tarjeta Arduino.
Los registros del interfaz para configurar y habilitar este tipo de interrupciones son:
Este registro nos permite conocer los grupos de interrupciones que están pendientes de ser atendidos
(pero no que interrupción dentro del grupo!). Cuando se ejecuta la rutina de servicio de una
40964-Periféricos e Interfaces 27
Practica 1a Interfaces paralelos en el uc ATmega 2560
interrupción, el bit correspondiente se pone a "0". También se puede resetear (poner a cero) si en él
se escribe un "1".
40964-Periféricos e Interfaces 28
Practica 1a Interfaces paralelos en el uc ATmega 2560
ISR(intr_vect){
// Cuerpo de la subrutina ISR()
// Se ejecutará cuando se produzca una interrupción
// con el nº de vector "intr_vect"
}
El parámetro "intr_vect" es el vector de interrupción que cada fuente de interrupción tiene ya fijado
(interrupciones autovectorizadas) y al que se hace referencia de forma muy cómoda a través de un
nombre o etiqueta. La siguiente tabla muestra algunos de estos nombres de vectores (del 0 al 31)
que se utilizan como índice para entrar en la tabla de vectores de interrupción desde donde se salta a
la subrutina de servicio de interrupción o función ISR() del vector.
Para una lista completa de vectores de interrupción y sus nombres consultar el fichero:
C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\iomxx0_1.h
40964-Periféricos e Interfaces 29
Practica 1a Interfaces paralelos en el uc ATmega 2560
Una vez visto cómo se define una función ISR(), es necesario afrontar la programación de los
interfaces para que puedan generar interrupciones. Como son varios los interfaces disponibles en el
microcontrolador, en esta práctica solo abordaremos el estudio del que corresponde a las
interrupciones externas y de forma más superficial, el interfaz del TIMER1, solo en la
programación necesaria para que genere una interrupción cada cierto tiempo.
40964-Periféricos e Interfaces 30
Practica 1a Interfaces paralelos en el uc ATmega 2560
Habilitar interrupciones
interrupts()
sei()
ISR(intr_vect){....}
Como se intuye de las anteriores funciones, para las interrupciones externas de tipo INTn (INT0-1-
2-3-4-5) el entorno Arduino proporciona todo lo necesario para que el usuario, de forma muy
cómoda, configure, habilite y declare la subrutina de servicio que se ha de ejecutar cuando por un
pin externo, con capacidad de interrumpir, se interrumpa. El usuario apenas necesita conocer
detalles internos del microcontrolador para utilizar este tipo de interrupciones.
Sin embargo, el manejo del resto de tipos de interrupciones requiere de una mayor implicación del
programador, en el sentido que, ha de conocer la estructura interna de los interfaces, sus registros y
funcionalidades para programar adecuadamente las operaciones de configuración y habilitación de
interrupciones. Se puede decir que el programador ha de hacer una programación directa, de bajo
nivel, accediendo al hardware de los interfaces a nivel de bits. No es necesario comentar que las
interrupciones de tipo INTn se pueden gestionar de esta forma, a bajo nivel, sin hacer uso de las
funciones de alto nivel de Arduino.
40964-Periféricos e Interfaces 31
Practica 1a Interfaces paralelos en el uc ATmega 2560
5 Tarjeta de expansión
5.1 Componentes básicos
Con objeto de poder facilitar y desarrollar aplicaciones con dispositivos periféricos de uso frecuente
se ha diseñado y construido una tarjeta de expansión (ver figura 13) que integra varios periféricos
de entrada y salida. Las señales de control de estos periféricos terminan en unos conectores que
luego mediante un cableado se pueden conectar fácilmente a los pines de la tarjeta Arduino Mega
2560. La tarjeta dispone de los siguientes elementos:
1) Pulsadores
2) Visualizador de 4 dígitos 7-segmentos
3) Zumbador
4) Teclado matricial de 12 teclas (4 filas x 3 columnas)
5) Memoria EEPROM (I2C)
6) Pantalla LCD (serial/I2C)
7) Pantalla OLED (I2C)
8) Otros componentes: resistencias y transistores
En la realización de esta práctica sólo será necesario el uso de los pulsadores, el visualizador de 7
segmentos y el zumbador, que serán objeto de descripción en los siguientes apartados, dejando la
descripción del resto de los componentes para prácticas futuras y cuando se haga uso de ellos.
40964-Periféricos e Interfaces 32
Practica 1a Interfaces paralelos en el uc ATmega 2560
Conector
Bus I2C
Pantalla
LCD
Transistores
Resistencias
Visualizador
Zumbador 7-segmentos
Resistencias
Pulsadores
Teclado
matricial
40964-Periféricos e Interfaces 33
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 34
Practica 1a Interfaces paralelos en el uc ATmega 2560
5.1.2 Pulsadores
Los pulsadores son elementos muy sencillos que cuando se pulsan establecen una conexión entre
dos terminales. Se comercializan en distintas calidades definidas por el número de pulsaciones que
son capaces de soportar sin fallos de conexión.
40964-Periféricos e Interfaces 35
Practica 1a Interfaces paralelos en el uc ATmega 2560
de intensidad son excesivos para un pin del Arduino que según las especificaciones puede trabajar
con valores típicos de hasta 20 mA. A partir de los 40 mA se corre el riesgo de quemar el pin o
línea. Es aquí donde utilizamos un transistor que actúa como un interruptor controlado por una señal
de mando generada por el Arduino. Así podremos controlar el paso de corrientes de colector (Ic) de
100-200 mA a partir de una señal de mando del orden de 10-20 mA aplicada a la base (Ib). Ver
figura 18.
La corriente de base es la que tendría que manejar (dar o recibir) el pin del Arduino que como
puede observarse es 10 veces más pequeña que la corriente del terminal de colector(proveniente del
cátodo común del visualizador 7 segmentos).
40964-Periféricos e Interfaces 36
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 37
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 38
Practica 1a Interfaces paralelos en el uc ATmega 2560
En segundo grupo de señales, asociadas al control del cátodo común de cada uno de los dígitos del
visualizador, es proporcionado por el PORTL del Arduino de acuerdo a la información mostrada en
la figura 22. El cátodo común del dígito más a la derecha (unidades) está conectado al emisor de un
transistor y se gobierna con la señal D4-C1(pin 49, PL0). Cuando dicha señal está a cero el
transistor se satura o conduce conectando el cátodo común a tierra y, por tanto, todos aquellos
segmentos que tenga un “1”, o 5 voltios, a la entrada se encenderán. De igual forma, se ha
conectado el dígito de la izquierda (decenas) pero en este caso es la señal D3-C2(pin 48, PL1) la
40964-Periféricos e Interfaces 39
Practica 1a Interfaces paralelos en el uc ATmega 2560
encargada de activar el dígito. De igual forma, las señales de control D2-C3 (pin 47, PL2) y D1-nn
(pin46, PL3), controlan los dígitos de las centenas y unidades de millar. La tabla de la figura 22
resume las conexiones comentadas anteriormente a los pines PL0, PL1, PL2 y PL3. El resto de los
pines del puerto L no es objeto de estudio es esta práctica ya que están relacionados con el teclado
matricial, objeto de estudio en futuras prácticas.
PORTL
Nº pin Puerto Nombre señal Función
42 PL7-in fila_R1 Leer fila R1 del teclado
43 PL6-in fila_R2 Leer fila R2 del teclado
44 PL5-in fila_R3 Leer fila R3 del teclado
45 PL4-in fila_R4 Leer fila R4 del teclado
46 PL3-out D1---- activar D1(mill.)
47 PL2-out D2-C3 activar D2 (cent.) + col. 3 teclado
48 PL1-out D3-C2 activar D3 (dec.) + col. 2 teclado
49 PL0-out D4-C1 activar D4 (uds.) + col. 1 teclado
Figura 22. Conexiones de las señales de control D1-D2-D3-D4
5.3.2 Pulsadores
Los pulsadores son conectados a los pines PC[7:3] del Arduino Mega 2560 de modo que cuando se
pulsa un pulsador el pin se pone a "0" y cuando no está pulsado el pin queda a "1". Será necesario
activar las resistencias de pull-up internas del Arduino para definir el estado HIGH de un
pulsador cuando éste no esté pulsado. En la figura 23, se muestra la conexión de los pulsadores a
los pines del PORTC del Arduino.
PORTC
Nº pin Puerto Nombre señal Función
30 PC7-in pright Derecha
31 PC6-in pdown Abajo
32 PC5-in pleft Izquierda
33 PC4-in penter Enter
34 PC3-in pup Arriba
35 PC2 -
36 PC1 -
37 PC0-out speaker Altavoz
Figura 23. Conexiones de los pulsadores
40964-Periféricos e Interfaces 40
Practica 1a Interfaces paralelos en el uc ATmega 2560
Para una correcta detección de las señales de los pulsadores es necesario conectar las resistencias de
pull-up de los pines que correspondan para lo que se pueden utilizar las siguientes líneas de código
en el apartado de setup() de nuestro programa:
5.3.3 Zumbador/altavoz
El zumbador o altavoz, según de los que se disponga, permite generar una señal acústica de una
frecuencia de terminada. Para ello, haremos uso de la función tone():
tone(pin, frecuencia, duración en ms)
Inicialmente el zumbador de la tarjeta de expansión está ya cableado para hacer uso del pin 37
(PC0).
40964-Periféricos e Interfaces 41
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 42
Practica 1a Interfaces paralelos en el uc ATmega 2560
Ejemplo de programa:
/*
Blink:Turns on an LED on for one second, then off for one second, repeatedly.
*/
// Declaración de variables
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// Inicialización: setup()
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// otras funciones
void function_1() { … }
void function_2() { … }
ISR(vector de interrupción){.....}
40964-Periféricos e Interfaces 43
Practica 1a Interfaces paralelos en el uc ATmega 2560
7 Realización práctica
Para familiarizarse con el sistema de entrada y salida y con el entorno de programación de Arduino,
plantearemos un conjunto de actividades prácticas, de complejidad creciente, de modo que, una vez
realizadas, se tenga una cierta habilidad y soltura para el desarrollo de aplicaciones que impliquen
emplear las técnicas de transferencias de datos y sincronización en las operaciones de entrada y
salida. El estudiante tiene completa libertad para realizar cualquier otra actividad complementaria, o
de ampliación a las actividades básicas planteadas, con la posibilidad de incrementar la calificación
de la práctica, hasta en 1 punto, por mejoras. El siguiente esquema muestra un diagrama de bloques
del display de 7-segmentos, pulsadores y un teclado (en principio, no usado en esta práctica) y las
conexiones al microcontrolador. Dadas las condiciones en las que se desarrolla la docencia, la
práctica se desarrollará, íntegramente, en el simulador Proteus. Diseñe el sistema propuesto
en dicho simulador, o bien, descargue el proyecto disponible en la carpeta de la práctica 1 en
el campus virtual.
40964-Periféricos e Interfaces 44
Practica 1a Interfaces paralelos en el uc ATmega 2560
30 97
RESET RESET PF0/ADC0 AD0 AD0 IO54
96
PF1/ADC1 AD1 AD1 IO55
34 95
XTAL1 PF2/ADC2 AD2 AD2 IO56
33 94
XTAL2 PF3/ADC3 AD3 AD3 IO57
93
PF4/ADC4/TCK AD4 AD4 IO58
78 92
IO22 PA0/AD0 PF5/ADC5/TMS AD5 AD5 IO59
77 91
IO23 PA1/AD1 PF6/ADC6/TDO AD6 AD6 IO60
76 90
IO24 PA2/AD2 PF7/ADC7/TDI AD7 AD7 IO61
75
IO25 PA3/AD3 AD8 IO62
74 51
IO26 PA4/AD4 PG0/WR IO41 AD9 IO63
73 52
IO27 PA5/AD5 PG1/RD IO40 AD10 IO64
72 70
IO28 PA6/AD6 PG2/ALE IO39 AD11 IO65
71 28
IO29 PA7/AD7 PG3/TOSC2 AD12 IO66
29
PG4/TOSC1 AD13 IO67
19 1
IO53 PB0/SS/PCINT0 PG5/OC0B IO4 AD14 IO68
16
15
14
13
12
10
11
20
9
IO52 PB1/SCK/PCINT1 AD15 IO69
21 12
IO51 PB2/MOSI/PCINT2 PH0/RXD2 IO17
IO50
22
PB3/MISO/PCINT3 PH1/TXD2
13
IO16 IO14 TXD3 RN1
23 14 330
IO10 PB4/OC2A/PCINT4 PH2/XCK2 IO15 RXD3
24 15
IO11 PB5/OC1A/PCINT5 PH3/OC4A IO6 IO16 TXD2
25 16
IO12 PB6/OC1B/PCINT6 PH4/OC4B IO7 IO17 RXD2
10
12
26 17 PORTA U2:C U2:D U2:E U2:F
8
IO13 PB7/OC0A/OC1C/PCINT7 PH5/OC4C IO8 IO18 TXD1
1
2
3
4
5
6
7
8
18 74HC07 74HC07 74HC07 74HC07
PH6/OC2B IO9 IO19 RXD1 IO22
53 27
IO37 PC0/A8 PH7/T4 IO20 SDA IO23
54
IO36 PC1/A9 IO21 SCL IO24
55 63
IO35 PC2/A10 PJ0/RXD3/PCINT9 IO15 IO53 SS IO25
11
13
56 64
IO34 PC3/A11 PJ1/TXD3/PCINT10 IO14 IO51 MOSI IO26
57 65
IO33 PC4/A12 PJ2/XCK3/PCINT11 IO50 MISO IO27
58 66
IO32 PC5/A13 PJ3/PCINT12 IO52 SCK IO28
59 67
IO31 PC6/A14 PJ4/PCINT13 IO1 TXD IO29
60 68 LS1
IO30 PC7/A15 PJ5/PCINT14 IO0 RXD
69
PJ6/PCINT15
43 79
IO21 PD0/SCL/INT0 PJ7 +5V
44 PUP
IO20 PD1/SDA/INT1
45 89
IO19 PD2/RXD1/INT2 PK0/ADC8/PCINT16 AD8
46 88
3
IO18 PD3/TXD1/INT3 PK1/ADC9/PCINT17 AD9 IO13
47 87 PORTL
PD4/ICP1 PK2/ADC10/PCINT18 AD10 IO37 SPEAKER
48 86
49
PD5/XCK1
PD6/T1
PK3/ADC11/PCINT19
PK4/ADC12/PCINT20
85
AD11
AD12
IO42
IO43
A
1 2 3
50 84 PENTER
IO38 PD7/T0 PK5/ADC13/PCINT21 AD13 IO34 IO44
83
PK6/ADC14/PCINT22 AD14 IO33 IO45
2 82
IO0
IO1
3
PE0/RXD0/PCINT8/PDI PK7/ADC15/PCINT23
PE1/TXD0/PDO
AD15
RESET
IO32
IO31
IO46
IO47
B
4 5 6
4 35
PE2/XCK0/AIN0 PL0/ICP4 IO49 IO30 IO48
5 36
IO5 PE3/OC3A/AIN1 PL1/ICP5 IO48 IO49
6 37 PORTC
IO2
IO3
7
PE4/OC3B/INT4
PE5/OC3C/INT5
PL2/T5
PL3/OC5A
38
IO47
IO46
PL0
C
7 8 9
8 39
PE6/T3/INT6 PL4/OC5B IO45
9 40
PE7/ICP3/CLKO/INT7 PL5/OC5C IO44 LED & Reset
41
AREF
98
AREF
PL6
PL7
42
IO43
IO42
D
0 #
100 PDOWN
+5V AVCC
Arduino Mega 2560
U3 U4
U2:A U2:B 7 3 7 3
WC E2 WC E2
5 2 5 2
SDA E1 SDA E1
1 2 3 4 R9 R10 6
SCL E0
1 6
SCL E0
1
TXD RXD
VT52, VT100, ANSI
RXD TXD
RTS
Xmodem, Ymodem, Zmodem
CTS
LCD1
OLED12864I2C
40964-Periféricos e Interfaces 45
Practica 1a Interfaces paralelos en el uc ATmega 2560
40964-Periféricos e Interfaces 46
Practica 1a Interfaces paralelos en el uc ATmega 2560
una cierta frecuencia se ve estático porque el ojo humano no es capaz de apreciar la conmutación
entre dígitos. A continuación, se muestra la estructura general del programa que le puede ayudar a
realizar este apartado:
boolean estado=false;
Setup(): Inicialización
Loop(): Programa principal {
Leer pulsadores y actualizar variables del contador
If (estado) then {
Apagar decenas, encender y visualizar unidades
Delay 10 ms}
Else {
Apagar unidades, encender y visualizar decenas
Delay 10 ms }
estado = !estado;
}
// función de setup()
void setup(){
// Habilitación de la interrupción INT2, flanco de subida (rising)
cli();
EICRA |= (1<<ISC21) | (1<<ISC20);
EIMSK |= (1<<INT2);
sei();
}
40964-Periféricos e Interfaces 47
Practica 1a Interfaces paralelos en el uc ATmega 2560
ISR (INT2_vect) {
// Rutina de servicio para la visualización entrelazada
// en el display de 4 dígitos de 7-segmentos
…
}
void loop(){
...
}
Para implementar la visualización entrelazada se procederá de forma que, la primera vez que se
interrumpa, la ISR() de la interrupción INT2 apagará el dígito de las decenas y activará el dígito de
las unidades (solo se visualizaría las unidades del contador); en la segunda interrupción, la ISR()
apagará el dígito de las unidades y activará el dígito de las decenas (solo se visualizará las decenas
del contador) y así, sucesivamente, de forma alternada cada 10 ms entre unidades y decenas.
Observe que, si baja la frecuencia del generador de señal el display parpadeará y podrá observar el
funcionamiento de la visualización entrelazada.
40964-Periféricos e Interfaces 48
Practica 1a Interfaces paralelos en el uc ATmega 2560
Ejemplo:
p1a_tarea2_amf.pdsprj
Fichero correspondiente al informe de la práctica 1a, tarea 2 entregado por Anabel Medina Falcón.
La presentación de los informes fuera de plazo implica que el estudiante pierde dicha puntuación.
Una vez transcurrido el plazo para la realización de la práctica, y en hora convenida, se realizará un
control práctico (prueba, cuestionario, …) relativo a las actividades que habrá tenido que desarrollar
durante la realización de la práctica.
40964-Periféricos e Interfaces 49