Actualizado el 12 de Julio del 2020 (Publicado el 23 de Julio del 2019)
845 visualizaciones desde el 23 de Julio del 2019
1,7 MB
17 paginas
Creado hace 9a (24/11/2015)
4 – Dispositivos de E/S
Dispositivos, puertos y registros de E/S
Dispositivos de E/S paralelo
Conversión A/D. Pulse WidthModulation
Otros dispositivos típicos de E/S
©Universidad Politécnica de Madrid
s
e
.
m
p
u
@
e
c
i
Dispositivos de Entrada/Salida
•
Los dispositivos de E/S permiten leer y escribir las señales externas
uP
Mem
E/S
Señales
externas
Direcciones
Datos
Control
En el caso de la familia AVR de Atmel, la
En el caso de la familia AVR de Atmel, la
funcionalidad y el número de dispositivos de
funcionalidad y el número de dispositivos de
E/S depende del modelo de MCU en particular
E/S depende del modelo de MCU en particular
(la CPU es la misma para toda la familia AVR)
(la CPU es la misma para toda la familia AVR)
Dispositivos de E/S
Fundamentos de Electrónica: Microprocesadores
2
Puertos y registros de Entrada/Salida
Puerto de E/S
Puerto de E/S
Conjunto de señales externas con una
funcionalidad común y una circuitería
(dispositivo de E/S) que permite leerlas y/o
controlarlas.
Diferentes tipos: E/S paralelo, E/S serie,
E/S analógica, ...
Los puertos de E/S pueden tener asociadas
diferentes funcionalidades (según se
configuren)
Registros de E/S
Registros de E/S
uP
Mem
E/S
Señales
externas
Direcciones
Datos
Control
Registros asociados a los puertos de E/S. Cada puerto de E/S puede tener asociados uno o varios
registros que permiten controlar el funcionamiento del puerto.
Los registros de E/S se acceden mediante instrucciones de lectura/escritura de forma análoga a
como se accede a las posiciones de memoria.
Existen registros asociados a los datos (las señales a controlar) y al control (el modo de operación).
El tamaño (nº de bits) del registro suele coincidir con el de la palabra del uP
Normalmente interesa más el valor particular de cada bit de una palabra, y no tanto el valor de la
palabra completa
Fundamentos de Electrónica: Microprocesadores
3
Ejemplo: Puertos de E/S en el AtMega168
▪ Los puertos de E/S en los AVR pueden operar en varios modos (como en casi todos
los uC)
Puertos de E/S
Puertos de E/S
Puerto B (PB)
Entrada/Salida paralelo (se verá)
Generación de señales PWM (se verá)
Otros (SPI, interrupciones, capturas..)
Puerto C (PC)
Entrada/Salida paralelo
Convertidor A/D (se verá)
Otros (Interrupciones)
Puerto D (PD)
Entrada/Salida paralelo
Puerto serie
Generación de señales PWM
Otros (Interrupciones)
Fundamentos de Electrónica: Microprocesadores
4
Puertos de E/S paralelo
Puertos de E/S paralelo
Puertos de E/S paralelo
Puerto de E/S en el que se controlan (leen o escriben) varias señales externas al mismo tiempo.
Pueden ser de entrada, salida, o configurables por el programa.
Son los puertos más comunes.
El tamaño (nº de bits) del puerto suele coincidir con el de la palabra del uP (8 bits, en el AVR)
Registros asociados
Registros asociados
Registros de datos: registro conectado a las señales de E/S.
- Si un bit del puerto está configurado como entrada un nivel te tensión alto (Vcc) en su pin correspondiente se leerá
como un ‘1’, y un nivel bajo (Gnd) se leerá como un ‘0’.
- Si un bit está configurado como salida, un ‘1’ fijará un valor alto (Vcc) en su pin correspondiente,
y un ‘0’ pondrá un valor bajo (Gnd).
- Escribir sobre un bit configurado como entrada no tiene ningún efecto.
- En algunos uC, los registros de datos de entrada (para leer) y de salida (para escribir), son distintos
(como en el caso de los AVR que usamos)
Registro de direcciones de los datos: registro que fija la dirección de las señales de E/S.
- Depende de cada micro, pero es habitual que un ‘0’ provoque que su señal correspondiente
sea de entrada y un ‘1’ haga que sea de salida.
Fundamentos de Electrónica: Microprocesadores
5
Puertos de E/S paralelo en el AtMega168
Dispone de tres puertos de E/S paralelo (B, C y D)
Registro de
direcciones
Registro de
salida
b7
b7
El valor de cada bit en el
registro de direcciones
configuraría si la señal
correspondiente del
registro de datos es de
entrada o salida
1
0
El microprocesador
accederá a un registro u
otro en función de la
dirección
b0
Registro de entrada: registro de lectura de puerto
- Un bit se lee como un ‘1’ si hay un ‘1’ (Vcc) en su pin correspondiente
- Un bit se lee como un ‘0’ si hay un ‘0’ (Gnd) en su pin correspondiente
Registro de direcciones (Data Direction Register):
- Configuración del sentido de cada bit del puerto
(‘0’ lo pone como entrada y ‘1’ como salida)
Registro de salida: Registro de escritura.
- Al escribir un ‘1’ en un bit se pone un ‘1’ (Vcc) en su pin correspondiente
- Al escribir un ‘0’ en un bit se pone un ‘0’ (Gnd) en su pin correspondiente
Address
8
D7..0
CS
R/W
b0
b7
b0
Fundamentos de Electrónica: Microprocesadores
Registro de
entrada
6
IO7
IO6
IO5
IO4
IO3
IO2
IO1
IO0
Ejemplo: Encender y apagar un LED con un pulsador
▪ ¿Cómo podríamos hacer un sistema que encienda las luces cuando anochece?
+Vcc
unsigned char boton;
unsigned char ledState = 0;
2
uC
7
PB5
PB1
0
Puerto B
500Ω
LED
// Primero planteo la funcionalidad, luego ya veremos
// cómo accedo al hardware
int main() {
// Inicialización
InicializaES();
10kΩ
while (true) { // Bucle infinito
boton = leerBoton();
if (boton != 0) { // boton pulsado actuar
// leo el estado del botón
if (ledState == 0) {
setLed(1);
ledState = 1;
} else {
setLed(0);
ledState = 0;
}
}
}
}
⁇
1
Planteamiento de alto nivel
a)
b)
c)
d)
e)
Configurar las señales de entrada y salida
Leer el bit del puerto que me interesa
Decidir en función del valor
Escribir en el puerto actuando sólo sobre el led
Repetir desde el paso b
3
Si comprobásemos el funcionamiento del sistema, se observaría
que mientras se mantiene el botón pulsado el led luciría levemente.
Por otro lado, veríamos que el led se enciende y apaga de forma
poco predecible en vez de conmutar como queremos (debería
cambiar de estado cada vez que pulsamos)
¿A qué podría ser debido este comportamiento?
¿Cómo podría solucionarse?
Fundamentos de Electrónica: Microprocesadores
7
Ejemplo: Encender y apagar un LED con un pulsador
▪ Implementando las funciones de E/S, (acceso al hardware)
uC
7
PB5
PB1
0
Puerto B
+Vcc
unsigned char boton;
unsigned char ledState = 0;
10kΩ
500Ω
LED
// Primero planteo la funcionalidad, luego ya veremos
// cómo accedo al hardware
int main() {
// Inicialización
InicializaES();
while (true) { // Bucle infinito
boton = leerBoton();
if (boton != 0) { // boton pulsado actuar
// leo el estado del botón
if (ledState == 0) {
setLed(1);
ledState = 1;
} else {
setLed(0);
ledState = 0;
}
}
}
}
void InicializaES() {
void setLed(char state) {
// Configura el pin 1 el puerto B para que sea salida
}
// Modifica el valor del pin 1 del puerto B
// en función de ‘state’
}
char leerBoton() {
// lee el valor del pin 5 del puerto B
}
Fundamentos de Electrónica: Microprocesadores
8
Ejemplo: Encender y apagar un LED con un pulsador
Fundamentos de Electrónica: Microprocesadores
9
Ejemplo: Encender y apagar un LED con un pulsador
Numeración
según la API de
Arduino
Fundamentos de Electrónica: Microprocesadores
10
Ejemplo: Encender y apagar un LED con un pulsador
▪ Lo mismo con la API de Arduino
uC
7
PB5
PB1
0
Puerto B
500Ω
LED
+Vcc
unsigned char boton;
unsigned char ledState = 0;
void setup() { // esta función sólo se ejecuta una vez
pinMode( 9, OUTPUT ); // Configura los pines
pinMode( 13, INPUT );
}
10kΩ
void loop() { // Esta función se ejecuta continuamente
boton = digitalRead(13);
if (boton != 0) { // boton pulsado actuar
if (ledState == 0) {
digitalWrite(9, HIGH);
ledState = 1;
} else {
digitalWrite(9, LOW);
ledState = 0;
}
}
}
Nota: En la placa de Arduino, el pin 9 de la
Nota: En la placa de Arduino, el pin 9 de la
placa se corresponde con el pin PB1 del
placa se corresponde con el pin PB1 del
AtMega, y el pin 13 de la placa se
AtMega, y el pin 13 de la placa se
corresponde con el pin PB5 del AtMega
corresponde con el pin PB5 del AtMega
//////////////////// esto no lo haríamos nosotros, ya que
int main() { // el entorno de arduino incluye la
setup(); // función main() automáticamente, así
while (true) { // que nosotros solo tenemos
loop(); // que hacer las funciones de setup(),
} // que se ejecuta solo una vez, y loop()
} // que se ejecuta repetidamente
API (Application Programming Interface): es un conjunto de funciones y procedimientos que ofrece
API (Application Programming Interface): es un conjunto de funciones y procedimientos que ofrece
una biblioteca como capa de abstracción para acceder a funcionalidades de un nivel inferior.
una biblioteca como capa de abstracción para acceder a funcionalidades de un nivel inferior.
Fundamentos de Electrónica: Microprocesadores
11
Convertidor Analógico-Digital (ADC)
Vin
▪
▪
Digitaliza una señal continua (analógica) en 2N niveles.
VREF
Vin
ADC
N
DN-1..0
12 15 18 … … …
2 1 1 1 1 2 3 …
t
Características generales:
–
Número de bits del convertidor (N) resolución
Resolución q =
V REF
2N
–
–
Linealidad
otras …
Ej: VREF = 5V , N = 10 q = 4,88 mV
Fundamentos de Electrónica: Microprocesadores
12
Ejemplo: Controlar un LED con la luz ambiente
▪ ¿Cómo podríamos hacer un sistema que encienda las luces cuando anochece?
uC
PC0
PB0
LDR
(2KΩ – 2MΩ)
500Ω
+Vcc
...
int analogVal;
unsigned char led = 0;
...
configurar PB0 como salida (*);
configurar ADC para leer el valor analógico en PC0 (*);
...
10kΩ
while (true) { // bucle infinito
analogVal = valor devuelto por el ADC (0 – 1023) (*);
if (analogVal < 100) { // 100 sería un valor obtenido
// al anochecer, experimentalmente
encender led (*);
} else {
apagar led (*);
LED
}
}
... (*) se verá luego cómo se haría usando Arduino
① Conf
Comentarios de: 4 - Dispositivos de E/S (0)
No hay comentarios